本文来自依云's Blog,转载请注明。
程序要发邮件。
我不想自己去连外部 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
May 30, 2016 06:21:37 PM
嘛,我是直接调用的gmail发邮件233
May 31, 2016 10:19:02 AM
那还得配置服务器翻墙……而且还是避不开网络问题呀。
Jun 01, 2016 12:16:13 PM
网站改风格了嘛,结果连 RSS 地址也变掉了……
Jun 01, 2016 12:30:53 PM
为了侧栏!
旧的 RSS 地址也还可以用的呀。不过 RSS 图标没了……
Jun 01, 2016 12:34:41 PM
哦,是 CTR 的 bug,重新设置一下就出来了~
Jun 04, 2016 03:07:00 PM
这件事我好像一般是用 msmtp 来做的,配置起来特别简单……
Jun 04, 2016 06:11:08 PM
我本地也是用 msmtp 做的,配置起来是很简单,但是为了在发送失败时通知我,我花了不少精力,并且有时依然不能及时发现邮件没发送成功,而有时一封邮件得手动反复发送好几次……
Mar 01, 2020 11:43:03 PM
试了下.generic 里面写的应该是myorigin(默认是/etc/mailname)的值,用 myhostname 一直替换失败.
Mar 08, 2023 05:28:21 PM
本大佬又用上了centos7。。。。