SJ's Here
SJ's Here

折腾了半天的邮件发送

背景:服务器上有一个 Jenkins CI ,如果项目构建失败需要用邮件通知。

之前尝试过发 ticket 让客服解封了 25 端口,然而由于当时的 postfix 配置失误,导致被发了大量垃圾邮件。了解之后,发现现在比较常用的做法是使用中继转发服务器发送邮件,而不需要自己发送邮件。

这次我使用的是阿里云的邮件推送服务,根据提示验证了域名所有权、配置好解析并配置发信地址之后,就可以去配置 postfix 。

在安装 postfix 的时候,并不需要选择 Internet Site ,而只需要选择 Satellite system 即可。如果已经配置过了,可以使用 dpkg-reconfigure postfix 重新配置。Relay Server 自然要填写 [smtpdm.aliyun.com]:465 ,因为只需要本机上的 Jenkins 访问 postfix 的 smtpd ,所以只要监听本地回环(loopback-only)即可。

postfix 安装完毕之后修改配置文件 /etc/postfix/main.cf,添加以下几行

smtp_use_tls = yes
smtp_tls_wrappermode = yes
smtp_tls_security_level = encrypt
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
  • smtp_sasl_auth_enable = yes:告诉 postfix 在发送邮件的时候需要验证
  • smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd: 告诉 postfix 验证时使用的用户名密码在哪

之后配置 sasl 使用的密码:在 /etc/postfix 创建新的文本文件 sasl_passwd:

# 格式是 $relay_host username:password
[smtpdm.aliyun.com]:465 username@example.com(填写自己的发信地址):password(填写自己配置的密码)

然后运行命令

# 生成 postfix 使用的 db 文件
postmap sasl_passwd
# 重新载入配置
postfix reload

配置结束!注意,为了保证安全,请确保 /etc/postfix/sasl_passwd/etc/postfix/sasl_passwd.db 两个文件只有相应用户拥有读取权限。


雷区:

  • 配置文件中添加的几个条目开头是 smtp 而不是已有的 smtpd
  • sasl_passwd 中的 relay host 要与 main.cf 一致,而不能只填域名
  • sasl_passwd 中的用户名要填完整发信地址,而不能去掉后缀

我才不会说我被这几个坑坑了一个多小时
^其实就是我菜


测试:

Screenshot_20200212_151503

发表回复

textsms
account_circle
email

SJ's Here

折腾了半天的邮件发送
背景:服务器上有一个 Jenkins CI ,如果项目构建失败需要用邮件通知。之前尝试过发 ticket 让客服解封了 25 端口,然而由于当时的 postfix 配置失误,导致被发了大量垃圾邮件。了解之后…
扫描二维码继续阅读
2020-02-12