我最近在做發(fā)送郵件相關(guān)的一些任務(wù)瘟滨,由于一些原因呢嫉鲸,不打算僅僅為了一個(gè)郵件功能就去申請(qǐng)第三方包的使用權(quán)限,所以還是決定使用python自帶的snmplib來做啊辆亏,也很好用。但是第三方包有些做了進(jìn)一步的封裝和更加人性化的優(yōu)化啊鳖目。減少了我們?nèi)ヅ渲靡恍┞闊┑膬?nèi)容扮叨。
email.message.EmailMessage()
EmailMessage()這個(gè)類就是email提供的主要內(nèi)容了,通過它我們可以設(shè)置郵件消息的頭部领迈,主體內(nèi)容彻磁,還能添加附件。
我們的郵件由header和payload組成狸捅,header可以理解為衷蜓,平時(shí)我們收到郵件上方的發(fā)件人,收件人尘喝,主題磁浇,抄送這部分,然后payload就是我們的郵件主體朽褪,包括文字性的郵件內(nèi)容置吓,以及附件。
EmailMessage()這個(gè)類是一個(gè)dict like的類缔赠,也就是說我們可以通過一些類字典的接口來操作衍锚,但是注意的是,與一般的字典不同嗤堰,字典是無序的戴质,EmailMessage()的鍵是有序的,可以看下面的那個(gè)例子,我們?cè)O(shè)置消息頭的時(shí)候置森,是按照順序來的斗埂,鍵還可以重復(fù),python提供了額外的方法來處理包含重復(fù)鍵的header凫海。
直觀的用例
代碼用例呛凶,下方的代碼包含了消息主體的構(gòu)建,以及通過email.message.EmailMessage()這個(gè)類行贪,我們還可以添加附件漾稀,非常的方便。依稀記得以前要用一個(gè)MIME的包建瘫,真的很難用崭捍。
message = email.message.EmailMessage()
# 郵件頭部
message["From"] = "***@gmail.com"
message["To"] = ["****@gmail.com", ]
message["cc"] = ["****@gmail.com",]
message["Bcc"] = ["****@yahoo.in", ]
# 主題
message["Subject"] = "Mail with attachments"
# 消息主體
body = '''
Hello All,
Please find the attached file.
Regards,
Alex
'''
message.set_content(body)
# 比如我們附加一個(gè)excel文件
with open("report.xlsx", mode="rb") as fp:
excel_content = fp.read()
message.add_attachment(excel_content, maintype="application", subtype="excel", filename="doc.xlsx")