Python3使用SMTP發(fā)送帶附件郵件
一、設(shè)置開啟SMTP服務(wù)并獲取授權(quán)碼
可以參考第一篇文章,這里不再贅述:【一】http://www.dhdzp.com/article/142220.htm
二、使用Python3 發(fā)送帶附件的郵件
0.使用的環(huán)境為:
Python 3.6.3 (64bit)
PyCharm 2017.3 (64bit)
1.注意事項:
在調(diào)用smtplib,發(fā)送簡單郵件的時候使用smtplib.SMTP()方法使沒有問題的。
但是如果是郵件存在附件的情況下,還使用smtplib.SMTP()方法,就可能會發(fā)送失敗,報“遠(yuǎn)程主機拒接連接”的錯誤;
這是因為我們發(fā)送郵件時,調(diào)用第三方的郵件服務(wù)器(如網(wǎng)易163郵箱,QQ郵箱等),這些郵件服務(wù)器出于安全考慮,有時可能就會不允許使用簡單的,未經(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ā)送郵件時,如果存在附件,不同類型的附件要使用對應(yīng)的MIME類型的方式來發(fā)送
具體類型可以參考:MIME參考手冊
2.實現(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)建一個帶附件的實例
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)程主機拒接連接),這里要使用SMTP_SSL方法
smtpObj.connect(smtpserver)
smtpObj.login(username, password)
smtpObj.sendmail(sender, receiver, message.as_string())
print("郵件發(fā)送成功!??!")
smtpObj.quit()
3.發(fā)送成功后,接收方收到的郵件如下圖所示:

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
python實現(xiàn)H2O中的隨機森林算法介紹及其項目實戰(zhàn)
這篇文章主要介紹了python實現(xiàn)H2O中的隨機森林算法介紹及其項目實戰(zhàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-08
神經(jīng)網(wǎng)絡(luò)訓(xùn)練采用gpu設(shè)置的方式
這篇文章主要介紹了神經(jīng)網(wǎng)絡(luò)訓(xùn)練采用gpu設(shè)置的方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
使用Python的requests庫進(jìn)行網(wǎng)頁數(shù)據(jù)抓取的詳細(xì)教程
網(wǎng)絡(luò)爬蟲是一種自動化程序,用于從互聯(lián)網(wǎng)上抓取數(shù)據(jù),無論是用于數(shù)據(jù)分析、市場研究、學(xué)術(shù)研究,還是搜索引擎的網(wǎng)頁索引,爬蟲技術(shù)都在現(xiàn)代互聯(lián)網(wǎng)應(yīng)用中發(fā)揮著重要作用,本文將通過 requests 庫 來講解如何進(jìn)行基本的網(wǎng)頁數(shù)據(jù)抓取,需要的朋友可以參考下2025-03-03
Python(TensorFlow框架)實現(xiàn)手寫數(shù)字識別系統(tǒng)的方法
這篇文章主要介紹了Python(TensorFlow框架)實現(xiàn)手寫數(shù)字識別系統(tǒng)的方法。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
python OpenCV學(xué)習(xí)筆記直方圖反向投影的實現(xiàn)
這篇文章主要介紹了python OpenCV學(xué)習(xí)筆記直方圖反向投影的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02

