this is obsolete doc -- see http://doc.nethence.com/ instead
Setting up Postfix
on netbsd 7
http://pbraun.nethence.com/unix/mail/postfix.html
http://pbraun.nethence.com/unix/mail/dovecot.html
Basic ougoing setup
Setup mail aliases for root and admin user,
cd /etc/mail/
vi aliases
newaliases
Setup a smarthost,
cd /etc/postfix/
cat >> main.cf <<EOF
relayhost = SMARTHOST
EOF
/etc/rc.d/postfix restart
Basic MX server setup for local unix user delivery as Maildir format
Setup the system hostname,
cd /etc/
vi myname
/etc/rc.d/network restart
hostname
also make sure the public and eventually natted local IPs are defined in the hosts file (not it's also prefered to put the fqdn at first for other purposes, think Apache),
public_ip host.example.net host
natted_ip host.example.net host
Backup and eventually clean-up the config file,
cd /etc/postfix/
mv main.cf main.cf.dist
sed '/^#/d; /^ *$/d;' main.cf.dist > main.cf
sed '/^#/d; /^ *$/d;' main.cf.dist > main.cf.dist.clean
Enable listen on port 25,
cd /etc/postfix/
cp master.cf master.cf.dist
vi master.cf
smtp...smtpd
Setup myorigin in main.cf and reload,
cd /etc/postfix/
cp main.cf main.cf.dist
vi main.cf
myorigin = example.net
/etc/rc.d/postfix restart
Add this to main.cf,
mydestination = $mydomain, example.net, $myhostname, host.example.net, mx.example.net, mx2.example.net, localhost.$mydomain, localhost, 127.0.0.1
Note. the local hostname (or whatsever you define as myorigin) needs to be included into mydestination otherwise you will get the loop to myself error.
Note. if you enable myorigin, when you receive daily cron emails and want to see the hostname of the box, this workaround,
vipw
root::0:0::0:0:host.example.net &:/root:/bin/ksh
To enable Maildir,
home_mailbox = Maildir/
alternatively, enable procmail for all the users to enable Maildir,
echo $PKG_PATH
pkg_add procmail
cd /etc/
ln -s /usr/pkg/etc/procmailrc
vi /etc/procmailrc
ORGMAIL=${HOME}/Maildir/
DEFAULT=${ORGMAIL}
mailbox_command = /usr/pkg/bin/procmail
Ready to go
Read the logs,
tail -f /var/log/maillog
Enable the daemon,
echo "postfix=YES" >> /etc/rc.conf
/etc/rc.d/postfix restart
Check that everything is fine,
ps aux | grep post
netstat -an -f inet,inet6
Do some tests,
date | mail -s toroot root (alias to real email)
date | mail -s toadminuser adminuser (alias to root)
date | mail -s tomailuser mailuser (local user)
date | mail -s tononexistent nonexistent (should return to postmaster)
Maintenance
Add some users,
groupadd mailusers
useradd -g mailusers -s /sbin/nologin -m mailuser
Check the mail queue,
mailq
eventually force the delivery of the messages that stayed in the queue,
sendmail -q
In case you didn't switch to Maildir, install Pine to read local delivery returns as root,
echo $PKG_PATH
pkg_add pine
It actuall deals with INBOX /var/mail/USER as well as ~/mbox.
Additional notes
If you need to rather fine tune some users specificly,
cd /etc/postfix/
vi generic
root@netbsd2.example.net root@example.net
admin@netbsd2.example.net admin@example.net
cat >> main.cf <<EOF
smtp_generic_maps = hash:/etc/postfix/generic
EOF
postmap generic
/etc/rc.d/postfix restart
Troubleshooting
If you get this error,
mail for host.example.net loops back to myself
==> make sure the local hostname is added to mydestination or that the myorigin is added to mydestination
If you get this error in maillog under production,
...status=bounced (cannot update mailbox /var/mail/USERNAME for user USERNAME. error writing message: File too large)
==> fix the max size,
postconf -e mailbox_size_limit=0
postconf -e message_size_limit=0
systemctl restart postfix
mailq
Ref. https://rbgeek.wordpress.com/2013/01/06/how-to-fix-postfix-file-too-large-error/
References
https://www.netbsd.org/docs/guide/en/chap-mail.html
http://www.postfix.org/BASIC_CONFIGURATION_README.html