使用python發(fā)送郵件可帶附件

使用


python的smtplib提供了一種很方便的途徑發(fā)送電子郵件。它對(duì)smtp協(xié)議進(jìn)行了簡單的封裝。

在python中,MIME的這些對(duì)象的繼承關(guān)系如下。

MIMEBase

??? |-- MIMENonMultipart

??????? |-- MIMEApplication

??????? |-- MIMEAudio

??????? |-- MIMEImage

??????? |-- MIMEMessage

??????? |-- MIMEText

??? |-- MIMEMultipart

一般來說,不會(huì)用到MIMEBase,而是直接使用它的繼承類。MIMEMultipart有attach方法,而MIMENonMultipart沒有,只能被attach。

MIME有很多種類型,這個(gè)略麻煩,如果附件是圖片格式,我要用MIMEImage,如果是音頻,要用MIMEAudio,如果是word、excel,我都不知道該用哪種MIME類型了,得上google去查。

最懶的方法就是,不管什么類型的附件,都用MIMEApplication,MIMEApplication默認(rèn)子類型是application/octet-stream。

以上內(nèi)容出自原文,下方帶有鏈接。


特別說明


想通過QQ郵箱來發(fā)送郵件,需開啟QQ郵箱的設(shè)置-賬戶里POP3/SMTP服務(wù),通過發(fā)送短信驗(yàn)證來獲得授權(quán)碼,有了授權(quán)碼后就可以在代碼里添加了。


開啟pop/smtp


授權(quán)碼


測試代碼


#!/usr/bin/python

#!/usr/bin/python

# _*_ coding: utf-8 _*_

import os

import smtplib

from email.mime.text import MIMEText

from email.utils import formataddr

from email.header import Header

'''

函數(shù)說明:Send_email_text() 函數(shù)實(shí)現(xiàn)發(fā)送帶有附件的郵件,可以群發(fā),附件格式包括:xlsx,pdf,txt,jpg,png,mp3等都可以

參數(shù)說明:

? ? 1. subject:郵件主題

? ? 2. content:郵件正文

? ? 3. filepath:附件的地址, 輸入格式為["","",...]

? ? 4. receive_email:收件人地址, 輸入格式為["","",...]

'''

def Send_email_text(subject,content,filepath,receive_email):

? ? import smtplib

? ? from email.mime.multipart import MIMEMultipart

? ? from email.mime.text import MIMEText

? ? from email.mime.application import MIMEApplication

? ? sender = 'xxx@qq.com'? ? ? ? ? ?? #發(fā)送方郵箱

? ? passwd = 'gmdfztzbinlvbiei'? ? ? ?? #填入發(fā)送方郵箱的授權(quán)碼

? ? receivers = receive_email? ? ? ? ? ? #收件人郵箱

? ? msgRoot = MIMEMultipart()

? ? msgRoot['Subject'] = subject

? ? msgRoot['From'] = sender

? ? if len(receivers)>1:

? ? ? ? msgRoot['To'] = ','.join(receivers)? ? #群發(fā)郵件

? ? else:

? ? ? ? msgRoot['To'] = receivers[0]

??? part = MIMEText(content,_charset="utf-8")

? ? msgRoot.attach(part)

? ? ##添加附件部分

? ? for path in filepath:

? ? ? ? part = MIMEApplication(open(path,'rb').read())

? ? ? ? part.add_header('Content-Disposition', 'attachment', filename=path)

? ? ? ? msgRoot.attach(part)

? ? try:

? ? ? ? #s = smtplib.SMTP()

? ? ? ? #s.connect("smtp.mail.aliyun.com") #這里我使用的是阿里云郵箱,也可以使用163郵箱:smtp.163.com

? ? ? ? s = smtplib.SMTP_SSL('smtp.qq.com',465)? ? #郵件服務(wù)器及端口號(hào),qq郵箱

? ? ? ? s.login(sender, passwd)

? ? ? ? s.sendmail(sender, receivers, msgRoot.as_string())

? ? ? ? print ("郵件發(fā)送成功")

? ? except smtplib.SMTPException as e:

? ? ? ? print("Error, 發(fā)送失敗")

? ? finally:

? ? ? ? s.quit()

subject = "文件測試"

content = "Python 郵件測試"

#file_path = ["smtp.py","smtp_attach.py","smtpatt.py"]? ? ? ? ? ? ? ? ? #發(fā)送三個(gè)文件到三個(gè)郵箱

file_path = os.listdir('./')

files.remove('smtp_attach.py')

receive_email = ["xxx@yamu.com","xxx@qq.com","xxx@qq.com"]

Send_email_text(subject,content,file_path,receive_email)


測試結(jié)果



相關(guān)參考

參考原文

簡單的例子

一個(gè)附件例子

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容