python3傳送郵件出現的問題(轉)
新手學習Python3.5,根據教程試一試使用Python3.5中的smtplib模組傳送電子郵件。出現多個問題:
本文中使用的傳送郵箱:[email protected] 接受郵箱:[email protected]
1、Error:無法傳送郵件.Case:(550, b'User has no permission') 和 Error:無法傳送郵件.Case:(535, b'Error: authentication failed')
教程程式碼:
-
import smtplib
-
from email.mime.text import MIMEText
-
from email.header import Header
-
sender = '[email protected]'
-
pwd = '******'
-
receivers = ['[email protected]']
-
# 三個引數:第一個為文字內容,第二個為plain設定文字格式,第三個為utf-8設定編碼
-
message = MIMEText("Python 傳送郵件測試...","plain",'utf-8')
-
message ['From'] = Header("郵件測試",'utf-8')
-
message ['To'] = Header("測試",'utf-8')
-
subject = "Python郵件測試"
-
message["Subject"] = Header(subject,"utf-8")
-
try:
-
# 使用非本地伺服器,需要建立ssl連線
-
smtpObj = smtplib.SMTP_SSL("smtp.163.com",465)
-
smtpObj.login(sender,pwd)
-
smtpObj.sendmail(sender,receivers,message.as_string())
-
print("郵件傳送成功")
-
except smtplib.SMTPException as e:
-
print("Error:無法傳送郵件.Case:%s"%e)
執行結果:Error:無法傳送郵件.Case:(550, b'User has no permission')
錯誤原因:我們使用python傳送郵件時相當於自定義客戶端根據使用者名稱和密碼登入,然後使用SMTP服務傳送郵件,新註冊的163郵箱是預設不開啟客戶端授權的,因此登入總是被拒絕。
解決辦法:進入163郵箱-設定-客戶端授權密碼-開啟(授權碼是用於登入第三方郵件客戶端的專用密碼),與登入密碼不同。開啟後在程式中將
pwd = '******'
更改授權密碼。如果不及時更改,將會出現出錯 Error:無法傳送郵件.Case:(535, b'Error: authentication failed') 及時更改授權密碼即可。
2、Error:無法傳送郵件.Case:(554, b'DT:SPM 163 smtp11,D8CowABnhR7VKLZan2wPLg--.27792S2 1521887445,please see http://mail.163.com/help/help_spam_16.htm?ip=220.180.56.61&hostid=smtp11&time=1521887445')
解決辦法:這個錯誤我解決了很久,有網友說是因為郵件主題有“測試”二字被遮蔽了之類的,正確的應該是將
紅色方框程式碼換成:
其中:A和B可以在郵箱中找到,你可以先手動用163郵箱發一封郵件給QQ郵箱檢視:
將郵件中的A和B替換到程式碼中即可。
注意:A、B和"<"之間有一個空格!!!
祝:學習順利~