python flask发送邮件嵌入图片 Outlook
2017-01-20 10:24
323 查看
邮件模板如下:email.html
最开始使用的是下面这种方法,测试后在163邮箱是可以看到图片的,但是在Outlook2010中图片无法显示,是x
下面是flask标准的异步发送邮件方法
查到了Outlook2007+不支持Embedded Image,见send-a-base64-image-in-html-email
看到解决方法有用cid的,但是并没有查到flask发送邮件,img用cid的方法,所以参考了用email包的方法,见用Python发送邮件
首先将图片作为附件添加到邮件中,修改send_email方法:
这样图片就被添加到附件中了,对比用email包嵌入图片和添加附件的区别,红色框住的是区别:
继续修改send_email方法,根据flask-mail的api增加了两个参数:
with app.open_resource(image) as fp:
msg.attach('image.png', "image/png", fp.read(), 'inline', headers=[('Content-ID', 'image')])最后修改传入到模板中的参数:(注意cid要和Content-ID一致)
send_email('123@xxx.com', 'hello', 'email', 'test.png', img='cid:image')大功告成!Outlook终于能正常显示图片了!
<img src="{{ img }}"> <p>注意:此邮件自动发送,回复无效</p>
最开始使用的是下面这种方法,测试后在163邮箱是可以看到图片的,但是在Outlook2010中图片无法显示,是x
下面是flask标准的异步发送邮件方法
def send_async_email(app, msg): with app.app_context(): mail.send(msg) def send_email(to, subject, template, **kwargs): app = current_app._get_current_object() msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + ' ' + subject, sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to]) # msg.body = render_template(template + '.txt', **kwargs) msg.html = render_template(template + '.html', **kwargs) thr = Thread(target=send_async_email, args=[app, msg]) thr.start() return thr读取图片base64传入到模板中
f = open('test.png', 'rb') img = base64.b64encode(f.read()) f.close() send_email('123@xxx.com', 'hello', 'email', img=img)
查到了Outlook2007+不支持Embedded Image,见send-a-base64-image-in-html-email
看到解决方法有用cid的,但是并没有查到flask发送邮件,img用cid的方法,所以参考了用email包的方法,见用Python发送邮件
首先将图片作为附件添加到邮件中,修改send_email方法:
def send_email(to, subject, template, image, **kwargs): app = current_app._get_current_object() msg = Message(app.config['FLASKY_MAIL_SUBJECT_PREFIX'] + ' ' + subject, sender=app.config['FLASKY_MAIL_SENDER'], recipients=[to]) # msg.body = render_template(template + '.txt', **kwargs) msg.html = render_template(template + '.html', **kwargs) with app.open_resource(image) as fp: msg.attach('image.png', "image/png", fp.read()) thr = Thread(target=send_async_email, args=[app, msg]) thr.start() return thr
这样图片就被添加到附件中了,对比用email包嵌入图片和添加附件的区别,红色框住的是区别:
继续修改send_email方法,根据flask-mail的api增加了两个参数:
with app.open_resource(image) as fp:
msg.attach('image.png', "image/png", fp.read(), 'inline', headers=[('Content-ID', 'image')])最后修改传入到模板中的参数:(注意cid要和Content-ID一致)
send_email('123@xxx.com', 'hello', 'email', 'test.png', img='cid:image')大功告成!Outlook终于能正常显示图片了!
相关文章推荐
- 如何在ASP.NET中发送嵌入图片的邮件
- C#发送邮件嵌入图片
- python发送包含html、图片、附件和链接的邮件
- python之简单邮件发送(带图片)
- C# 发送邮件内容嵌入图片
- JavaMail发送带图片正文的邮件,outlook等邮箱不显示的问题
- C# 发送邮件内容嵌入图片
- python发送包含html、图片、附件和链接的邮件
- 【Python】发送带文字图片附件的邮件
- 发送带嵌入图片邮件之SMTP实现和ESMTP实现
- .NET C# 发送邮件内容嵌入图片
- .net中 发送邮件内容嵌入图片的具体实例
- C# 发送邮件内容嵌入图片
- 发送邮件嵌入图片
- .NET C# 发送邮件内容嵌入图片
- C# 发送模板邮件并嵌入N张图片(优化) 以模版img标签为驱动
- python发送邮件的实例代码(支持html、图片、附件)
- 如何在ASP.NET中发送嵌入图片的邮件
- python发送邮件,含有正文,附件,正文中含有图片(图片直接在邮件内容中显示)
- python发送包含html、图片、附件和链接的邮件