我正在尝试在 Linux 上设置 Postfix 服务器,将所有邮件转发到我们的 Office365(Exchange,由 Microsoft 托管)邮件服务器,但是,我一直收到有关发送地址的错误:
BB338140DC1:to=relay=pod51010.outlook.com[157.56.234.118]:587,delay=7.6,delays=0.01/0/2.5/5.1,dsn=5.7.1,status=bounced(主机 pod51010.outlook.com[157.56.234.118] 表示:550 5.7.1 客户端无权以此发送者身份发送(回复 DATA 命令结束))
Office 365 要求 MAIL FROM 和 From: 标头中的发送地址与用于验证的地址相同。我已尝试了配置中能想到的所有方法来实现这一点。我的postconf -n:
append_dot_mydomain = no
biff = no
config_directory = /etc/postfix
debug_peer_list = 127.0.0.1
inet_interfaces = loopback-only
inet_protocols = all
mailbox_size_limit = 0
mydestination = xxxxx, localhost.localdomain, localhost
myhostname = localhost
mynetworks = 127.0.0.0/8
recipient_delimiter = +
relay_domains = our.doamin
relayhost = [pod51010.outlook.com]:587
sender_canonical_classes = envelope_sender
sender_canonical_maps = hash:/etc/postfix/sender_canonical
smtp_always_send_ehlo = yes
smtp_sasl_auth_enable = yes
smtp_sasl_mechanism_filter = login
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options =
smtp_tls_CAfile = /etc/postfix/cacert.pem
smtp_tls_loglevel = 1
smtp_tls_security_level = may
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_use_tls = yes
/etc/postfix/sender_canonical
:
www-data [email protected]
root [email protected]
www-data@localhost [email protected]
root@localhost [email protected]
此外,sasl_passwd
设置为正确的凭据(使用以下方法测试斯瓦克斯多次。)身份验证有效,并在发件人标题正确时发送消息(也使用以下方法进行了测试斯瓦克斯,有效)
这些电子邮件来自 PHP,因此我还尝试更改 sendmail 路径,以便php.ini
通过 -f 传递正确的发件人地址
因此,出于某种原因,来自www-数据和根没有将发件人字段重写到 Office 365 满意的程度,因此它不会发送消息。
有没有 Postfix 专家可以帮助我设置这个中继?
答案1
以防以后有人遇到这种情况。我终于让电子邮件中继正常工作了。问题与使用旧版本的 Postfix 有关,它以 Office 365 不喜欢的方式格式化了信封中的“发件人”元素。将 Postfix 更新到 2.9 或更高版本(并使用类似上述配置)解决了该问题。
答案2
答案3
我发现缺少一些 SASL 身份验证模块。以下方法可修复此问题:
yum install cyrus-sasl-plain cyrus-sasl-scram cyrus-sasl-md5 cyrus-sasl-ntlm
(清楚的模块可能就足够了)