如果此消息被发送到 postfix,由您自己(或您可以得到帮助的人)托管,请确保启用 login SASL 身份验证方案。默认情况下,通常只启用plain。
否则,您的请求将被视为匿名(无论您在 SmtpClient 上的凭据设置如何),其余配置可能会导致您的请求被阻止。
TL;DR
可以在 postfix 机器上进行故障排除,方法是在您的 postfix 配置中启用详细调试。
这通常可以在 /etc/postfix/main.cf 中完成,方法是添加以下行:(81.82.83.84 是运行 SmtpClient 代码的机器的(公共)IP 地址)
debug_peer_list = 81.82.83.84
比让您的SmtpClient 发出新请求,同时调查您的日志记录(通常在/var/log/mail.info)。
成功的会话将显示传入 (<) AUTH login 请求,从而导致成功回复 (Authentication successful)
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250-smtpserver.smtpdomain.com
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250-PIPELINING
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250-SIZE 20480000
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250-VRFY
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250-ETRN
# Postfix tells SmtpClient that it can use AUTH "LOGIN" scheme
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250-AUTH PLAIN LOGIN
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250-AUTH=PLAIN LOGIN
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250-ENHANCEDSTATUSCODES
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250-8BITMIME
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 250 DSN
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: watchdog_pat: 0x55c423dbbdd0
# AUTH request
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: < unknown[81.82.83.84]: AUTH login b3JnYW5pbW1vQGZveGlubm9xxx
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: query milter states for other event
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: milter8_other_event: milter inet:localhost:8891
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: xsasl_dovecot_server_first: sasl_method login, init_response b3JnYW5pbW1vQGZveGlubm9xxx
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: xsasl_dovecot_handle_reply: auth reply: CONT?1?UGFzc3dv
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 334 UGFzc3dv
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: < unknown[81.82.83.84]: QXplcnR5MDE=
# AUTH reply
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: xsasl_dovecot_handle_reply: auth reply: OK?1?user=authenticationuser
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: > unknown[81.82.83.84]: 235 2.7.0 Authentication successful
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: watchdog_pat: 0x55c423dbbdd0
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: < unknown[81.82.83.84]: MAIL FROM:<user@destinationdomain.com>
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: extract_addr: input: <user@destinationdomain.com>
Jul 10 08:04:20 smtpserver postfix/submission/smtpd[13312]: smtpd_check_addr: addr=user@destinationdomain.com
如果不启用login 身份验证方案,250-AUTH 响应将只包含PLAIN,SmtpClient 将不会进行身份验证。
如前所述,这可能会导致您的消息被 helo、客户端、中继、发件人或收件人限制阻止。
如果您的 postfix 使用 dovecot 进行 SASL 身份验证,则可以在 /etc/dovecot/conf.d/10-auth.conf 中启用 login SASL 身份验证方案:
auth_mechanisms = plain login cram-md5
(并确保您的配置文件中只存在一个这样的配置。)
可以在此处找到更多信息:https://wiki2.dovecot.org/Authentication/Mechanisms(其中还显示了在plain 和login 旁边启用cram-md5)
如果您的邮件仍然被进一步阻止,您可以添加permit_sasl_authenticated 作为后缀限制设置的第一个限制 - 至少是暂时的 - 以进行进一步调查。
例如(就我而言,我选择将其放在permit_mynetwork 之后以允许从本地主机发送邮件)
smtpd_helo_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_helo_hostname,reject_invalid_helo_hostname,permit
smtpd_sender_restrictions = permit_mynetworks,permit_sasl_authenticated,reject_non_fqdn_sender,reject_unknown_sender_domain,permit
#...