当我尝试通过 SMTP 和 Postfix 发送邮件时,收到错误“5.7.1 无法中继”。
经过大量的配置更改后,我可以通过以下方式将电子邮件发送到与服务器相同的域(该主机上的其他帐户):
smtpd_relay_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
但当我发送到其他域时仍然出现此错误。我的服务器上安装了 Dovecot。
如何允许中继到任何域,但在端口 25 上的 SMTP 上进行简单的身份验证?无需 SSL/TLS 等。
如果我将用作测试收件人的域添加到我的目的地:
mydestination = o2.pl
我有:
Recipient address rejected: User unknown in local recipient table
未配置时的示例日志mydestination
:
Oct 6 00:50:40 XXXXXXX postfix/smtpd[5409]: NOQUEUE: reject: RCPT from MY_HOME_HOST: 554 5.7.1 <[email protected]>: Relay access denied; from=<TEST_ACCOUN@MY_DOMAIN.pl> to=<[email protected]> proto=ESMTP helo=<[127.0.0.1]>
删除后:
reject_unauth_destination
当我尝试发送电子邮件时,Thunderbird 就挂了。它挂在“已连接到 MY_OWN_DOMAIN...”上
我将 TLS 切换为“否”,但无济于事。当我通过 telnet 连接到本地主机的 25 端口时,我没有收到来自 SMTP 的欢迎消息
可能是因为:
"smtpd_recipient_restrictions": specify at least one working instance of: check_relay_domains, reject_unauth_destination, reject, defer or defer_if_permit
但是当我添加“check_relay_domains”时,我收到来自 thunderbird 的错误,SMTP 服务器发送了损坏的欢迎消息。
最后我得到了新的错误:
Recipient address rejected: Relay access denied.
我的整个main.cf:
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# appending .domain is the MUA's job.
append_dot_mydomain = no
# Uncomment the next line to generate "delayed mail" warnings
delay_warning_time = 4h
readme_directory = no
smtpd_helo_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_hostname, reject_invalid_hostname, permit
smtpd_sender_restrictions = permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
#smtpd_client_restrictions = permit
smtpd_recipient_restrictions =
permit_sasl_authenticated
permit_mynetworks
check_relay_domains
smtpd_data_restrictions = reject_unauth_pipelining
# TLS parameters
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
# See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
# information on enabling SSL in the smtp client.
myhostname = MY_OWN_DOMAIN.pl
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = MY_OWN_DOMAIN.pl
relay_domains = $mydomain
mydestinations = $mydomain, $myhostname, localhost, localhost.localdomain
relayhost =
inet_interfaces = all
mynetworks_style = host
home_mailbox = Maildir/
#mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
答案1
这看起来不像是 SSL 问题,而更像是身份验证问题;如果 Postfix 识别出您是授权发件人,那么它就不应该谈论中继。您的 SMTP 客户端是否已配置为向服务器进行身份验证?如果没有,请按此方式进行设置,然后重试。
还有一件事:您已经permit_sasl_authenticated
在您的中了smtpd_recipient_restrictions
,但是我没有在您的main.cf中看到任何SASL身份验证配置——这可能是问题所在;
如果 Postfix 希望通过 SASL 对您进行身份验证,但没有 SASL 提供商可以进行身份验证,它会将您视为任何其他未经身份验证的用户。完整的解决方案超出了本答案的范围,但我建议从 Postfix SASL 操作指南开始,这对我设置自己的 Postfix 服务器有很大帮助。