使用
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)碼后就可以在代碼里添加了。


測試代碼
#!/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é)果
