Php
Gmail 是否需要 TLS 才能接收郵件?
我目前正在使用 PHP 直接發送電子郵件
stream_socket_client()
。到目前為止,這工作得很好。我能夠發送帶有 DKIM 簽名的 HTML 電子郵件,該簽名通過了https://www.mail-tester.com上的所有測試
我自己的郵件伺服器以及 Yahoo 和 AOL 正在接收郵件,沒有投遞或垃圾郵件問題。
但是當我發送到 Gmail 時,不僅電子郵件沒有到達,而且沒有送達報告被發送回返迴路徑。儘管在 SMTP 交換期間沒有給出任何錯誤,但仍然如此。
如果我使用它向 Gmail 發送完全相同的測試電子郵件,
mail()
則沒有問題。我比較了兩封電子郵件的來源,它們僅在 DKIM 簽名上略有不同,我沒有“x”標頭,並且加密的標頭列表不同。我不認為這是問題所在。我可以看到的唯一區別是我正在做
mail()
的事情和我還沒有使用 TLS。這似乎是一個強有力的候選者,但從我所閱讀的內容來看,Gmail 並沒有將 TLS 作為接收電子郵件的要求。還有什麼我可能會失去的嗎?
下面是 SMTP 交換:
SMTP Connection: HOST: 220 mx.google.com ESMTP f128si20492958wme.149 - gsmtp EHLO: 250-mx.google.com at your service, [90.100.136.100] FROM: 250-SIZE 157286400 RCPT: 250-8BITMIME DATA: 250-ENHANCEDSTATUSCODES DATA WRITE: 250-PIPELINING QUIT: 250-CHUNKING
問題恰恰相反,Gmail 對所有行尾都很嚴格,而其他服務則不然。
我發現一個 rouge 額外的行尾導致通信在 FROM 失敗。
上面的各種程式碼實際上是來自 EHLO 呼叫的多行響應,然後我誤以為這些行是對後續呼叫的響應。