5
29
2016
7

配置 Postfix 通过外部 SMTP 服务器发邮件

本文来自依云'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
Category: Linux | Tags: 电子邮件 Postfix | Read Count: 11746
Mucid 说:
May 30, 2016 06:21:37 PM

嘛,我是直接调用的gmail发邮件233

Avatar_small
依云 说:
May 31, 2016 10:19:02 AM

那还得配置服务器翻墙……而且还是避不开网络问题呀。

GlacJAY 说:
Jun 01, 2016 12:16:13 PM

网站改风格了嘛,结果连 RSS 地址也变掉了……

Avatar_small
依云 说:
Jun 01, 2016 12:30:53 PM

为了侧栏!
旧的 RSS 地址也还可以用的呀。不过 RSS 图标没了……

Avatar_small
依云 说:
Jun 01, 2016 12:34:41 PM

哦,是 CTR 的 bug,重新设置一下就出来了~

Felix Yan 说:
Jun 04, 2016 03:07:00 PM

这件事我好像一般是用 msmtp 来做的,配置起来特别简单……

Avatar_small
依云 说:
Jun 04, 2016 06:11:08 PM

我本地也是用 msmtp 做的,配置起来是很简单,但是为了在发送失败时通知我,我花了不少精力,并且有时依然不能及时发现邮件没发送成功,而有时一封邮件得手动反复发送好几次……


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

部分静态文件存储由又拍云存储提供。 | Theme: Aeros 2.0 by TheBuckmaker.com