|
|
|
mark bixby
hp csy r&d lab
april 4, 2002 |
|
getting started with sendmail on mpe/ix 7.5 |
|
|
|
|
Major functionality: |
|
send SMTP e-mail |
|
receive SMTP e-mail to local mailboxes,
programs, or files |
|
aliases can be created which map to local
mailboxes, programs, files, or remote mailboxes |
|
powerfully flexible configuration language |
|
Built from: |
|
Sendmail 8.12.1 |
|
Sleepycat Berkeley DB library 3.3.11 |
|
|
|
|
will be released as a 7.0 patch |
|
will ship in 7.5 FOS |
|
requires TZ environment variable to be set
correctly, preferably in the system logon UDC |
|
requires a local syslog daemon, either MPE FOS
Syslog/iX or embedded spooling ISV syslog daemon |
|
the local e3000 must be configured correctly for
DNS and must be listed correctly in the DNS database |
|
firewalls or other security devices must all the
local e3000 to make DNS connections (port 53) and SMTP connections (port
25) |
|
|
|
|
Sendmail A.01.00 for MPE/iX will be fully
supported by RC and WTEC |
|
Customers who call with questions regarding
unsupported bixby.org freeware Sendmail 8.9.1 will be encouraged to upgrade
to Sendmail A.01.00 |
|
|
|
|
Apache-like VUUFF -- CURRENT -- PUB file layout |
|
/SENDMAIL/PUB/JDAEMON – batch job for running
the server daemon |
|
/SENDMAIL/PUB/SENDMAIL – symlink to
/SENDMAIL/CURRENT/SENDMAIL |
|
/SENDMAIL/CURRENT/SENDMAIL – combined server
daemon and local mail submission program |
|
/SENDMAIL/CURRENT/bin – dnscheck, hoststat, m4,
mailq, newaliases, purgestat, vacation |
|
/SENDMAIL/CURRENT/sbin – editmap, mailstats,
makemap, praliases, sendmail, smrsh |
|
|
|
|
/SENDMAIL/CURRENT/cf – directory tree for
building *.cf config files; see the README file! |
|
/SENDMAIL/CURRENT/doc/op/op.ps – Sendmail
Installation and Operation Guide – READ IT! |
|
/SENDMAIL/CURRENT/etc – contains the POSIX shell
profile for Sendmail along with the sample config files installed to
/etc/mail |
|
/SENDMAIL/CURRENT/man – man page documentation,
I.e.: |
|
export MANPATH=/SENDMAIL/CURRENT/man:$MANPATH |
|
man sendmail |
|
|
|
|
/usr/bin/m4 |
|
/usr/bin/mailq |
|
/usr/bin/mailstats |
|
/usr/bin/newaliases |
|
/usr/bin/praliases |
|
/usr/bin/vacation |
|
/usr/lib/sendmail |
|
/usr/sbin/editmap |
|
/usr/sbin/hoststat |
|
/usr/sbin/mailstats |
|
/usr/sbin/makemap |
|
/usr/sbin/newaliases |
|
/usr/sbin/purgestat |
|
/usr/sbin/sendmail |
|
/usr/sbin/smrsh |
|
|
|
|
all config files live in /etc/mail which is
populated from /SENDMAIL/CURRENT/etc/mail.sample at installation time if
the /etc/mail files do not already exist |
|
all config files must be owned by the user
SERVER.SENDMAIL and the POSIX group SENDMAIL |
|
the server daemon must be stopped and restarted
for config file changes to take effect |
|
sendmail.cf (mail server), submit.cf (mail
submission) and aliases are the most important ones |
|
|
|
|
submit.cf and sendmail.cf are created from macro
files expanded by the m4 utility |
|
you can edit submit.cf and sendmail.cf directly
to make MINOR parameter changes:
# "Smart" relay host
DSmy.relay.host.name |
|
major functionality changes REQUIRE you to edit
the macro files and expand with m4 |
|
so just play it safe and ALWAYS edit the macro
files and expand with m4 for ALL changes:
define(`SMART_HOST',
`my.relay.host.name') |
|
see /SENDMAIL/CURRENT/cf/README for the list of
major *.cf options |
|
|
|
|
To generate sendmail.cf: |
|
:HELLO SERVER.SENDMAIL |
|
:XEQ SH.HPBIN.SYS –L |
|
shell/iX> cd /SENDMAIL/CURRENT/cf/cf |
|
shell/iX> cp generic-mpeix.mc.sample
generic-mpeix.mc |
|
edit generic-mpeix.mc with the bytestream file
editor (i.e. vi) of your choice to make your changes |
|
shell/iX> m4 ../m4/cf.m4 generic-mpeix.mc
>generic-mpeix.cf |
|
shell/iX> cp generic-mpeix.cf
/etc/mail/sendmail.cf |
|
|
|
|
OSTYPE(mpeix)dnl |
|
DOMAIN(generic)dnl |
|
define(`confFORWARD_PATH', `$z/.forward')dnl |
|
FEATURE(masquerade_envelope)dnl |
|
FEATURE(domaintable)dnl |
|
FEATURE(mailertable)dnl |
|
FEATURE(genericstable)dnl |
|
FEATURE(virtusertable)dnl |
|
FEATURE(always_add_domain)dnl |
|
FEATURE(access_db)dnl |
|
MAILER(local)dnl |
|
MAILER(smtp)dnl |
|
|
|
|
typically used by optional sendmail features
like access_db |
|
Berkeley DB database hash or btree files
containing extra configuration data in key/value pairs |
|
maintained with the makemap and editmap
utilities |
|
by convention, a map file named “foo” contains
the ASCII input data, whereas “foo.db” contains the compiled binary
database structures |
|
in commands and *.cf files, a map file reference
of “foo” actually refers to “foo.db”! |
|
|
|
|
MPETEST:/BIXBY/PUB> cat - >foo
key1 value1
two abcdef
abra cadabra
:eod |
|
MPETEST:/BIXBY/PUB> makemap hash foo <foo |
|
MPETEST:/BIXBY/PUB> ls -l foo* |
|
-rw-r--r--
1 MGR.BIXBY
BIXBY 36 Feb 25 13:52
foo |
|
-rw-r--r--
1 MGR.BIXBY
BIXBY 49152 Feb 25 13:52
foo.db |
|
MPETEST:/BIXBY/PUB> makemap -u hash foo |
|
key1
value1
two abcdef
abra cadabra |
|
|
|
|
defining a smart relay host in sendmail.cf to
route all outbound e-mail via a single mail gateway |
|
define alternate routing for certain outbound
mail domains via the mailertable feature |
|
creating aliases for inbound e-mail instead of
using the basic USER.ACCT@host.name mailboxes |
|
|
|
|
a special type of map file containing one or
more comma-delimited values per key |
|
/etc/mail/aliases and aliases.db |
|
maintained by SERVER.SENDMAIL with the
newaliases and praliases commands |
|
defines username aliases for mail being
delivered to the local machine, I.e. postmaster@local.host.name |
|
installation default entries:
postmaster:
SERVER.SENDMAIL
MAILER-DAEMON: postmaster |
|
|
|
|
|
|
left-hand side is the user alias |
|
separated by a colon |
|
right-hand side is one or more delivery
destinations: |
|
USER.ACCOUNT or user@host.name or another alias |
|
/path/to/local/file for appending |
|
:include: /file/of/aliases (plaintext ASCII
file) |
|
“|/program/file parm1 parm2 parm3 …” |
|
local usernames may be escaped with a backslash
(I.e. \USER.ACCOUNT) to prevent recursive alias lookups |
|
|
|
|
an optional ASCII file named .forward residing
in the local user’s home group which tells sendmail where to forward the
user’s mail |
|
format is the same as the right-hand side of an
aliases entry, I.e. one or more comma-separated destinations |
|
can be used to invoke the vacation
autoresponder:
\USER.ACCOUNT,
"|/SENDMAIL/CURRENT/bin/vacation USER.ACCOUNT" |
|
|
|
|
:HELLO SERVER.SENDMAIL |
|
:XEQ SH.HPBIN.SYS –L |
|
/bin/cat - >/etc/mail/access
imaspammer.com
REJECT
:EOD |
|
makemap hash /etc/mail/access
</etc/mail/access |
|
|
|
|
:HELLO SERVER.SENDMAIL |
|
:XEQ SH.HPBIN.SYS –L |
|
/bin/cat - >/etc/mail/domaintable
oldcompany.com newcompany.com
:EOD |
|
makemap hash /etc/mail/domaintable
</etc/mail/domaintable |
|
|
|
|
:HELLO SERVER.SENDMAIL |
|
:XEQ SH.HPBIN.SYS –L |
|
/bin/cat - >/etc/mail/genericstable
USER.ACCOUNT@my.local.host
customer_servce@company.com
:EOD |
|
makemap hash /etc/mail/genericstable
</etc/mail/genericstable |
|
Note that domains being modified by
genericstable must be added to /etc/mail/sendmail.cf class {G}. |
|
|
|
|
:HELLO SERVER.SENDMAIL |
|
:XEQ SH.HPBIN.SYS –L |
|
/bin/cat - >/etc/mail/mailertable
.bitnet
smtp:relay.bit.net
:EOD |
|
makemap hash /etc/mail/mailertable
</etc/mail/mailertable |
|
|
|
|
:HELLO SERVER.SENDMAIL |
|
:XEQ SH.HPBIN.SYS –L |
|
/bin/cat - >/etc/mail/virtusertable
info@bar.com
INFO.BAR
info@foo.com INFO.FOO
:EOD |
|
makemap hash /etc/mail/virtusertable
</etc/mail/virtusertable |
|
Note that virtual hostnames must be listed in
/etc/mail/local-host-names. |
|
|
|
|
Make sure a syslog daemon is running before you
start the mail daemon! |
|
To start the MPE FOS syslog daemon, :STREAM
JSYSLOGD.PUB.SYSLOG |
|
To start the mail daemon, :STREAM
JDAEMON.PUB.SENDMAIL |
|
|
|
|
Use the POSIX kill signal from SERVER.SENDMAIL
or any user with SM capability:
kill $(head -n 1
/etc/mail/sendmail.pid) |
|
Only use :ABORTJOB as a last resort! |
|
|
|
|
interactively:
mailx
someuser@some.host
Subject: hello world
Hi, |
|
How are you doing?
:EOD
EOT |
|
from a pipe:
echo "How
are you doing?" |
mailx -s "hello world"
someuser@some.host |
|
from a disk file:
mailx -s
"hello world" someuser@some.host
</diskfile/containing/msg/body |
|
no attachments! |
|
limited control of mail headers! |
|
|
|
|
/bin/cat - >message.txt
To:
someuser@some.host
Cc: otheruser@other.host
Bcc:
secretuser@another.host
Subject: hello world
Hi there!
:EOD |
|
/SENDMAIL/CURRENT/SENDMAIL -t <message.txt |
|
the –t option reads the destination addresses
from the message headers |
|
destination addresses can alternatively be
specified on the SENDMAIL command line |
|
if you want attachments you must generate the
MIME headers yourself |
|
|
|
|
/bin/cat - >message.txt
From: forger@foobar.com
To: someuser@some.host
Cc: otheruser@other.host
Bcc:
secretuser@another.host
Subject: hello world
Hi there!
:EOD |
|
/SENDMAIL/CURRENT/SENDMAIL -t –f forger@foobar.com
<message.txt |
|
the –f option sets the message envelope address,
but a warning header is included:
X-Authentication-Warning:
local.e3000.host: USER.ACCT set sender to forger@foobar.com using –f |
|
genericstable and other options can forge
without traces |
|
|
|
|
invoke /bin/mailx with no parameters, and it
will read e-mail from /usr/mail/USER.ACCOUNT |
|
a numbered headers summary is printed; refer to
these numbers in mailx commands |
|
type nnnn – display a message |
|
delete nnnn – delete a message |
|
help – for further details |
|
quit – exits after updating the mailbox |
|
see “man mailx” or the Shell & Utilities
manual for further details |
|
|
|
|
incoming e-mail will be delivered to programs
specified in the aliases database or .forward files |
|
the e-mail will be delivered to the program via
a POSIX pipe connected to the program’s stdin |
|
the POSIX newline character \n (ASCII LF) is
used as a record separator |
|
if the program terminates with a non-zero POSIX
exit status, any info written to stderr will be returned in a bounce
message |
|
|
|
|
must create new JDAEMON from
/SENDMAIL/CURRENT/JDAEMON.sample |
|
all config files reside in /etc/mail instead of
/SENDMAIL/PUB/etc |
|
8.9.1 sendmail.cf is NOT compatible with 8.12.1 |
|
copy all 8.9.1 ASCII map files to /etc/mail and
rebuild with makemap and newaliases |
|
8.9.1 queued messages won’t be seen by 8.12.1 |
|
8.12.1 uses two queues (/var/spool/clientmqueue
and mqueue) instead of 8.9.1’s /SENDMAIL/PUB/mqueue |
|
|
|
|
8.9.1 would submit new messages directly to the
queue disk files, but 8.12.1 speaks SMTP to localhost port 25 |
|
8.12.1 uses two main config files,
/etc/mail/submit.cf for submitting new messages, and sendmail.cf for
general mail routing |
|
8.12.1 does not include the Majordomo mailing
list software that was bundled with 8.9.1.
HP does not support Majordomo! |
|
|
|
|
|
|
Sendmail programs don’t read stdin terminal
keyboard input correctly.
Workarounds: |
|
/bin/cat - | makemap hash mymap |
|
makemap hash mymap <diskfile |
|
DeliveryMode=background on MPE is a hybrid
between “background” and “interactive” |
|
Symlinks invoke different personalities of
SENDMAIL (I.e. mailq, newaliases, etc), and these only work properly from
the POSIX shell because the CI doesn’t initialize ARGV[0] |
|
newaliases gives a “cannot change ownership”
warning which can be ignored |
|
|
|
|
the #1 sendmail problem! |
|
before using sendmail, run the dnscheck script: |
|
:HELLO SERVER.SENDMAIL |
|
:XEQ SH.HPBIN.SYS –L |
|
/SENDMAIL/CURRENT/bin/dnscheck |
|
make any recommended config changes and then
rerun the script until success is reported |
|
see speaker notes for sample dnscheck output |
|
|
|
|
single-token hostname? I.e. uname –n returns “jazz”? |
|
domain name in /SYS/NET/RESLVCNF? I.e. “domain external.hp.com”? |
|
one or more nameserver entries in RESLVCNF? |
|
fully-qualified domain name has a DNS “A” record
specifying the IP address of the local machine? |
|
IP address has a DNS “PTR” record specifying the
fully-qualified domain name? |
|
if no to any of the above, sendmail may hang,
refuse to start, be unable to recognize the local host, and generally fill
up syslog with interesting msgs |
|
|
|
|
the #2 sendmail problem! |
|
your 3000 needs to query port 53 on DNS servers
to resolve the destination mail server hostname |
|
your 3000 needs to receive DNS query answers |
|
your 3000 listens on its port 25 for incoming
e-mail |
|
your 3000 needs to connect to port 25 on
destination mail servers |
|
does your firewall allow your 3000 to talk to
the Internet? |
|
does your firewall allow the Internet to talk to
your 3000? |
|
firewall blocking results in connection refused,
timeouts, or just no activity! |
|
|
|
|
|
|
check syslog first! |
|
if nothing in syslog: |
|
if your third-party spooling package has an
embedded syslog daemon, you will probably need to use that one instead of
Syslog/iX |
|
is the syslog daemon running? |
|
does the syslog daemon have read access to the
config file and write access to the log file? |
|
is syslog configured to log mail events? |
|
if syslog or e-mail message headers show strange
timestamps, verify TZ is set properly, preferably in your system logon UDC |
|
|
|
|
|
|
if syslog shows DNS lookup failures: |
|
run the dnscheck script to verify DNS is
configured properly |
|
verify that your firewall allows your 3000 to
talk to DNS servers on port 53 |
|
if syslog shows connection failures to remote
mail servers, verify that your firewall allows your 3000 to connect to port
25; if it does not, you may need to configure sendmail.cf to use a smart
host mail relay |
|
long delays submitting new messages are
indicative of DNS problems; check syslog and run the dnscheck script |
|
|
|
|
|
|
if local users are submitting messages that
aren’t being delivered: |
|
verify that JDAEMON is running; if it is not,
messages will be queued in /var/spool/clientmqueue |
|
transient network problems may cause a backlog
in the mail daemon queue /var/spool/mqueue; run /SENDMAIL/CURRENT/bin/mailq
as SERVER.SENDMAIL to get a formatted queue listing |
|
|
|
|
|
|
if remote users are sending messages that aren’t
being delivered to the local 3000: |
|
check syslog for remote connection attempts; if
there are none, does your firewall allow connections to port 25 on your
3000, and are your 3000’s DNS entries visible to the remote users? |
|
verify that the remote users are using valid
e-mail addresses for your 3000, I.e. USER.ACCOUNT or an alias, plus the
correct hostname |
|
|
|
|
|
|
if a sendmail config change doesn’t appear to
take effect: |
|
stop and restart the mail daemon when making
*.cf changes |
|
if you changed an ASCII database map file, don’t
forget to run makemap or editmap to compile the binary *.db file |
|
if you changed ASCII /etc/mail/aliases, don’t
forget to run newaliases to compile the binary /etc/mail/aliases.db file |
|
|
|
|
7.5 Communicator |
|
7.5 Configuring & Managing MPE/iX Internet
Services |
|
http://jazz.external.hp.com/src/sendmail/ |
|
http://www.sendmail.org/ |
|
http://www.sleepycat.com/ for the Berkeley DB
database used for map files |
|
|
|
|
|
Available as a mailing list and as the Usenet
newsgroup comp.sys.hp.mpe |
|
In-depth discussions of all things HP e3000 |
|
Talk with other people using Sendmail on MPE |
|
seek advice, exchange tips & techniques |
|
Keep up with the latest HP e3000 news |
|
Interact with CSY |
|
http://jazz.external.hp.com/papers/hp3000-info.html |
|