Other often asked questions about sendmail
Last Update 2003-02-22
Content:
To find out which version of
sendmail
is installed on your system,
you can try the following commands:
sendmail -d0.4 -bv root
should tell you its version and some basic settings.
telnet localhost 25
sendmail should greet you with its welcome message and
tell you the version of its binary and config file.
Enter
QUIT
to leave this mode.
First:
Don't use uppercase letters...: man 5 passwd on a SunOS 4 machine:
username is the user's login name. This field con-
tains no uppercase characters, and must not
be more than eight characters in length.
If you really need it, set the flag 'u' for the local mailer.
If you don't have
sendmail 8.10
you need to change the flags:
define(`LOCAL_MAILER_FLAGS', `urmn9')
sendmail 8.10
provides a better way to do this:
MODIFY_MAILER_FLAGS(`LOCAL', `+u')
See the
Sendmail Installation and Operation Guide:
u Upper case should be preserved in user names for
this mailer.
If you use
procmail
as local mailer, make sure you define
NO_USER_TO_LOWERCASE_HACK
(in config.h?).
If you get the error:
name: cannot alias non-local names
when running
newaliases
(or
sendmail -bi),
there are several possibilities to check:
-
Does
sendmail -bt
> 3,0 name
resolve to the
local
mailer?
-
Make sure you have the flag
F=A
for
Mlocal
in your
sendmail.cf.
(This applies to
sendmail 8.8
and later).
This is not a sendmail problem, but one of the local delivery agent.
Check your
Mlocal
line in your
sendmail.cf.
If you have
procmail
you're settled, it obeys quotas.
So you can install quotas on your mailspool
(check with your OS version, e.g.,
man quota),
and everything should work.
You can also tell
procmail
to deliver e-mail into the
HOME
directory of the user, so you have solved several problems at once.
There is no simple solution for this.
It might be easy if the sender announces the (correct) size of the
e-mail via
SIZE=
in the
MAIL FROM:
command.
In this case, it would be possible to compare that size against
the allowed size for each recipient when those are specified by
RCPT TO:.
However, if the size isn't given, it can be only determined after
all recipients have been given.
In that case, the mail might be accepted for some but not for others.
Hence the solution to have
quota on mail spool
might be best.
Another (crude) workaround is to define different mails
with different size restrictions and select those accordingly
to the recipients limitations.
Sometimes you want to route all mail for a domain to a single
user. You can do this by a rule like this:
R$+ < @ the.domain. > $#local $: the-user all to one user
This usually goes into ruleset 0.
Another way is to use the
virtual user table
FEATURE.
sendmail 8 has a feature to route all mail
which ends up as local on the system but isn't a valid
account (or alias), to another system (the so-called
LUSER_RELAY),
see
cf/README
(from 8.8).
However, this feature is disrecommended,
since it can break ``working'' addresses if you
introduce new local users.
If you want to route all mail to unknown users to one account
(instead of giving the standard error reply), you can
put in your
.mc
file the following:
define(`LUSER_RELAY',`local:someuser@your.domain')
or in some cases:
define(`LUSER_RELAY',`local:someuser')
Something similar can be accomplished for
virtual domains.
sendmail 8.8 and later
includes all local addresses into class
w
to avoid the well-known
config error: mail loops back to myself.
If this is not intended,
there's an undocumented compile-time-option in 8.8
which is enabled in later version,
-D_FFR_DONT_PROBE_INTERFACES_OPTION
which enables the option
O DontProbeInterfaces
in your
sendmail.cf.
Set it to
True
to keep sendmail from adding
all local addresses to class
w.
sendmail supports several map types.
The main types are:
- hash/btree
- requries the compile flag -DNEWDB.
This is the new Berkeley DB package.
If your system does not have this pre-installed, or the version
installed is not version 2.0 or greater (e.g., is Berkeley DB 1.85 or
1.86), get the current version from
http://www.sleepycat.com/.
- dbm
- requries the compile flag -DNDBM.
This is the older NDBM implementation.
Make sure the map type you're trying to use is compiled into your
version of sendmail
and makemap.
There are several ways how to do it.
One idea is to select different mailers according to the recipient,
and then change the rewrite rules for the sender for that mailer.
Here's an example:
Make a copy of one of the smtp mailers in cf/mailer:
mymailer.m4
#####################################
### MYSMTP Mailer specification ###
#####################################
VERSIONID(`@(#)mysmtp.m4 0.1 (ca) 1998-09-26')
Mmysmtp, P=[IPC], F=CONCAT(mDFMuX8, SMTP_MAILER_FLAGS), S=mysmtp, R=ifdef(`_ALL_MASQUERADE_', `21/31', `21'), E=\r\n, L=990,
_OPTINS(`SMTP_MAILER_MAX', `M=', `, ')_OPTINS(`SMTP_MAILER_CHARSET', `C=', `, ')T=DNS/RFC822/SMTP,
A=SMTP_MAILER_ARGS
and add something like this:
MAILER(mymailer)dnl
LOCAL_RULE_0
Rfriend<@some.domain.>$* $#mysmtp $@ some.domain. $: friend<@some.domain.>$1
LOCAL_RULESETS
#
# sender rewriting for mysmtp
#
Smysmtp
R$+ $: $>51 $1 sender/recipient common
R$* :; <@> $@ list:; special case
R$* $: $>61 $1 qualify unqual'ed names
R$* < @ *LOCAL* > $* $: $1 < @ Domain.For.Friend . > $2 use full name
(or whatever rewriting you need/want)
to your
.mc
file (if you need this for more than one address,
use a class for the match).
An entry like:
NOQUEUE: Null connection from host.domain [IP.AD.DD.RESS]
in the
logfile
means that
host.domain
connected to your MTA but didn't issue any commands.
Unless this happens very often, you can ignore this.
If it happens very often, it's either someone playing around
or it's a network problem.
[(links)]
[Hints]
[Avoiding UBE]
[cf/README]
[New]
Copyright ©
Claus Aßmann
Please send comments to:
<ca at sendmail.org>
Disclaimer: the information provided may be inaccurate or outdated
or incomplete.
Please
contact me
if you find an error.