我已经在 Ubuntu 16 上设置了我的 Posfix 电子邮件 SMTP 服务器,并且它正在运行。我以前使用托管公司的 SMTP 服务器,但我更喜欢使用自己的服务器。
我正在使用 Java Mail 发送电子邮件,但不同之处在于,当我通过托管公司发送且收件人地址错误时,我得到:
com.sun.mail.smtp.SMTPAddressFailedException:450 4.1.2:收件人地址被拒绝:找不到域
但是当我用 Postfix 发送时不会抛出异常。我检查了 Postfix 日志,消息是:
操作:失败状态:5.4.4 诊断代码:X-Postfix;找不到主机或域名。名称服务错误[电子邮件受保护]类型=AAAA:找不到主机
但这永远不会作为 java 异常传播。
有人知道如何设置 Postfix 来表现同样的行为吗?
谢谢,雨果
答案1
普京reject_unknown_recipient_domain
smtpd_recipient_restrictions
前 permit_mynetworks
、permit_sasl_authenticated
和/或permit_tls_clientcerts
。
如果reject_unknown_sender_domain
配置中缺少,或者permit_*
之前出现reject_unknown_sender_domain
,则 postfix 将允许所有符合允许规则的客户端发件人发送电子邮件,而无需检查收件人域。 Postfix 将接受传入的邮件,将其排队,并且仅在尝试传递邮件时才注意到域不存在......然后退回邮件。
如果reject_unknown_sender_domain
首先出现,则会检查所有客户端,无论它们是否匹配规则permit_*
,并且电子邮件将被拒绝并显示 5xx 代码。
在 postfix 中,规则的顺序总是很重要的。
例子:
如果您有以下内容main.cf
:
smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/junk,
check_client_access hash:/etc/postfix/junk,
check_helo_access hash:/etc/postfix/junk,
reject_unauth_pipelining,
permit_tls_clientcerts,
permit_sasl_authenticated,
permit_mynetworks
reject_unknown_recipient_domain
在行前添加某处permit
,例如:
smtpd_recipient_restrictions = check_sender_access hash:/etc/postfix/junk,
check_client_access hash:/etc/postfix/junk,
check_helo_access hash:/etc/postfix/junk,
reject_unauth_pipelining,
reject_unknown_recipient_domain,
permit_tls_clientcerts,
permit_sasl_authenticated,
permit_mynetworks
如果您还没有smtpd_recipient_restrictions
规则,请添加一条规则,例如:
smtpd_recipient_restrictions = reject_unauth_pipelining,
reject_unknown_recipient_domain,
permit_mynetworks
但是,您应该对配置 postfix 进行更多研究。