程序要发邮件。
我不想自己去连外部 SMTP 服务器,因为我懒得自己去处理各种错误。我们服务器上很多程序用的是 heirloom mailx 软件的 mail 命令。结果是有些服务器上有好几个甚至几十个 mail 进程卡在那里了。还有不知道通过什么东西发邮件的,偶尔会有邮件没发出来,发出来了的还因为在一个字符的多个字节之间换行再编码导致 mutt 和 Android 的 GMail 程序显示为乱码的。
所以我要用 Postfix,让它来处理这些杂事。之前只把 Postfix 用作普通的 SMTP 服务器过。然而现在目标邮寄地址是腾讯企业邮箱,对由子域名发出的邮件很不友好,老是扔垃圾箱里,连加白名单都没用……于是搜了一下,Postfix 是可以作为客户端登录到 SMTP 服务器来发信的。不过资料比较少,好不容易配置好了,自然要记录一下。
要登录腾讯企业邮箱发信,main.cf 里写上:
relayhost = [smtp.exmail.qq.com]:587 smtp_sasl_auth_enable = yes smtp_sasl_security_options = noanonymous smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_use_tls = yes smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_sender_dependent_authentication = yes smtp_generic_maps = hash:/etc/postfix/generic
/etc/postfix/sasl_passwd 里边写用户名和密码,比如 user@example.com 用户的密码是「password」,就这么写:
[smtp.exmail.qq.com]:587 user@example.com:password
/etc/postfix/generic 里配置信封上的发件人(MAIL FROM
命令)的地址重写,不然腾讯不收:
@hostname user@example.com
hostname
就是 Postfix 里那个 myhostname,默认是机器的主机名。这句配置的意思是,本来发件人地址是这个主机名的,全部改写成 user@example.com
这个。
然后生存 hash 数据库,并更改权限(更好的做法当然是创建的时候就弄好权限):
postmap /etc/postfix/sasl_passwd postmap /etc/postfix/generic chmod 600 /etc/postfix/sasl_passwd*
就绪,启动或者重新加载 Postfix 就可以了:
systemctl reload postfix