2010-11-05 110 views
1
import smtplib 

def prompt(prompt): 
    return raw_input(prompt).strip() 

fromaddr = prompt("From: ") 
toaddrs = prompt("To: ").split() 
print "Enter message, end with ^D (Unix) or ^Z (Windows):" 


msg = ("From: %s\r\nTo: %s\r\n\r\n" 
     % (fromaddr, ", ".join(toaddrs))) 
while 1: 
    try: 
     line = raw_input() 
    except EOFError: 
     break 
    if not line: 
     break 
    msg = msg + line 

    print "Message length is " + repr(len(msg)) 

server = smtplib.SMTP('smtp.live.com:25') 
server.set_debuglevel(1) 
server.sendmail(fromaddr, toaddrs, msg) 
server.quit() 

我試圖使用例如發送電子郵件與Python的電子郵件,但它不工作,我不明白它只是不發送任何東西任何錯誤,我想將其發送到hotmail電子郵件。任何幫助將不勝感激,謝謝。發送使用SMTP庫

+0

您的縮進表明server = ..在while循環中。我想這不是你想要的。 – pyfunc 2010-11-05 03:33:39

+0

抱歉,我修正了Identation。 – SourD 2010-11-05 03:47:08

+0

您的服務器是否需要驗證?如果它沒有得到它,它會默默地失敗嗎? – 2010-11-05 03:55:04

回答

2

您對smtplib.SMTP()的呼叫使用無效參數。按照的smtplib文檔:

SMTP([主持人[端口[,local_hostname [, 超時]]]])

因此,SMTP構造函數將主機名的可選參數,端口等等。但是你已經將port和hostname作爲一個參數傳遞(server = smtplib.SMTP('smtp.live.com:25'))。

如果您將該行更改爲server = smtplib.SMTP('smtp.live.com', 25),假設您擁有其他所有權利。

如果您的服務器需要身份驗證(並且我懷疑它確實存在),那麼在您實際發送電子郵件之前,您需要先撥打server.login(user, password)以便您實際發送消息。