1. 程式人生 > >python3傳送郵件需要經過代理伺服器

python3傳送郵件需要經過代理伺服器

現象:已知,連線的WIFI網路需要通過代理伺服器才能連線外網,按照正常的程式無法傳送郵件,而直連一個沒有代理的網路【如自己的wifi熱點】,可以傳送郵件。無法傳送郵件的提示是:

TimeoutError: [WinError 10060] 由於連線方在一段時間後沒有正確答覆或連線的主機沒有反應,連線嘗試失敗。

解決辦法:要使用代理,需要用到socket和socks這兩個包。socks在python3中不是自帶的,所以需要通過pip install PySocks這個模組。
增加如下帶程式碼即可:

import socks
import socket
socks.set_default_proxy(socks.HTTP, '地址'
, 埠, True, 使用者名稱, 密碼) socket.socket = socks.socksocket

注意:socks的型別,即set_default_proxy的第一個引數,網上很多資料寫的都是socks.SOCKS5。如果出現下面這個錯誤,請檢查代理服務的型別,我這裡改成socks.HTTP即可正常傳送郵件:

socks.GeneralProxyError: Socket error: Connection closed unexpectedly