背景:服务器上有一个 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 中的用户名要填完整发信地址,而不能去掉后缀
我才不会说我被这几个坑坑了一个多小时
^其实就是我菜
测试:
发表回复