最全總結(jié)!聊聊 Python 發(fā)送郵件的幾種方式
點擊上方“Python爬蟲與數(shù)據(jù)挖掘”,進行關(guān)注
回復“書籍”即可獲贈Python從入門到進階共10本電子書

1. 前言
郵件,作為最正式規(guī)范的溝通方式,在日常辦公過程中經(jīng)常被用到
我們都知道 Python內(nèi)置了對 SMTP 的支持,可以發(fā)送純文本、富文本、HTML 等格式的郵件
本文將聊聊利用?Python 發(fā)送郵件的?3?種方式
2. 準備
以 126 郵箱為例,在編碼之前,我們需要開啟 SMTP 服務(wù)

然后,手動新增一個授權(quán)碼
其中,賬號、授權(quán)碼和服務(wù)器地址用于連接登錄郵箱服務(wù)器
3. 方式一:smtplib
def?__init__(self):
????#?初始化
????self.smtp?=?smtplib.SMTP()
????#?連接郵箱服務(wù)器地址
????self.smtp.connect('smtp.126.com')
????#?加入主題和附件,郵件體
????self.email_body?=?MIMEMultipart('mixed')
????#?發(fā)件人地址及授權(quán)碼
????self.email_from_username?=?'**@126.com'
????self.email_from_password?=?'授權(quán)碼'
#?登錄
self.smtp.login(self.email_from_username,?self.email_from_password)def?generate_email_body(self,?email_to_list,?email_title,?email_content,?attchment_path,?files):
????"""
????組成郵件體
????:param?email_to_list:收件人列表
????:param?email_title:郵件標題
????:param?email_content:郵件正文內(nèi)容
????:param?attchment_path:附件的路徑
????:param?files:附件文件名列表
????:return:
????"""
????self.email_body['Subject']?=?email_title
????self.email_body['From']?=?self.email_from_username
????self.email_body['To']?=?",".join(email_to_list)
????for?file?in?files:
????????file_path?=?attchment_path?+?'/'?+?file
????????if?os.path.isfile(file_path):
????????????#?構(gòu)建一個附件對象
????????????att?=?MIMEText(open(file_path,?'rb').read(),?'base64',?'utf-8')
????????????att["Content-Type"]?=?'application/octet-stream'
????????????att.add_header("Content-Disposition",?"attachment",?filename=("gbk",?"",?file))
????????????self.email_body.attach(att)
????text_plain?=?MIMEText(email_content,?'plain',?'utf-8')
????self.email_body.attach(text_plain)
?#?收件人列表
email_to_list?=?['收件人1地址','收件人2地址']
#?發(fā)送郵件
#?注意:此處必須同時指定發(fā)件人與收件人,否則會當作垃圾郵件處理掉
self.smtp.sendmail(self.email_from_username,?email_to_list,?self.email_body.as_string())
def?exit(self):
????"""
????退出服務(wù)
????:return:
????"""
????self.smtp.quit()4. 方式二:zmail
Zmail 項目創(chuàng)建目的是,使郵件處理變得更簡單#?安裝依賴庫
pip3?install?zmail然后,使用郵箱賬號、授權(quán)碼創(chuàng)建一個郵箱服務(wù)對象
class?ZMailObject(object):
????def?__init__(self):
????????#?郵箱賬號
????????self.username?=?'**@126.com'
????????#?郵箱授權(quán)碼
????????self.authorization_code?=?'授權(quán)碼'
????????#?構(gòu)建一個郵箱服務(wù)對象
????????self.server?=?zmail.server(self.username,?self.authorization_code)
接著,將郵件主題、郵件內(nèi)容、包含的附件路徑加入到一個字典中,組成郵件主體
#?郵件主體
mail_body?=?{
????????'subject':?'測試報告',
????????'content_text':?'這是一個測試報告',??#?純文本或者HTML內(nèi)容
????????'attachments':?['./attachments/report.png'],
}
最后,將調(diào)用send_mail()函數(shù),將郵件發(fā)送出去即可
#?收件人
#?可以指定一個人,字符串;也可以是多個人,列表
mail_to?=?"收件人1"
#?發(fā)送郵件
self.server.send_mail(mail_to,?mail_body)5. 方式三:yagmail
yagmail?只需要幾行代碼,就能實現(xiàn)發(fā)送郵件的功能
相比?zmail,yagmail 實現(xiàn)發(fā)送郵件的方式更加簡潔優(yōu)雅
首先,安裝依賴庫
#?安裝依賴庫
pip3?install?yagmail
然后,通過賬號、授權(quán)碼和服務(wù)器地址連接郵箱服務(wù)器,返回一個服務(wù)對象
import?yagmail
#?連接服務(wù)器
#?用戶名、授權(quán)碼、服務(wù)器地址
yag_server?=?yagmail.SMTP(user='**@126.com',?password='授權(quán)碼',?host='smtp.126.com')
接著,通過 send() 函數(shù),將郵件發(fā)送出去
#?發(fā)送對象列表
email_to?=?['**@qq.com',?]
email_title?=?'測試報告'
email_content?=?"這是測試報告的具體內(nèi)容"
#?附件列表
email_attachments?=?['./attachments/report.png',?]
#?發(fā)送郵件
yag_server.send(email_to,?email_title,?email_content,?email_attachments)
郵件發(fā)送完畢之后,關(guān)閉連接即可
#?關(guān)閉連接
yag_server.close()6. 最后
上面總結(jié)了 Python 發(fā)送郵件的 3 種方式,實際項目中,更推薦使用后兩種方式
-------------------?End?-------------------
往期精彩文章推薦:

歡迎大家點贊,留言,轉(zhuǎn)發(fā),轉(zhuǎn)載,感謝大家的相伴與支持
想加入Python學習群請在后臺回復【入群】
萬水千山總是情,點個【在看】行不行
/今日留言主題/
隨便說一兩句吧~~
