Python傳送帶附件的圖文格式報表指令碼(smtplib)

sktj發表於2018-01-19

coding: utf-8

import smtplib
from email.mime.multipart import MIMEMultipart #匯入MIMEMultipart類
from email.mime.text import MIMEText #匯入MIMEText類
from email.mime.image import MIMEImage #匯入MIMEImage類
HOST = “smtp.gmail.com” #定義smtp主機
SUBJECT = u”官網業務服務質量週報” #定義郵件主題
TO = “testmail@qq.com” #定義郵件接收人
FROM = “mymail@gmail.com” #定義郵件發件人

def addimg(src,imgid): #新增圖片函式,引數1:圖片路徑,引數2:圖片id
fp = open(src, `rb`) #開啟檔案
msgImage = MIMEImage(fp.read()) #建立MIMEImage物件,讀取圖片內容作為引數
fp.close() #關閉檔案
msgImage.add_header(`Content-ID`, imgid) #指定圖片檔案的Content-ID,<img>
#標籤src用到
return msgImage #返回msgImage物件

msg = MIMEMultipart(`related`) #建立MIMEMultipart物件,採用related定義內嵌資源
#的郵件體

建立一個MIMEText物件,HTML元素包括文字與圖片<img>

msgtext = MIMEText(“<font color=red>官網業務周平均延時圖表:
<img src=”cid:weekly” border=”1″>
詳細內容見附件。</font>”,”html”,”utf-8″)
msg.attach(msgtext) #MIMEMultipart物件附加MIMEText的內容
msg.attach(addimg(“img/weekly.png”,”weekly”)) #使用MIMEMultipart物件附加
# MIMEImage的內容

建立一個MIMEText物件,附加week_report.xlsx文件

attach = MIMEText(open(“doc/week_report.xlsx”, “rb”).read(), “base64”, “utf-8”)
attach[“Content-Type”] = “application/octet-stream” #指定檔案格式型別

指定Content-Disposition值為attachment則出現下載儲存對話方塊,儲存的預設檔名使用

filename指定

由於qqmail使用gb18030頁面編碼,為保證中文檔名不出現亂碼,對檔名進行編碼轉換

attach[“Content-Disposition”] = “attachment; filename=”業務服務質量週報(12周).xlsx””.decode(“utf-8”).encode(“gb18030”)

msg.attach(attach) #MIMEMultipart物件附加MIMEText附件內容
msg[`Subject`] = SUBJECT #郵件主題
msg[`From`]=FROM #郵件發件人,郵件頭部可見
msg[`To`]=TO #郵件收件人,郵件頭部可見
try:
server = smtplib.SMTP() #建立一個SMTP()物件
server.connect(HOST,”25″) #通過connect方法連線smtp主機
server.starttls() #啟動安全傳輸模式
server.login(“mymail@gmail.com“,”mypassword”) #郵箱賬號登入校驗
server.sendmail(FROM, TO, msg.as_string()) #郵件傳送
server.quit() #斷開smtp連線
print “郵件傳送成功!”
except Exception, e:
print “失敗:”+str(e)


相關文章