python3實現(xiàn)SMTP發(fā)送郵件詳細教程
簡介
Python發(fā)送郵件的教程本人在網(wǎng)站搜索的時候搜索出來了一大堆,但是都是說了一大堆原理然后就推出了實現(xiàn)代碼,我測試用給出的代碼進行發(fā)送郵件時都不成功,后面找了很久才找到原因,這都是沒有一個詳細的環(huán)境調(diào)試導致,所以今天特出一個詳細的教程,一步一步從環(huán)境調(diào)試到代碼實現(xiàn)整一個教程,希望對還在苦苦尋找解決方法卻遲遲不能得到有效解決的朋友們一點幫助。
SMTP協(xié)議
首先了解SMTP(簡單郵件傳輸協(xié)議),郵件傳送代理程序使用SMTP協(xié)議來發(fā)送電郵到接收者的郵件服務(wù)器。SMTP協(xié)議只能用來發(fā)送郵件,不能用來接收郵件,而大多數(shù)的郵件發(fā)送服務(wù)器都是使用SMTP協(xié)議。SMTP協(xié)議的默認TCP端口號是25。
環(huán)境調(diào)試
上面說了是使用SMTP協(xié)議發(fā)送的郵件,所以需要先查看你的發(fā)件人郵箱是否有開啟SMTP協(xié)議,如沒有,則需要開啟,我測試使用的是163.com的郵箱作為發(fā)信人郵箱,在設(shè)置中開啟SMTP協(xié)議如下圖所示。
測試的前提是你需要開通客戶端授權(quán),開通后會讓你設(shè)置密碼,那個密碼要記好,下面的passwd接收的是授權(quán)密碼而不是郵箱密碼!否則會出現(xiàn)下圖所示的錯誤提示:
Demo
import smtplib from email.header import Header from email.mime.text import MIMEText # 第三方 SMTP 服務(wù) mail_host = "smtp.163.com" # SMTP服務(wù)器 mail_user = "***" # 用戶名 mail_pass = "***" # 授權(quán)密碼,非登錄密碼 sender = ***@163.com' # 發(fā)件人郵箱(最好寫全, 不然會失敗) receivers = [***@qq.com'] # 接收郵件,可設(shè)置為你的QQ郵箱或者其他郵箱 content = '我用Python' title = '人生苦短' # 郵件主題 def sendEmail(): message = MIMEText(content, 'plain', 'utf-8') # 內(nèi)容, 格式, 編碼 message['From'] = "{}".format(sender) message['To'] = ",".join(receivers) message['Subject'] = title try: smtpObj = smtplib.SMTP_SSL(mail_host, 465) # 啟用SSL發(fā)信, 端口一般是465 smtpObj.login(mail_user, mail_pass) # 登錄驗證 smtpObj.sendmail(sender, receivers, message.as_string()) # 發(fā)送 print("mail has been send successfully.") except smtplib.SMTPException as e: print(e) def send_email2(SMTP_host, from_account, from_passwd, to_account, subject, content): email_client = smtplib.SMTP(SMTP_host) email_client.login(from_account, from_passwd) # create msg msg = MIMEText(content, 'plain', 'utf-8') msg['Subject'] = Header(subject, 'utf-8') # subject msg['From'] = from_account msg['To'] = to_account email_client.sendmail(from_account, to_account, msg.as_string()) email_client.quit() if __name__ == '__main__': sendEmail() # receiver = '***' # send_email2(mail_host, mail_user, mail_pass, receiver, title, content)
剛開始測試時,第一次發(fā)送郵件是成功的,但是后面再次測試時卻出現(xiàn)了提示554,根據(jù)給出的網(wǎng)址查看錯誤代碼
554 DT:SPM 發(fā)送的郵件內(nèi)容包含了未被許可的信息,或被系統(tǒng)識別為垃圾郵件。請檢查是否有用戶發(fā)送病毒或者垃圾郵件。如下圖所示:
針對該問題,究竟如何解決,會在下一篇博文中進行展開。若看到的朋友有好的解決方法,還請?zhí)岢觯诖烁兄x。
附 參考資料
附 電子書福利(免積分下載)
《Flask Web開發(fā):基于Python的Web應(yīng)用開發(fā)實戰(zhàn)》
《Learning Python, 5th Edition》
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- python使用smtplib模塊發(fā)送郵件
- Python SMTP配置參數(shù)并發(fā)送郵件
- Python基于smtplib協(xié)議實現(xiàn)發(fā)送郵件
- 基于python SMTP實現(xiàn)自動發(fā)送郵件教程解析
- Python基于smtplib模塊發(fā)送郵件代碼實例
- python3.6使用SMTP協(xié)議發(fā)送郵件
- Python使用QQ郵箱發(fā)送郵件報錯smtplib.SMTPAuthenticationError
- python基于SMTP協(xié)議發(fā)送郵件
- python3實現(xiàn)163郵箱SMTP發(fā)送郵件
- python3使用smtplib實現(xiàn)發(fā)送郵件功能
- Python基于SMTP發(fā)送郵件的方法
相關(guān)文章
Pandas如何對帶有Multi-column(多列名稱)的數(shù)據(jù)排序并寫入Excel中
這篇文章主要介紹了Pandas如何對帶有Multi-column(多列名稱)的數(shù)據(jù)排序并寫入Excel中問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-02-02python字典與json轉(zhuǎn)換的方法總結(jié)
在本篇文章里小編給大家整理的是一篇關(guān)于python字典與json轉(zhuǎn)換的方法總結(jié)內(nèi)容,有需要的朋友們可以學習下。2020-12-12python出現(xiàn)更新庫失敗A?new?release?of?pip?is?available:?23.0.
學習了Python我們知道它自帶了很多的庫,同時我們還需要對某個庫進行升級,這篇文章主要給大家介紹了關(guān)于python出現(xiàn)更新庫失敗A?new?release?of?pip?is?available:?23.0.1?->?23.3的解決辦法,需要的朋友可以參考下2024-03-03Python pygorithm模塊用法示例【常見算法測試】
這篇文章主要介紹了Python pygorithm模塊用法,結(jié)合實例形式分析了pygorithm模塊的功能、安裝及針對常見算法的相關(guān)使用操作技巧,需要的朋友可以參考下2018-08-08為何人工智能(AI)首選Python?讀完這篇文章你就知道了(推薦)
這篇文章主要介紹了為何人工智能(AI)首選Python,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04使用Python中Tkinter模塊的Treeview?組件顯示ini文件操作
這篇文章主要介紹了使用Python中Tkinter模塊的Treeview組件顯示ini文件操作,Treeview組件位于ttk模塊,該模塊自Tk8.5開始引入,主題詳細介紹,需要的朋友可以參考一下2022-09-09