IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    依云发表于 2016-05-29 15:57:57
    love 0

    本文来自依云'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
    


沪ICP备19023445号-2号
友情链接