这是一个相当长的问题,其中有一系列尝试和艰辛,所以请耐心听完。总结如下。
- 我能够使用 postfix 通过 office365 中继来自 ubuntu 的电子邮件;配置有效。
- 它只能作为其中一个用户使用;更具体地说,针对 office365 进行身份验证的用户是唯一有效的“来自”
更多详细信息如下。我在亚马逊云中有一台机器,我在上面运行大量作业,并希望将状态通过邮件发送给我。我在工作中使用 office365,因此我想通过 office365 中继邮件。我最熟悉的是 postfix,因此我将其用作 MTA。
配置是ubuntu 12.04LTS
;我已经安装了 postfix 和 mail-utils。
对于此示例,假设我的公司是“ company.com
”,并且有问题的机器(通过弹性 IP 和 DNS 条目)称为“ plaything.company.com
”。主机名设置为“ plaything.company.com
”,因此/etc/mailname
在 plaything 上,我有以下注册用户alpha
:bravo
、、和charlie
。
我有以下配置文件。
别名数据库 = 哈希:/etc/aliases alias_maps = hash:/etc/aliases append_dot_mydomain = no biff = 没有 配置目录 = /etc/postfix inet_interfaces = 全部 inet_protocols = ipv4 邮箱大小限制 = 0 我的目的地 = plaything.company.com, localhost.company.com, , localhost 我的主机名 = plaything.company.com 我的网络 = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 myorigin = /etc/mailname readme_directory = 否 收件人分隔符 = + 中继主机 = [smtp.office365.com]:587 sender_canonical_maps = hash:/etc/postfix/sender_canonical smtp_sasl_auth_enable = 是 smtp_sasl_password_maps = 哈希:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache smtp_use_tls = 是 smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu) smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache smtpd_use_tls = 是
当机器被调用时,plaything.company.com
我经历了注册所有适当的 DNS 条目的练习,以使 office365 识别我拥有它plaything.company.com
并允许我创建一个名为[email protected]
office365 的用户。
在office365中,我设置了[email protected]
另一个电子邮件地址[email protected]
。
然后,我制作了以下 sender_canonical
[电子邮件保护] [电子邮件保护]
我创建了一个 sasl_passwd 文件,内容如下:
smtp.office365.com [email protected]:123456password123456
假设的密码[email protected]
是1234...456
完成所有设置后,以以下身份alpha
登录
邮件[电子邮件保护] 抄送: 主题:测试 测试
整个过程运行良好。电子邮件通过 postfix 发送,TLS 运行良好,身份验证daemon@...
为[电子邮件保护]在 Office365 中收到一封电子邮件。
bravo
当以机器身份登录时就会出现此问题。
发件人是[email protected]
,office365 说:
状态=退回(主机 smtp.office365.com[132.245.12.25] 说: 550 5.7.1 客户端没有权限发送 此发送者(回复 DATA 命令的结束)
这是因为我尝试以 的身份发送邮件并以 的bravo@...
身份通过 office365 进行身份验证daemon@...
。它之所以有效alpha@...
是因为在 office365 中,我设置[email protected]
为 并拥有另一个电子邮件地址[email protected]
。
在Postfix 中继到 Office365,迈尔斯·埃里克森回答这个问题:
不要以 Office365 托管电子邮件域用户的身份向 Office365 发送邮件。请改用子域,例如[电子邮件保护]代替[电子邮件保护]。为 services.mydomain.com 或您决定使用的任何网站设置 SPF 记录不会有什么坏处。
不要以 Office365 用户的身份对 mail.messaging.microsoft.com 进行身份验证。只需连接到端口 25 并将邮件发送到您的域,就像任何外部 SMTP 代理一样。
好的,我已经完成了#1,我在 DNS 上有这些记录,但是一旦 Office365 识别出我拥有该域,它们在大多数情况下就不再相关了。
这些记录如下:
CNAME 记录: - msoid.plaything.company.com - autodiscover.plaything.company.com
MX 记录:-plaything.company.com (plaything-company-com.mail.protection.outlook.com)
TXT 记录:-plaything.company.com(v=spf1 include:spf.protection.outlook.com -all)
我尝试了 #2,但无论我做什么,office365 都会以“未验证”为由取消连接。我甚至可以尝试简单地 telnet 到端口 25 并尝试发送,但它不起作用。
250 BY2PR01CA007.outlook.office365.com Hello [54.221.245.236]
530 5.7.1 Client was not authenticated
Connection closed by foreign host.
有没有人有这样的配置,可以让 Linux 机器上的多个用户通过 office365 使用 postfix 中继邮件?一定有人在做这件事,能告诉我我的设置出了什么问题...
答案1
我认为你需要退一步:)
plaything
如果您以身份登录bravo
,是否真的需要将 plaything 发送的所有邮件都以 身份发送[email protected]
?如果不是,只需以 身份发送所有邮件[email protected]
,请参阅没有真实互联网主机名的主机上的 Postfix。
如果你不能应用这个,那么你将需要发送方相关 SASL 映射。它会增加您的设置的复杂性,因此我会尽力避免这种情况。
最后但并非最不重要的一点是,如果plaything
要以 发送邮件[email protected]
,您需要调整myhostname
和/或myorigin
删除该relayhost
设置。在这种情况下,plaything
将直接发送所有邮件,并具有邮件服务器信誉等所有优点和缺点。