Postfix 向中继主机发送邮件,但中继主机反弹并显示 dsn=5.0.0 且没有进一步的详细信息。
问:我该如何详细调试才能找出错误所在?
设置:
smtp-客户端.test.com:这是我安装了 Postfix 和 Debian 10 的测试服务器。此测试服务器模拟了托管公司网站的情况,它应该能够发送由脚本生成的电子邮件。因此没有用户电子邮件。只有此服务器上的脚本生成的出站电子邮件。Postfix 将这些电子邮件转发到以下 smtp 服务器:
中继主机.test.com:这是托管服务的服务器空间。这现在是测试服务器,但在生产中它将充当公司邮件服务器。它使用 TLS 在端口 587 上接受 smtp 流量。(例如,使用 Thunderbird 时,此服务器可以毫无问题地在端口 587 上用作 smtp 服务器)。
问题:postfix 配置为将邮件发送到中继主机,但中继主机将电子邮件退回,并显示 dsn=5.0.0 status=bounced,且没有任何进一步的详细信息。
所有设置在 /etc/postfix/main.cf
:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
compatibility_level = 2
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = test.mydomain.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = $myhostname, testX.novalocal, localhost.novalocal, localhost
relayhost = [relayhost.test.com]:587
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = loopback-only
default_transport = error
relay_transport = error
inet_protocols = all
smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = plain
smtp_sasl_security_options = noanonymous
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
/etc/postfix/sasl_passwd
好像:
[relayhost.test.com]:587 [email protected]:mypassword
哈希数据库文件/etc/postfix/sasl_passwd.db
并重新启动 postfix:
sudo postmap sasl_passwd
sudo systemctl restart postfix
下一步:发送测试邮件:
mailx -s "testmail" [email protected] < testmessage.txt
这会导致以下几行/var/log/mail.log
:
Jan 29 23:35:26 testX postfix/postfix-script[13256]: stopping the Postfix mail system
Jan 29 23:35:26 testX postfix/master[13023]: terminating on signal 15
Jan 29 23:35:27 testX postfix/postfix-script[13384]: warning: symlink leaves directory: /etc/postfix/./makedefs.out
Jan 29 23:35:27 testX postfix/postfix-script[13420]: starting the Postfix mail system
Jan 29 23:35:27 testX postfix/master[13422]: daemon started -- version 3.4.14, configuration /etc/postfix
Jan 29 23:35:34 testX postfix/pickup[13423]: 60836C262C: uid=1000 from=<user>
Jan 29 23:35:34 testX postfix/cleanup[13431]: 60836C262C: message-id=<[email protected]>
Jan 29 23:35:34 testX postfix/qmgr[13424]: 60836C262C: from=<[email protected]>, size=473, nrcpt=1 (queue active)
Jan 29 23:35:34 testX postfix/error[13433]: 60836C262C: to=<[email protected]>, relay=none, delay=0.12, delays=0.09/0.01/0/0.02, dsn=5.0.0, status=bounced ([relayhost.test.com]:587)
Jan 29 23:35:34 testX postfix/cleanup[13431]: 6C649C262D: message-id=<[email protected]>
Jan 29 23:35:34 testX postfix/qmgr[13424]: 6C649C262D: from=<>, size=2312, nrcpt=1 (queue active)
Jan 29 23:35:34 testX postfix/bounce[13434]: 60836C262C: sender non-delivery notification: 6C649C262D
Jan 29 23:35:34 testX postfix/qmgr[13424]: 60836C262C: removed
Jan 29 23:35:34 testX postfix/local[13436]: 6C649C262D: to=<[email protected]>, relay=local, delay=0.03, delays=0.01/0.01/0/0.01, dsn=2.0.0, status=sent (delivered to mailbox)
Jan 29 23:35:34 testX postfix/qmgr[13424]: 6C649C262D: removed
我尝试通过mail.log
添加以下几行来获取更多详细信息main.cf
:
debug_peer_list = relayhost.test.com
debug_peer_level = 3
...但这并没有给我提供更多mail.log
细节syslog
。
在无法访问托管服务提供商(托管我的中继主机的提供商)的日志的情况下,如何才能找出中继主机在身份验证过程的哪个阶段拒绝连接?
答案1
如果您告诉 Postfix 因错误而停止..
default_transport = error
relay_transport = error
.. 它确实会这样做。下次使用该功能时,请指定一个人类可读的状态文本:
default_transport = error:This system only processes local mail, look <here> or ask <person>.
relay_transport = error:This system only processes local mail, look <here> or ask <person>.
这样,您的日志将包含一些文本,您可以搜索您的配置以查看发生了什么。
如果您希望系统实际上将邮件转发到互联网,请删除这些覆盖(如果未设置,它们默认为smtp
和relay
,应该已经以适合您的使用情况的方式进行了配置)。
如果这不是手动配置,而是您的发行版 postinst 脚本根据您在安装过程中的选择而设置的配置,那么请 Debian 维护人员添加明确理想的状态文本(我没有检查,只是提到这种可能性,以防您认为该配置不是您的)。