在運維開發中,使用 Python 發送郵件是一個非常常見的應用場景。今天一起來探讨一下,GitHub 的大牛門是如何使用 Python 封裝發送郵件代碼的。
一般發郵件方法SRE實戰 網際網路時代守護先鋒,助力企業售後服務體系運籌帷幄!一鍵直達領取阿裡雲限量特價優惠。
SMTP是發送郵件的協定,Python内置對SMTP的支援,可以發送純文字郵件、HTML郵件以及帶附件的郵件。
我們以前在通過Python實作自動化郵件功能的時候是這樣的:
import smtplib
from email.mime.text import MIMEText
from email.header import Header
# 發送郵箱伺服器
smtpserver = 'smtp.sina.com'
# 發送郵箱使用者/密碼
user = '[email protected]'
password = '123456'
# 發送郵箱
sender = '[email protected]'
# 接收郵箱
receiver = '[email protected]'
# 發送郵件主題
subject = 'Python email test'
# 編寫HTML類型的郵件正文
msg = MIMEText('
你好!
','html','utf-8')
msg['Subject'] = Header(subject, 'utf-8')
# 連接配接發送郵件
smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(user, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()
python發郵件需要掌握兩個子產品的用法,smtplib和email,這倆子產品是python自帶的,隻需import即可使用。smtplib子產品主要負責發送郵件,email子產品主要負責構造郵件。
smtplib子產品主要負責發送郵件:是一個發送郵件的動作,連接配接郵箱伺服器,登入郵箱,發送郵件(有發件人,收信人,郵件内容)。
email子產品主要負責構造郵件:指的是郵箱頁面顯示的一些構造,如發件人,收件人,主題,正文,附件等。
其實,這段代碼也并不複雜,隻要你了解使用過郵箱發送郵件,那麼以下問題是你必須要考慮的:
你登入的郵箱帳号/密碼
對方的郵箱帳号
郵件内容(标題,正文,附件)
郵箱伺服器(SMTP.xxx.com/pop3.xxx.com)
如果要把一個圖檔嵌入到郵件正文中怎麼做?直接在HTML郵件中連結圖檔位址行不行?答案是,大部分郵件服務商都會自動屏蔽帶有外鍊的圖檔,因為不知道這些連結是否指向惡意網站。
要把圖檔嵌入到郵件正文中,我們隻需按照發送附件的方式,先把郵件作為附件添加進去,然後,在HTML中通過引用src="cid:0"就可以把附件作為圖檔嵌入了。如果有多個圖檔,給它們依次編号,然後引用不同的cid:x即可。
yagmail 實作發郵件
yagmail 可以更簡單的來實作自動發郵件功能。
github項目位址: https://github.com/kootenpv/yagmail
代碼開源,解釋如下:
yag = SMTP(args.user, args.password)
yag.send(to=args.to, subject=args.subject, contents=args.contents, attachments=args.attachments)
安裝:
pip install yagmail
簡單例子:
import yagmail
#連結郵箱伺服器
yag = yagmail.SMTP( user="[email protected]", password="1234", host='smtp.126.com')
# 郵箱正文
contents = ['This is the body, and here is just text http://somedomain/image.png',
'You can find an audio file attached.', '/local/path/song.mp3']
# 發送郵件
yag.send('[email protected]', 'subject', contents)
給多個使用者發郵件:
隻需要将接收郵箱 變成一個list即可。
yag.send(['[email protected]','[email protected]','[email protected]'], 'subject', contents)
發送附件
如何發送附件呢?隻要添加一個附件清單就可以了。
yag.send('[email protected]', '發送附件', contents, ["d://log.txt","d://baidu_img.jpg"])
抄送
# 郵箱正文 文本及附件
contents = ['This is the body, and here is just text http://somedomain/image.png',
'You can find an audio file attached.', '/local/path/song.mp3', '測試郵件', 'test.html', 'logo.jpg',
'yagmal_test.txt']
# 發送
yag.send(to='[email protected]', cc='[email protected]', subject='發送附件', contents=contents)
很簡單吧,開箱即用~~
掃碼關注我們
微信号:SRE實戰
拒絕背鍋 運籌帷幄
×
選擇打賞方式:
微信
QQ錢包
支付寶
打賞
打賞
打賞
多少都是心意!謝謝大家!!!
×
選擇分享方式:
微信掃一掃,分享朋友圈
Or
手機掃一掃,精彩随身帶