原代碼如下:
import smtplib from email.mime.text import MIMEText from email.header import Header #要發送的服務器 smtpserver = 'smtp.126.com' #要發送的郵箱用戶名/密碼 user = 'XXX@126.com' password = 'XXX' #發送的郵箱 sender = 'XXX@126.com' #接收的郵箱 receiver = 'XXX@qq.com' #發送郵箱主題 subject = 'test_mail' #編寫HTML類型的郵件正文 msg = MIMEText('<html><h1>大佬好!</h1></html>','html','utf-8') msg['Subject'] = Header(subject,'utf-8') #連接發送郵件 smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(user,password) smtp.sendmail(sender,receiver,msg.as_string()) smtp.quit()
一、現象:
發送郵件時,運行時報錯smtplib.SMTPDataError,如下圖:
二、解決辦法
①經網上查詢得知:因為126郵箱中沒有開啟【授權碼】,如下圖所示應該開啟:
②但是再次運行代碼還是報錯:smtplib.SMTPAuthenticationError,如下圖,提示登陸失敗:
原因是:代碼中的密碼應該改為授權密碼即可。
③繼續運行后,但是代碼還是報錯:smtplib.SMTPDataError:(554, b'DT:SPM 126 smtp4
報錯原因是沒有加上下面的代碼:
#報錯原因是因為“發件人和收件人參數沒有進行定義 msg['from'] = 'test_bug@126.com' msg['to'] = 'testyao@163.com'
加上之后,終於解決發送郵件失敗的問題了。
完整代碼如下:(因保密自行替換)
import smtplib from email.mime.text import MIMEText from email.header import Header #要發送的服務器 smtpserver = 'smtp.126.com' #要發送的郵箱用戶名/密碼 user = 'XXX@126.com' password = 'XXX' #發送的郵箱 sender = 'XXX@126.com' #接收的郵箱 receiver = 'XXX@qq.com' #發送郵箱主題 subject = 'test_mail' #編寫HTML類型的郵件正文 msg = MIMEText('<html><h1>大佬好!</h1></html>','html','utf-8') msg['Subject'] = Header(subject,'utf-8') msg['from'] = 'XXX@126.com' msg['to'] = 'XXX@qq.com' #連接發送郵件 smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(user,password) smtp.sendmail(sender,receiver,msg.as_string()) smtp.quit()