Python發送多附件郵件的方法


Python發送多附件郵件的基本思路,首先就是用MIMEMultipart()方法來表示這個郵件由多個部分組成。然后再通過attach()方法將各部分內容分別加入到MIMEMultipart容器中。MIMEMultipart有attach()方法,而MIMENouMultipart沒有,只能被attach。
python中MIME各對象的繼承關系如下:

MIME有很多種類型,如果附件是文本格式,就是MIMEText;如果是圖片格式就行MIMEImage;如果是音頻格式就用MIMEAudio,如果是其他類型的格式例如pad,word、Excel等類型的,就很難確定用那種MIME了,此時可以使用MIMEApplication()方法。MIMEApplication默認子類型是application/octet-stream,表明“這是個二進制,不知道文件的下載類型”,客戶端收到這個聲明后,根據文件后的擴展名進行處理。

import smtplib
import unittest
import HTMLTestRunner
import os,time,datetime
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.audio import MIMEAudio
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.header import Header

# 定義發送郵箱和接收郵箱
sender = 'XXX@qq.com'
receivers = ['XXX@qq.com']

# 多附件郵件基本思路,首先用MIMEMultipart()來標識這個郵件由多個部分組成
# 然后通過Header方法,定義郵件的發送人、接收人、郵件標題;MIMEtext構造郵件正文
# 然后再用attach()方法將各部分內容分別加入到MIMEMultipart容器內
message = MIMEMultipart()
message['From'] = Header("python程序", 'utf-8')
message['To'] =  Header("丑小鴨", 'utf-8')
message['Subject'] = Header('帶附件的郵件測試', 'utf-8')
message.attach(MIMEText('這是用Python編寫的郵件發送程序……', 'plain', 'utf-8'))


#通過MIMEApplication構造附件1
att1=MIMEApplication(open('E:\\Path\\fliename','rb').read())
att1["Content-Type"]='application/octet-stream'
#att1["Content-Disposition"] = 'attachment; filename="test1.html"'
att1.add_header('content-disposition', 'attachment', filename='fujian1.html')
message.attach(att1)


#通過MIMEText構造附件2文本
#Content-Type(內容類型)定義網絡文件的類型和網頁的編碼,決定瀏覽器將以什么形式、什么編碼讀取這個文件
#[Content-Type介紹](https://www.runoob.com/http/http-content-type.html)
#application/octet-stream:二進制流數據(如常見的文件下載)
# Content-Disposition激活附件下載對話框。Content-Disposition有兩種屬性:inline 和 attachment
# inline:默認值,將文件內容直接顯示在頁面;
# attachment:彈出對話框,讓用戶下載
# filename:定義下載文件的文件名。
att2=MIMEText(open('E:\\Path\\filename.txt','rb').read(),'base64','utf-8')
att2["Content-Type"]='application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="fujian2.txt"'
message.attach(att2)


#通過MIMEImage構造附件3圖片
att3=MIMEImage(open('E:\\path\\filename.jpg','rb').read())
att3["Content-Type"]='application/octet-stream'
att3["Content-Disposition"] = 'attachment; filename="fujian3.jpg"'
message.attach(att3)


#通過MIMEAudio構造附件4。MEMEAudio需要定義音頻類型
#[不同音頻對應的類型參考](http://https://www.cnblogs.com/zhongcj/archive/2008/11/03/1325293.html )
att4=MIMEAudio(open('E:\\path\\filename.mp3','rb').read(),'audio')
att4["Content-Type"]='application/octet-stream'
att4["Content-Disposition"] = 'attachment; filename="fujian4.mp3"'
message.attach(att4)

# 鏈接SMTP服務器
#[開通QQ郵箱SMTP服務,獲取授權碼](http://https://www.cnblogs.com/givemelove/p/11097778.html)
smtp = smtplib.SMTP()
smtp.connect('smtp.qq.com')
smtp.login('XXXX@qq.com', '授權碼')
smtp.sendmail(sender, receivers, message.as_string())
print ("郵件發送成功!!!")
smtp.quit()

運行后,查看對應的測試結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM