Linux

Google SMTP 連接超時

  • May 13, 2017

如何找出 Gmail 似乎拒絕來自我的特定 IP 範圍的連接的原因?

嘗試使用在 Amazon 的 EC2 服務上的 Linux 機器上執行的 Django 中的電子郵件工具通過 smtp.gmail.com 發送電子郵件時,我收到“連接超時”錯誤。

奇怪的是,我可以使用 sendmail 發送郵件,但它最初得到相同的超時錯誤,然後回退到另一個接受連接的伺服器,例如

~$ echo -e "Subject:test subject\ntest body\n" | sendmail -v myuser@mydomain
Loading lookup modules from /usr/lib/exim/4.72-1.fc13/lookups
Loaded 0 lookup modules
LOG: MAIN
<= app@domain U=app P=local S=443
Loading lookup modules from
/usr/lib/exim/4.72-1.fc13/lookups
Loaded 0 lookup modules
delivering 1ReChV-0001Hx-Ss
Connecting to aspmx.l.google.com [74.125.93.26]:25 ... failed:
Connection timed out (timeout=5m)
LOG: MAIN
aspmx.l.google.com [74.125.93.26] Connection timed out
Connecting to ALT1.aspmx.l.google.com [173.194.66.26]:25 ... connected

這僅發生在亞馬遜的雲中。我可以使用相同的憑據從本地主機連接到 smtp.gmail.com,然後發送電子郵件就可以了。而且我可以從任何地方 ping smtp.gmail.com,所以這似乎不是路由或防火牆問題。

Google在他們的狀態儀表板上沒有列出任何問題。

有問題的伺服器發送的電子郵件量非常少(每天 10-20 封),所以如果它被標記為垃圾郵件,我會感到驚訝。

從 EC2 實例發送電子郵件並不是一個好主意,除非您將電子郵件交給專門同意接受您的郵件的郵件伺服器。原因有很多,但最主要的原因是 EC2 的 IP 地址是動態的,並且郵件伺服器必須位於靜態 IP 地址上才能接受退回郵件。

基本上,如果您想發送郵件,您需要將其發送到一個真正的郵件伺服器,該伺服器將負責將郵件傳遞到其目的地。亞馬遜提供這樣的服務,真正的郵件伺服器託管在靜態 IP 地址上。

大多數情況下,我看到郵件伺服器存在類似問題(從提供的日誌中,我了解到您連接到 ALT1.aspmx.l.google.com 但未發送郵件)禁用 TCP 視窗縮放有助於繞過(不解決)問題。

我不知道您在 EC2 上執行的是什麼作業系統,但如果是 Linux,您可以嘗試添加:

net.ipv4.tcp_rmem = 4096 87380 174760
net.ipv4.tcp_wmem = 4096 16384 131072
net.ipv4.tcp_window_scaling = 0

在您的 /etc/sysctl.conf 中,然後執行 sysctl -p 。

引用自:https://serverfault.com/questions/343870