443 lines
14 KiB
Plaintext
443 lines
14 KiB
Plaintext
|
Linux Mail-Queue mini-HOWTO
|
|||
|
Leif Erlingsson, leif@lege.com, Jan P Tietze, jpti<74>
|
|||
|
etze@mail.hh.provi.de
|
|||
|
v2.03, 2001-12-17, sendmail 8.8.7
|
|||
|
|
|||
|
Queue Remote Mail + Deliver Local Mail The Configuration Changes Nec<65>
|
|||
|
cessary to Make Sendmail Deliver Local Mail ***Now*** While Stashing
|
|||
|
Remote Mail in The Queue Until "I Say So".
|
|||
|
______________________________________________________________________
|
|||
|
|
|||
|
Table of Contents
|
|||
|
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
2. NON dial-on-demand solutions PART
|
|||
|
|
|||
|
2.1 Starting sendmail
|
|||
|
2.2 Configuring sendmail
|
|||
|
2.2.1 Configuring sendmail.cf directly, for trivial configurations
|
|||
|
2.2.2 Configuring sendmail.cf using m4 source
|
|||
|
2.3 Menu support suggestions
|
|||
|
|
|||
|
3. Dial-on-demand solutions PART
|
|||
|
|
|||
|
3.1 Configuring sendmail.cf
|
|||
|
3.1.1 Configuring sendmail.cf directly, for trivial configurations
|
|||
|
3.1.2 Configuring sendmail.cf using the m4 source.
|
|||
|
3.2 Adding dial delay
|
|||
|
3.2.1 Configuring sendmail.cf directly
|
|||
|
3.2.2 Configuring sendmail.cf using m4 source
|
|||
|
|
|||
|
4. Delivering e-mail
|
|||
|
|
|||
|
4.1 How to have e-mail delivered at special times.
|
|||
|
|
|||
|
5. License
|
|||
|
|
|||
|
|
|||
|
|
|||
|
______________________________________________________________________
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
The document is written by two authors. The NON dial-on-demand
|
|||
|
solutions part (oldest part) is written by Leif Erlingsson
|
|||
|
<leif@lege.com>, and the newer dial-on-demand solutions part is
|
|||
|
written by Jan P Tietze <jptietze@mail.hh.provi.de>.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
2. NON dial-on-demand solutions PART
|
|||
|
|
|||
|
Written by Leif Erlingsson <leif@lege.com>.
|
|||
|
|
|||
|
The original version of this part contained a lot of unnecessary
|
|||
|
stuff. This is all it takes, really...
|
|||
|
|
|||
|
|
|||
|
2.1. Starting sendmail
|
|||
|
|
|||
|
Slackware et al: /etc/rc.d/rc.M:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -os) [queue only mode]..."
|
|||
|
/usr/sbin/sendmail -bd -os # NOT "-bd -q 15m", the "standard" flags!
|
|||
|
|
|||
|
|
|||
|
|
|||
|
RedHat et al: /etc/rc.d/init.d/sendmail.init:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
echo -n "Starting sendmail: [queue only mode]"
|
|||
|
daemon sendmail -bd -os # NOT daemon sendmail -bd -q1h
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The -os is not really essential, all it does is this:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
SuperSafe [s] Be super-safe when running things, i.e.,
|
|||
|
always instantiate the queue file, even if
|
|||
|
you are going to attempt immediate delivery.
|
|||
|
Sendmail always instantiates the queue file
|
|||
|
before returning control the client under
|
|||
|
any circumstances. This should really
|
|||
|
always be set.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
This should already be configured in the default sendmail.cf anyway.
|
|||
|
|
|||
|
|
|||
|
2.2. Configuring sendmail
|
|||
|
|
|||
|
Serious sendmail users use the m4 source for this. I recommend this
|
|||
|
solution if you ever plan on upgrading sendmail and also make anything
|
|||
|
but trivial changes to sendmail.cf.
|
|||
|
|
|||
|
If you never intend to fix sendmail so envelope return headers et al
|
|||
|
works even though you might be on dynamic dial in IP or something,
|
|||
|
then you may not need to get the m4 source.
|
|||
|
|
|||
|
|
|||
|
2.2.1. Configuring sendmail.cf directly, for trivial configurations
|
|||
|
|
|||
|
This way of doing things is extremeley version dependent vs.
|
|||
|
sendmail.cf versions. The following solution is *only* valid for
|
|||
|
sendmail-8.8.x.
|
|||
|
|
|||
|
Edit /etc/sendmail.cf:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# avoid connecting to "expensive" mailers on initial submission?
|
|||
|
O HoldExpensive=True
|
|||
|
|
|||
|
|
|||
|
|
|||
|
... later ...
|
|||
|
|
|||
|
##### @(#)smtp.m4 8.33 (Berkeley) 7/9/96 #####
|
|||
|
|
|||
|
Msmtp, P=[IPC], F=mDFMuXe, S=11/31, R=21, E=\r\n, L=990,
|
|||
|
T=DNS/RFC822/SMTP,
|
|||
|
A=IPC $h
|
|||
|
Mesmtp, P=[IPC], F=mDFMuXae, S=11/31, R=21, E=\r\n, L=990,
|
|||
|
T=DNS/RFC822/SMTP,
|
|||
|
A=IPC $h
|
|||
|
Msmtp8, P=[IPC], F=mDFMuX8e, S=11/31, R=21, E=\r\n, L=990,
|
|||
|
T=DNS/RFC822/SMTP,
|
|||
|
A=IPC $h
|
|||
|
Mrelay, P=[IPC], F=mDFMuXa8e, S=11/31, R=61, E=\r\n, L=2040,
|
|||
|
T=DNS/RFC822/SMTP,
|
|||
|
A=IPC $h
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The important flag above is ``e''. Don't fuss if the other flags look
|
|||
|
different in your file. Keep your flags as-is, only add ``e'' to your
|
|||
|
flags according to the above examples, unless it's there already.
|
|||
|
``e'' marks the mailers as ``expensive''.
|
|||
|
|
|||
|
|
|||
|
2.2.2. Configuring sendmail.cf using m4 source
|
|||
|
|
|||
|
In the following I will, for simplicity, assume that the sendmail
|
|||
|
version is 8.8.7. If you have a different version, replace 8.8.7 with
|
|||
|
that version number below! Also, the instructions will not work for
|
|||
|
older versions of sendmail. Get the latest sendmail!
|
|||
|
|
|||
|
|
|||
|
Download the sendmail source. Try ``http://WWW.Sendmail.ORG'' or
|
|||
|
possibly ``ftp.sendmail.org''.
|
|||
|
|
|||
|
|
|||
|
I also recommend that you obtain my patch for allowing envelope sender
|
|||
|
reverse aliasing and other nice stuff to really make you take control
|
|||
|
over your mail environment.
|
|||
|
|
|||
|
Write to ``Sendmail Patch <sendmail@lege.com>'', Subject:
|
|||
|
``sendmail-8.8.7'', if 8.8.7 is your sendmail version.
|
|||
|
|
|||
|
They are also available from ``http://www.lege.com'', as is the sgml
|
|||
|
source of this mini-HOWTO!
|
|||
|
|
|||
|
You don't have to get my patches in order to get ``Queue Remote Mail +
|
|||
|
Deliver Local Mail'' to work. My patches solve other things. But I
|
|||
|
just thought this would be a nice place to mention them, as many Linux
|
|||
|
users will find them extremely useful. (They will even give you
|
|||
|
properly working virtual domains, if you like. The virtual domains
|
|||
|
don't have to be ``local''. They will give you ``xaliases'', or in
|
|||
|
other words ``reverse aliasing''.)
|
|||
|
|
|||
|
Unpack the sendmail source. You may get /usr/src/sendmail-8.8.7/. cd
|
|||
|
/usr/src/sendmail-8.8.7/cf
|
|||
|
|
|||
|
Now overlay my patch, if you want it, otherwise skip this step: If you
|
|||
|
don't want to use procmail as Local Delivery Agent, save away your
|
|||
|
/usr/src/sendmail-8.8.7/cf/ostype/linux.m4 before doing this... Save
|
|||
|
my patch to ``/tmp/sendmail-8.8.7-cf-cpio-idcmu.gz'', then...
|
|||
|
|
|||
|
|
|||
|
|
|||
|
cd /usr/src/sendmail-8.8.7/cf
|
|||
|
gzip -dc < /tmp/sendmail-8.8.7-cf-cpio-idcmu.gz | cpio -idcmu
|
|||
|
|
|||
|
|
|||
|
|
|||
|
If you didn't want to use procmail, write back the saved copy of
|
|||
|
/usr/src/sendmail-8.8.7/cf/ostype/linux.m4 again.
|
|||
|
|
|||
|
And regardless of if you applied my patch or not, you must make sure
|
|||
|
these lines or very similar ones are added to
|
|||
|
/usr/src/sendmail-8.8.7/cf/cf/yourhostname.smtp.mc (but if you applied
|
|||
|
my patch you may want to investigate filenames containing the word
|
|||
|
``elijah'', under /usr/src/sendmail-8.8.7/cf):
|
|||
|
|
|||
|
|
|||
|
|
|||
|
dnl # Defer Delivery to "expensive" mailers until next time the
|
|||
|
dnl # queue is processed using "O HoldExpensive=True" and make
|
|||
|
dnl # sure smtp mailers are "expensive".
|
|||
|
dnl # (See original "sendmail" book Chapter 30: Options,
|
|||
|
dnl # "Oc - Don't connect to expensive mailers", or
|
|||
|
dnl # 2nd Edition "sendmail" book Chapter 34.8.29,
|
|||
|
dnl # "HoldExpensive (c), Queue for expensive mailers".)
|
|||
|
dnl # / Leif Erlingsson <leif@lege.com>
|
|||
|
define(`confCON_EXPENSIVE', `True')
|
|||
|
define(SMTP_MAILER_FLAGS, e)
|
|||
|
MAILER(local)dnl
|
|||
|
MAILER(smtp)dnl
|
|||
|
|
|||
|
|
|||
|
|
|||
|
2.3. Menu support suggestions
|
|||
|
|
|||
|
The 1.x versions of this document contained Menu support suggestions
|
|||
|
for /var/X11R6/lib/fvwm/system.fvwmrc. I have dropped those in the
|
|||
|
current version, but they are available on request:
|
|||
|
|
|||
|
|
|||
|
Write to ``Menu support suggestions <fvwmrc@lege.com>'', Subject:
|
|||
|
``Menu support suggestions''
|
|||
|
|
|||
|
|
|||
|
|
|||
|
3. Dial-on-demand solutions PART
|
|||
|
|
|||
|
Written by Jan P Tietze <jptietze@mail.hh.provi.de>.
|
|||
|
|
|||
|
Many Linux users access the Internet through a dialup line, and many
|
|||
|
have decided to implement dial-on-demand facilities on their system.
|
|||
|
That is, whenever an IP packet of some sort has to leave the local
|
|||
|
network or the local host, the link to an Internet Service Provider
|
|||
|
(ISP) will automatically be established. The link will be dropped
|
|||
|
after some period of time that no packet has travelled across.
|
|||
|
|
|||
|
Although this is very comfortable and cost effective, there is one
|
|||
|
special case in which this is neither comfortable (as the time to
|
|||
|
bring up a "traditional" modem dialup is very noticeable) nor cost
|
|||
|
effective, and this is sending e-mail. E-Mail is commonly sent by
|
|||
|
SMTP, either delivered by your own system or through a SMTP host on
|
|||
|
the Internet that usually resides in your ISP's network.
|
|||
|
|
|||
|
With dialup lines, every time you send a message the link will have to
|
|||
|
be brought up. This is quite okay if you send only one message, but if
|
|||
|
you happen to create and send multiple messages, bringing up the line
|
|||
|
more than once can be tedious and cost ineffective. Also, if your ISP
|
|||
|
imposes limits as to what times you are allowed to login, this would
|
|||
|
also restrict you to postpone messages at certain times of the day,
|
|||
|
and you would have to manually send them later.
|
|||
|
|
|||
|
Section 1 of this document will solve the situation, however in
|
|||
|
situations where an external DNS lookup would cause the link up, the
|
|||
|
link will still be established even if e-mail is just being queued.
|
|||
|
The reason is that sendmail wishes to "canonify" host names.
|
|||
|
|
|||
|
The solution to this problem is twofold: First, we'll have to
|
|||
|
moderately change sendmail.cf. And then we have to define the process
|
|||
|
of actual mail delivery. Personally, I prefer to have cron do the job
|
|||
|
for me and describe the necessary changes below.
|
|||
|
|
|||
|
|
|||
|
3.1. Configuring sendmail.cf
|
|||
|
|
|||
|
For the reasons stated in [1.2], I recommend modifying the m4 sources
|
|||
|
instead of editing sendmail.cf directly. It will actually save you a
|
|||
|
lot of hassle and make configuration changes more verbose.
|
|||
|
|
|||
|
First, perform all the changes described in the first part of this
|
|||
|
document. Then go through the dial-on-demand specific stuff.
|
|||
|
|
|||
|
|
|||
|
3.1.1. Configuring sendmail.cf directly, for trivial configurations
|
|||
|
|
|||
|
Configuring directly is highly impractical and anything but verbose,
|
|||
|
but obviously, this is your decision.
|
|||
|
|
|||
|
Close to very bottom of your sendmail.cf should be a line that reads:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Precede that line with a "#" so that it reads
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#R$* < @ $* $~P > $* $: $1 < @ $[ $2 $3 $] > $4
|
|||
|
|
|||
|
|
|||
|
|
|||
|
3.1.2. Configuring sendmail.cf using the m4 source.
|
|||
|
|
|||
|
Add the following line to
|
|||
|
/usr/src/sendmail-8.8.7/cf/cf/yourhostname.smtp.mc:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
FEATURE(nocanonify)dnl
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Your final sendmail.cf can then be built by issuing the following
|
|||
|
commands. Remember to always back up your old /etc/sendmail.cf before
|
|||
|
installing the new one:
|
|||
|
cp /etc/sendmail.cf /etc/sendmail.cf.bak
|
|||
|
cd /usr/src/sendmail-8.8.7/cf/cf
|
|||
|
m4 yourhostname.smtp.mc > /etc/sendmail.cf
|
|||
|
|
|||
|
|
|||
|
|
|||
|
3.2. Adding dial delay
|
|||
|
|
|||
|
It is oftentimes useful, especially when using modem lines, to have a
|
|||
|
dial delay installed. This means that if sendmail tries to initiate a
|
|||
|
connection in an attempt to send an e-mail (and this causes the line
|
|||
|
to go up) but the link actually takes more time to get established
|
|||
|
than what sendmail thinks should be a reasonable timeout, sendmail
|
|||
|
will simply wait some seconds and then retry.
|
|||
|
|
|||
|
|
|||
|
3.2.1. Configuring sendmail.cf directly
|
|||
|
|
|||
|
Somewhere in your sendmail.cf could be a line that would read:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#O DialDelay=10s
|
|||
|
|
|||
|
|
|||
|
|
|||
|
(or very similar). Delete the ``#''. If there's no ``#'' at the
|
|||
|
beginning of the line, things should be considered okay (it just means
|
|||
|
this had already been enabled before).
|
|||
|
|
|||
|
If there is no such line in your sendmail.cf, add one (it is a wise
|
|||
|
thing to do to add this in the "options" part of the file):
|
|||
|
|
|||
|
|
|||
|
|
|||
|
O DialDelay=10s
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Now change the ``10s'' part to the number of seconds you deem
|
|||
|
suitable.
|
|||
|
|
|||
|
|
|||
|
3.2.2. Configuring sendmail.cf using m4 source
|
|||
|
|
|||
|
Add the following line to
|
|||
|
/usr/src/sendmail-8.8.7/cf/cf/yourhostname.smtp.mc:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
define(`confDIAL_DELAY',`10s')
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Now change the ``10s'' part to the number of seconds you deem
|
|||
|
suitable.
|
|||
|
|
|||
|
Your final sendmail.cf can then be built by issuing the following
|
|||
|
commands. Remember to always back up your old /etc/sendmail.cf before
|
|||
|
installing the new one:
|
|||
|
|
|||
|
cp /etc/sendmail.cf /etc/sendmail.cf.bak
|
|||
|
cd /usr/src/sendmail-8.8.7/cf/cf
|
|||
|
m4 yourhostname.smtp.mc > /etc/sendmail.cf
|
|||
|
|
|||
|
|
|||
|
|
|||
|
4. Delivering e-mail
|
|||
|
|
|||
|
E-Mail delivery can be invoked by issuing the command "sendmail -q".
|
|||
|
For those who are interested in what sendmail actually does, "sendmail
|
|||
|
-q -v" will give a more verbose version of the delivery process.
|
|||
|
|
|||
|
It is very convenient to automate the process of e-mail delivery. A
|
|||
|
tool commonly used for this process is cron.
|
|||
|
|
|||
|
|
|||
|
4.1. How to have e-mail delivered at special times.
|
|||
|
|
|||
|
Edit your crontab:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
crontab -e
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Add lines of the form:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
05 18-23,0-7 * * Mon,Tue,Wed,Thu,Fri /usr/sbin/sendmail -q
|
|||
|
05 * * * Sat,Sun /usr/sbin/sendmail -q
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Please refer to the crontab man page (available through "man 5 \
|
|||
|
crontab") for further information. I think the format is pretty
|
|||
|
obvious. The example crontab entries shown above send e-mail (if, and
|
|||
|
only if, e-mail is available from the queue) 5 minutes after an hour
|
|||
|
on weekdays, starting at 6:05 pm, and stopping at 7:05 am. On
|
|||
|
weekends, e-mail is delivered 5 minutes after an hour, starting at
|
|||
|
12:05 pm on Saturday, and stopping 11:05 pm on Sunday.
|
|||
|
|
|||
|
As a dial-on-demand user, it is sometimes desirable to have your
|
|||
|
system collect your e-mail via the POP3 protocol at certain times of
|
|||
|
the day. You could therefore add an entry similar to the following to
|
|||
|
your crontab:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
0 21 * * * popclient -3 -u <your pop3 user name
|
|||
|
goes here> -p <put your password here> -o /var/spool/mail/<the user
|
|||
|
on your system that should receive the collected e-mail>
|
|||
|
<mailhost.somedomain.com>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Of course, this should all go on a single line.
|
|||
|
|
|||
|
Then, save the file and leave the editor. The crontab should now be
|
|||
|
installed.
|
|||
|
5. License
|
|||
|
|
|||
|
This document is distributed under the terms of the GNU Free
|
|||
|
Documentation License. You should have received a copy along with it.
|
|||
|
If not, it is available from http://www.fsf.org/licenses/fdl.html.
|
|||
|
|
|||
|
|
|||
|
|