1. 程式人生 > >python2.6.x/python3傳送郵件,並在正文中顯示附件中的圖片

python2.6.x/python3傳送郵件,並在正文中顯示附件中的圖片

直接在HTML郵件中連結圖片地址是不行的。引文大部分郵件服務商都會自動遮蔽帶有外鏈的圖片,因為不知道這些連結是否指向惡意網站。
只需要在HTML中通過

方式一:引用src="cid:0"就可以把附件作為圖片嵌入了。如果有多個圖片,給它們依次編號,然後引用不同的cid:x即可。

Q: 使用方式一在蘋果郵件客戶端會出現A1的郵件圖片,會替換A2的郵件圖片;

方式二:

讀取圖片並新增郵件頭
fp = open(imgpath, 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

# Define the image's ID as referenced above
msgImage.add_header('Content-ID', '<image{count}>'.format(count=i))
msgRoot.attach(msgImage)
解決方式一中出現的問題;

# -*- coding:utf-8 -*-
import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

class EmailMsg():
    def sendMail(self, msg):
     
        # 郵件物件:
        message = MIMEMultipart()
        message.attach(MIMEText(msg, 'html', 'utf-8'))
        # 三個引數:第一個為文字內容,第二個 plain 設定文字格式,第三個 utf-8 設定編碼
        # message = MIMEText(msg, 'html', 'utf-8')

        message['from'] = '
[email protected]
' message['to'] = '[email protected]' password = "123456" message['subject'] = Header(u'公眾號訊息', 'utf-8').encode() smtp_server = "smtp.163.com" server = smtplib.SMTP(smtp_server, 25) # SMTP協議預設埠是25 # 打印出和SMTP伺服器互動的所有資訊。 # server.set_debuglevel(1) # 登入SMTP伺服器 server.login(message['from'], password) # 新增附件就是加上一個MIMEBase,從本地讀取一個圖片: with open('./img/00_00.jpg', 'rb') as f: # 設定附件的MIME和檔名,這裡是png型別: mime = MIMEBase('image', 'jpg', filename='timg.jpg') # 加上必要的頭資訊: mime.add_header('Content-Disposition', 'attachment', filename='test.png') mime.add_header('Content-ID', '<0>') //如果有多個檔案需要使用.format(index) mime.add_header('X-Attachment-Id', '0') //如果有多個檔案需要使用.format(index) # 把附件的內容讀進來: mime.set_payload(f.read()) # 用Base64編碼: encoders.encode_base64(mime) # 新增到MIMEMultipart: message.attach(mime) # 發郵件,由於可以一次發給多個人,所以傳入一個list; # 郵件正文是一個str,as_string()把MIMEText物件變成str。 server.sendmail(message['from'], [message['to']], message.as_string()) server.quit() if __name__ == '__main__': em = EmailMsg() em.sendMail('''<html lang="en"> <body> <h1>附件中的圖片</h1> <img src="cid:0"> <img src="cid:1"> <img src="cid:2"> .... </body> </html>''')