2016-03-07 203 views
0

我有這段代碼,因爲我正在嘗試使用Python發送電子郵件。無法用Python發送電子郵件

def Mail(): 
    import smtplib 
    import textwrap 
    SERVER = "localhost" 

    FROM = "fromemail" 
    TO = ["toemail"] 

    SUBJECT =(input('What is the subject of your E-Mail')) 

    TEXT =(input('What do you want the E-Mail to say?')) 

    message = textwrap.dedent("""\ 
    From: %s 
    To: %s 
    Subject: %s 

    %s 
    """ % (FROM, ", ".join(TO), SUBJECT, TEXT)) 

    server = smtplib.SMTP(SERVER) 
    server.sendmail(FROM, TO, message) 
    server.quit() 

這是我得到的錯誤消息。

Traceback (most recent call last): 
    File "<pyshell#0>", line 1, in <module> 
    Mail() 
    File "E:\Coursework\EMail.py", line 26, in Mail 
    server = smtplib.SMTP(SERVER) 
    File "C:\Python33\python-3.3.5\lib\smtplib.py", line 241, in __init__ 
    (code, msg) = self.connect(host, port) 
    File "C:\Python33\python-3.3.5\lib\smtplib.py", line 322, in connect 
    (code, msg) = self.getreply() 
    File "C:\Python33\python-3.3.5\lib\smtplib.py", line 375, in getreply 
    raise SMTPServerDisconnected("Connection unexpectedly closed") 
smtplib.SMTPServerDisconnected: Connection unexpectedly closed 
+0

是您的計算機上運行的郵件服務器(可能是'smtpd'或'sendmail')嗎?如果沒有,那會解釋你的錯誤,因爲在localhost上沒有任何連接。 –

+0

您是否使用'telnet localhost 25'獲得SMTP問候消息? [翻譯:它是python的錯嗎?] – AnFi

+0

如何知道郵件服務器是否正在運行?我有能力發送/檢索電子郵件。 – jackfromperu

回答

0

'連接意外關閉'顯示服務器可能打開但無法創建到smtplib的連接。

你可以檢查端口25 SMTP服務的身份驗證,

# netstat -an | grep -i :25 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN

然後,檢查佔用25端口服務的狀態,

# netstat -plnt | grep -i :25 tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 30860/master

你可能會有相同的, 然後只檢查主/後綴進程的狀態,

# systemctl status postfix

如果你得到的錯誤突出顯示爲,

致命的:無法處理套接字類型AF_INET6與 「inet_protocols = IPv4的」

然後迅速轉到postfix的配置文件在/etc/postfix/main.cf並檢查是否有此文本並取消註釋,

個inet_protocols = IPv4的

然後重啓後綴,

# systemctl restart postfix

然後檢查狀態,希望你不應該得到任何錯誤。 然後檢查python是否能夠連接到SMTP服務器!

$ python -c 'import smtplib; smtplib.SMTP("localhost");'

你不應該得到這表明蟒蛇是能夠連接到SMTP服務器的任何輸出。

你現在可以運行你的電子郵件發送腳本!