Postfix错误通知配置正确性验证及测试方法咨询
首先说你的配置参数本身是没问题的——delay_notice_recipient、bounce_notice_recipient、2bounce_notice_recipient和error_notice_recipient这几个参数确实是用来指定各类错误/通知邮件的接收人,但有个关键配置你可能漏了,那就是notify_classes,它决定了Postfix会针对哪些事件发送通知。
默认情况下,notify_classes的取值可能只有resource,software,并没有包含你需要的bounce、2bounce、delay、error这些类型。所以你需要在main.cf里补充这个配置:
notify_classes = bounce,2bounce,delay,error,resource,software
这样Postfix才会触发对应的通知邮件发送逻辑。
另外,得先确认Postfix能正常把通知邮件投递到你的myemail@mydomain.com:如果是本地邮箱,检查/var/spool/mail/下对应的用户邮件是否正常;如果是外部邮箱,先测试用Postfix发一封普通邮件到这个地址,确保能收到,避免是投递链路本身出了问题。
接下来聊聊怎么触发测试通知,你之前用telnet发错误收件人没收到通知是正常的——因为Postfix在SMTP会话阶段就直接拒绝了这封邮件,不会生成bounce通知,只有当Postfix先接收了邮件,之后投递失败时才会发送bounce:
- 测试 bounce 通知:发一封邮件到「存在的域名但不存在的用户」,比如
fakeuser@gmail.com(或者你自己域名下的不存在用户,前提是你的Postfix配置里mydestination包含这个域名,会先接收邮件)。Postfix接收后尝试投递失败,就会生成bounce邮件发给你指定的收件人。 - 测试 delay 通知:临时修改配置制造投递延迟:
- 在
/etc/postfix/transport里添加一行:test-delay-domain.com :[192.0.2.1](192.0.2.1是RFC规定的无效测试IP,永远无法连接) - 执行
postmap /etc/postfix/transport更新映射 - 在
main.cf里确保transport_maps = hash:/etc/postfix/transport - 可以临时把
delay_warning_time改小,比如delay_warning_time = 5m(默认是4小时,改了能快速收到通知) - 发邮件到
anyuser@test-delay-domain.com,Postfix尝试投递失败后,过5分钟就会发送延迟通知
- 在
- 测试 error 通知:故意搞坏Postfix的配置,比如把
main.cf里的smtpd_recipient_restrictions改成一个无效的规则(比如smtpd_recipient_restrictions = invalid_rule),然后重启Postfix。当有邮件尝试连接时,Postfix会触发软件错误,这时就会发送error通知到你的邮箱。
最后,你可以随时查看Postfix的日志/var/log/mail.log,搜索你的通知邮箱地址或者关键词sendmail、bounce,确认Postfix是否尝试发送了这些通知——如果日志里有发送记录但你没收到,那就是投递链路的问题;如果日志里根本没触发,那就是配置还没到位。
备注:内容来源于stack exchange,提问作者raz3r

