Linux
Google SMTP 連接超時
如何找出 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 。