整体的OpenSMTPD的设置是按照官方示例来做的。OpenSMTPD + Dovecot,使用虚拟域名。本地邮件投送由dovecot的lmtp负责。所有虚拟账号最后都要映射到一个叫做vmail的真实账号上。
详见https://www.opensmtpd.org/faq/example1.html
于是我在opensmtpd 的misc邮件列表上问了一下,有人回应说用table的映射功能应该可以实现。
重读了几遍table的手册,发现在指定虚拟用户的表(table)中,只要将管理员邮箱(或任何其它地址)添加到某个账户的映射中,那么发送到这个账户的邮件就会同时被dovecot投递到管理员邮箱。
下面是我的虚拟用户表
# 其中vmail 是系统账号,所有虚拟账号都要映射到此账号才能收到邮件
#admin@就是要接收其它用户邮件的账号。
#================ my virtual_users table ===========
[email protected] vmail
[email protected] vmail,[email protected]
[email protected] vmail,[email protected]
下面是smtpd.conf文件。注意此配置是在CentOS7上,用在OpenBSD上的话是没有eth1这样的接口名称的。需要改为对应的网卡接口名称。
同时也要注意设置本地发送的邮件的别名。上述虚拟用户列表只负责处理外部发送过来的邮件。
#=============== my smtpd.conf ==========================
pki mail.example.com certificate "/etc/opensmtpd/mail.example.com.crt"
pki mail.example.com key "/etc/opensmtpd/mail.example.com.key"
table aliases file:/etc/opensmtpd/aliases
table vdomains file:/etc/opensmtpd/vdomains
table passwd file:/etc/opensmtpd/passwd
table virtual_users file:/etc/opensmtpd/virtual_userss
listen on lo
listen on eth1 port 25 tls pki mail.example.com
listen on eth1 port 587 tls-require pki mail.example.com auth <passwd>
accept from local for local alias <aliases> deliver to lmtp "/var/run/dovecot/lmtp" rcpt-to
accept from any for domain <vdomains> virtual <virtual_users> deliver to lmtp "/var/run/dovecot/lmtp" rcpt-to
accept from local for any relay