本文共 2215 字,大约阅读时间需要 7 分钟。
直接在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 smtplibfrom email import encodersfrom email.mime.base import MIMEBasefrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextfrom email.header import Headerclass 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'] = 'liao@163.com' message['to'] = 'liao@qq.com' 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('''附件中的图片
.... ''')
转载地址:http://gyizb.baihongyu.com/