Python3使用SMTP發(fā)送帶附件郵件
一、設(shè)置開啟SMTP服務(wù)并獲取授權(quán)碼
可以參考第一篇文章,這里不再贅述:【一】http://www.dbjr.com.cn/article/142220.htm
二、使用Python3 發(fā)送帶附件的郵件
0.使用的環(huán)境為:
Python 3.6.3 (64bit)
PyCharm 2017.3 (64bit)
1.注意事項(xiàng):
在調(diào)用smtplib,發(fā)送簡單郵件的時(shí)候使用smtplib.SMTP()方法使沒有問題的。
但是如果是郵件存在附件的情況下,還使用smtplib.SMTP()方法,就可能會(huì)發(fā)送失敗,報(bào)“遠(yuǎn)程主機(jī)拒接連接”的錯(cuò)誤;
這是因?yàn)槲覀儼l(fā)送郵件時(shí),調(diào)用第三方的郵件服務(wù)器(如網(wǎng)易163郵箱,QQ郵箱等),這些郵件服務(wù)器出于安全考慮,有時(shí)可能就會(huì)不允許使用簡單的,未經(jīng)加密的smtplib.SMTP()方法直接發(fā)送郵件,而必須使用安全的,經(jīng)過加密傳輸?shù)膕mtplib.SMTP_SSL()方法,才能發(fā)送成功。
2.MIME類型:
MIME (Multipurpose Internet Mail Extensions) 是描述消息內(nèi)容類型的因特網(wǎng)標(biāo)準(zhǔn)。
MIME 消息能包含文本、圖像、音頻、視頻以及其他應(yīng)用程序?qū)S玫臄?shù)據(jù)。
簡單來說,就是我們發(fā)送郵件時(shí),如果存在附件,不同類型的附件要使用對(duì)應(yīng)的MIME類型的方式來發(fā)送
具體類型可以參考:MIME參考手冊(cè)
2.實(shí)現(xiàn)代碼:
import smtplib from email.header import Header from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart sender = 'XXXXX@163.com' receiver = 'XXXXX@qq.com' smtpserver = 'smtp.163.com' username = 'XXXXX' password = 'XXXXX' mail_title = '主題:這是帶附件的郵件' # 創(chuàng)建一個(gè)帶附件的實(shí)例 message = MIMEMultipart() message['From'] = sender message['To'] = receiver message['Subject'] = Header(mail_title, 'utf-8') # 郵件正文內(nèi)容 message.attach(MIMEText('來來來,這是郵件的正文', 'plain', 'utf-8')) # 構(gòu)造附件1(附件為TXT格式的文本) att1 = MIMEText(open('text1.txt', 'rb').read(), 'base64', 'utf-8') att1["Content-Type"] = 'application/octet-stream' att1["Content-Disposition"] = 'attachment; filename="text1.txt"' message.attach(att1) # 構(gòu)造附件2(附件為JPG格式的圖片) att2 = MIMEText(open('123.jpg', 'rb').read(), 'base64', 'utf-8') att2["Content-Type"] = 'application/octet-stream' att2["Content-Disposition"] = 'attachment; filename="123.jpg"' message.attach(att2) # 構(gòu)造附件3(附件為HTML格式的網(wǎng)頁) att3 = MIMEText(open('report_test.html', 'rb').read(), 'base64', 'utf-8') att3["Content-Type"] = 'application/octet-stream' att3["Content-Disposition"] = 'attachment; filename="report_test.html"' message.attach(att3) smtpObj = smtplib.SMTP_SSL() # 注意:如果遇到發(fā)送失敗的情況(提示遠(yuǎn)程主機(jī)拒接連接),這里要使用SMTP_SSL方法 smtpObj.connect(smtpserver) smtpObj.login(username, password) smtpObj.sendmail(sender, receiver, message.as_string()) print("郵件發(fā)送成功?。。?) smtpObj.quit()
3.發(fā)送成功后,接收方收到的郵件如下圖所示:
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python統(tǒng)計(jì)中文字符數(shù)量的兩種方法
今天小編就為大家分享一篇python統(tǒng)計(jì)中文字符數(shù)量的兩種方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01Python使用itchat模塊實(shí)現(xiàn)群聊轉(zhuǎn)發(fā),自動(dòng)回復(fù)功能示例
這篇文章主要介紹了Python使用itchat模塊實(shí)現(xiàn)群聊轉(zhuǎn)發(fā),自動(dòng)回復(fù)功能,結(jié)合實(shí)例形式分析了Python基于itchat模塊針對(duì)微信信息的發(fā)送、回復(fù)等相關(guān)操作技巧,需要的朋友可以參考下2019-08-08在?pytorch?中實(shí)現(xiàn)計(jì)算圖和自動(dòng)求導(dǎo)
這篇文章主要介紹了在?pytorch?中實(shí)現(xiàn)計(jì)算圖和自動(dòng)求導(dǎo),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-06-06Python?基于xml.etree.ElementTree實(shí)現(xiàn)XML對(duì)比示例詳解
這篇文章主要介紹了Python?基于xml.etree.ElementTree實(shí)現(xiàn)XML對(duì)比,本文通過示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12pandas創(chuàng)建DataFrame的方式小結(jié)
今天給大家整理了pandas創(chuàng)建DataFrame的方式小結(jié),現(xiàn)在我們就來看看這三種生成Dataframe的方式,每種方式通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-09-09Python中八種數(shù)據(jù)導(dǎo)入方法總結(jié)
數(shù)據(jù)分析過程中,需要對(duì)獲取到的數(shù)據(jù)進(jìn)行分析,往往第一步就是導(dǎo)入數(shù)據(jù)。導(dǎo)入數(shù)據(jù)有很多方式,不同的數(shù)據(jù)文件需要用到不同的導(dǎo)入方式,相同的文件也會(huì)有幾種不同的導(dǎo)入方式。下面總結(jié)幾種常用的文件導(dǎo)入方法2022-11-11通過實(shí)例簡單了解Python sys.argv[]使用方法
這篇文章主要介紹了通過實(shí)例簡單了解Python sys.argv[]使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Python?Melt函數(shù)將寬格式的數(shù)據(jù)表轉(zhuǎn)換為長格式
在數(shù)據(jù)處理和清洗中,melt函數(shù)是Pandas庫中一個(gè)強(qiáng)大而靈活的工具,它的主要功能是將寬格式的數(shù)據(jù)表轉(zhuǎn)換為長格式,從而更方便進(jìn)行分析和可視化,本文將深入探討melt函數(shù)的用法、參數(shù)解析以及實(shí)際應(yīng)用場景2023-12-12