2013-10-26 110 views
3

我試圖用SMTP 3.2的SMTPlib.sendmail()函數 來發送郵件,經過一些修改後的SMTP庫(即 註釋掉了rset()函數,錯誤味精) 我設法從服務器檢索以下錯誤信息:用python發送郵件錯誤smtplib

Sendmail的失敗 (554,b'Transaction失敗:不能發送消息,由於可能被濫用,請訪問:http://postmaster.yahoo.com/abuse_smtp.html更多信息「)

雅虎郵件SMTP服務器認爲我發送垃圾郵件,URL鏈接到anythi ng 有用。我認爲這與頭部不足有關,我似乎無法找到關於什麼構成符合標頭的明確 答案。我已閱讀過Gmail的類似問題。 模擬郵件已被替換爲這篇文章。

任何幫助,將不勝感激

我的全代碼如下:

self.message = email.message_from_string('''To: <[email protected]> 
    From: <[email protected]> 
    Reply-To: <[email protected]> 
    Subject: Test send mail \n\n Hello''') 
    fromAddress = '[email protected]' 
    toAddress = '[email protected]' 
    try: 
     self.smtp = SMTP() 
     self.smtp.connect('smtp.mail.yahoo.com') 
    except Exception: 
     print('Connection Failed') 
     print(traceback.format_exc()) 
    try: 
     self.smtp.login('rwilson','tree22') 
    except Exception: 
     print('Login Failed!') 
     print(traceback.format_exc()) 
    try: 
     self.smtp.sendmail(fromAddress,toAddress ,self.message.as_string()) 
     print("Message sucessfully sent!") 
     self.smtp.close() 
    except Exception as e: 
     print('SendMail Failed') 
     print(e) 
+0

我會建議使用普通的'telnet'會話調試問題:打開一個telnet連接到端口25 SMTP服務器,並嘗試通過手動輸入SMTP會話來發送郵件。如果這樣也行不通,您的問題與Python的SMTPlib沒有任何關係,您應該繼續嘗試弄清楚爲什麼SMTP服務器拒絕將您的郵件視爲垃圾郵件。如果確實有效,那麼代碼存在問題。使用像「tcpdump」和/或Wireshark這樣的數據包嗅探器,並將您的普通SMTP會話與python代碼導致的SMTP會話進行比較,以找出差異。 –

+1

我已經放棄嘗試使用雅虎,上面的代碼似乎可以正常使用smtp.gmail.com –

回答

1

添加以下代碼登錄前,有一個再次嘗試;

try: 
     self.smtp.ehlo() 
     self.smtp.starttls() 
     self.smtp.ehlo 
except: 
     print "No TLS :(" 

#do login here 
2

以下作品微軟,谷歌,在Python 2.7版Yahoo帳戶和Python 3.2:

#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
"""Send email via smtp_host.""" 
import smtplib 
from email.mime.text import MIMEText 
from email.header import Header 

####smtp_host = 'smtp.live.com'  # microsoft 
####smtp_host = 'smtp.gmail.com'  # google 
smtp_host = 'smtp.mail.yahoo.com' # yahoo 
login, password = ... 
recipients_emails = [login] 

msg = MIMEText('body…', 'plain', 'utf-8') 
msg['Subject'] = Header('subject…', 'utf-8') 
msg['From'] = login 
msg['To'] = ", ".join(recipients_emails) 

s = smtplib.SMTP(smtp_host, 587, timeout=10) 
s.set_debuglevel(1) 
try: 
    s.starttls() 
    s.login(login, password) 
    s.sendmail(msg['From'], recipients_emails, msg.as_string()) 
finally: 
    s.quit()