python中執行smtplib失敗的處理方法
經測試可用的發送郵件代碼:
import smtplibfrom email.mime.text import MIMEText # 第三方 SMTP 服務mail_host = 'smtp.163.com' # SMTP服務器mail_user = 'username' # 用戶名mail_pass = 'passwd' # 密碼(這里的密碼不是登錄郵箱密碼,而是授權碼) sender = ’sender_mail@163.com’ # 發件人郵箱receivers = [’receive_mail@qq.com’] # 接收人郵箱 content = ’Python Send Mail !’title = ’Python SMTP Mail Test’ # 郵件主題message = MIMEText(content, ’plain’, ’utf-8’) # 內容, 格式, 編碼message[’From’] = '{}'.format(sender)message[’To’] = ','.join(receivers)message[’Subject’] = title try: smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 啟用SSL發信, 端口一般是465 smtpObj.login(mail_user, mail_pass) # 登錄驗證 smtpObj.sendmail(sender, receivers, message.as_string()) # 發送 print('mail has been send successfully.')except smtplib.SMTPException as e: print(e)
問題解決與注意點:
1.報錯:Error: A secure connection is requiered(such as ssl)
解決:因為郵箱SSL驗證的問題,因此把smtplib.SMTP()改成smtplib.SMTP_SSL(),端口號為465。
2.報錯:535, b’Error: authentication failed’
解決:可能是由于用戶名不正確,因此代碼中的用戶名應該填寫為郵箱地址@前面部分 ,或是在郵箱設置的帳戶昵稱。
3.SMTP服務器可根據發送的郵箱做相應的選擇,如代碼中使用163郵箱則設為mail_host = 'smtp.163.com',
可以改成'smtp.126.com'、'smtp.qq.com'等等。
4.代碼中的密碼mail_pass為授權碼,并非郵箱密碼,授權碼用于登錄第三方郵件客戶端的專用密碼,
QQ郵箱可通過設置→帳戶→生成授權碼;網易郵箱126/163可通過設置→客戶端授權密碼。
知識點擴展:
python的smtplib提供了一種很方便的途徑發送電子郵件。它對smtp協議進行了簡單的封裝。
smtp協議的基本命令包括:
HELO 向服務器標識用戶身份 MAIL 初始化郵件傳輸 mail from: RCPT 標識單個的郵件接收人;常在MAIL命令后面,可有多個rcpt to: DATA 在單個或多個RCPT命令后,表示所有的郵件接收人已標識,并初始化數據傳輸,以.結束 VRFY 用于驗證指定的用戶/郵箱是否存在;由于安全方面的原因,服務器常禁止此命令 EXPN 驗證給定的郵箱列表是否存在,擴充郵箱列表,也常被禁用 HELP 查詢服務器支持什么命令 NOOP 無操作,服務器應響應OK QUIT 結束會話 RSET 重置會話,當前傳輸被取消 MAIL FROM 指定發送者地址 RCPT TO 指明的接收者地址到此這篇關于python中執行smtplib失敗的處理方法的文章就介紹到這了,更多相關python中執行smtplib失敗如何處理內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: