這是一個相當長的問題,包含一長串嘗試過的事情和困難,所以請耐心等待。總結是這樣的。
- 我可以使用 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
。
我有以下設定檔。
alias_database = 哈希:/etc/aliases alias_maps = 哈希:/etc/aliases 附加點_mydomain = 否 比夫=不 配置目錄=/etc/postfix inet_interfaces = 全部 inet_協定 = ipv4 郵箱大小限制 = 0 mydestination = plaything.company.com、localhost.company.com、、localhost myhostname = plaything.company.com mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 myorigin = /etc/郵件名 自述文件目錄 = 否 收件者分隔符號 = + 中繼主機 = [smtp.office365.com]:587 sender_canonical_maps = 雜湊:/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 識別出我擁有並允許我在 office365 中plaything.company.com
建立一個名為的使用者。[email protected]
在 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 說:
status=已退回(主機 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
,您真的需要將所有從玩具發送的郵件以身分發送嗎[email protected]
?如果沒有,只需將所有郵件發送為[email protected]
,請參閱沒有真實 Internet 主機名稱的主機上的 Postfix。
如果您無法套用此功能,那麼您將需要寄件者相關 SASL 映射。它會為你的設定增加一些複雜性,所以我真的會盡力避免這種情況。
最後但並非最不重要的一點是,如果plaything
將郵件發送為[email protected]
,您需要調整myhostname
和/或myorigin
刪除該relayhost
設定。在這種情況下,plaything
將直接傳遞所有郵件,並考慮郵件伺服器信譽等所有優點和缺點。