python发送带table的邮件_python发送html邮件

python发送邮件

python发送html邮件的的API可以参考python官方文档,但是可能会出现邮件的样式不符合预期,例如样式不全,图片展示异常等。这里总结2个踩过的坑的经验:

html要使用table的方式布局,不排除现在有些邮件客户端对div方式的布局支持也挺好的,对于布局比较简单的html邮件,一般table布局和div都可以,但是对于布局复杂的邮件,使用div不一定会有问题,但是有问题的几率就会增大,对于各式各样的邮件客户端,其兼容性也不如table布局好。

对于图片,使用html嵌入svg代码的方式,有些邮件客户端支持,有些支持的不好,因此最好的方式还是使用附件的方式。

一个简答的发送邮件的例子程序:

├── email_template.html

├── foot.jpg

├── head.jpg

└── send_email.py

email_template.html

告警邮件
这是正文
这是正文
这是正文
这是正文

send_mail.py

#!/usr/bin/env python

# coding=utf-8

"""

Send html email test

"""

import os

from email.header import Header

from email.mime.image import MIMEImage

from email.mime.multipart import MIMEMultipart

from email.mime.text import MIMEText

import smtplib

_EMAIL_TEMPLATE = 'email_template.html'

def _get_mime_image(image_path, cid):

with open(image_path, 'rb') as f:

msg_image = MIMEImage(f.read())

msg_image.add_header('Content-ID', '' % cid)

return msg_image

def _get_mime_text(html_content):

msg_alternative = MIMEMultipart('alternative')

msg_text = MIMEText(html_content, 'html', 'utf-8')

msg_alternative.attach(msg_text)

return msg_alternative

def _get_email_template():

cur_path = os.path.dirname(__file__)

email_template_path = os.path.join(cur_path, _EMAIL_TEMPLATE)

with open(email_template_path, 'r') as f:

content = f.read()

return content

def main():

email_server_host = 'smtp.163.com'

email_server_port = 465

username = 'user_sender@163.com'

password = 'password'

receivers = ['user_revicer@qq.com', username]

msg_root = MIMEMultipart('related')

msg_root['Subject'] = Header(u'发送邮件测试', 'utf-8')

msg_root['From'] = username

msg_root['To'] = '; '.join(receivers)

html_content = _get_email_template()

msg_root.attach(_get_mime_text(html_content))

cur_path = os.path.dirname(__file__)

head_jpg = os.path.join(cur_path, 'head.jpg')

msg_root.attach(_get_mime_image(head_jpg, 'head_jpg'))

foot_jpg = os.path.join(cur_path, 'foot.jpg')

msg_root.attach(_get_mime_image(foot_jpg, 'foot_jpg'))

client = smtplib.SMTP_SSL(email_server_host, email_server_port)

client.login(username, password)

client.sendmail(username, receivers, msg_root.as_string())

client.quit()

if __name__ == '__main__':

main()

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
程序员的必经之路! 【限时优惠】 现在下单,还享四重好礼: 1、教学课件免费下载 2、课程案例代码免费下载 3、专属VIP学员群免费答疑 4、下单还送800元编程大礼包 【超实用课程内容】  根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!   套餐中一共包含2门MySQL数据库必学的核心课程(共98课时)   课程1:《MySQL数据库从入门到实战应用》   课程2:《高性能MySQL实战课》   【哪些人适合学习这门课程?】  1)平时只接触了语言基础,并未学习任何数据库知识的人;  2)对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; 3)想修炼更好的MySQL内功,工作中遇到高并发场景可以游刃有余; 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 【课程主要讲哪些内容?】 课程一:《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。 课程二:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家发挥MySQL的最佳性能的优化方法,掌握如何处理海量业务数据和高并发请求 【你能收获到什么?】  1.基础再提高,针对MySQL核心知识点学透,用对; 2.能力再提高,日常工作中的代码换新貌,不怕问题; 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 【课程如何观看?】  1、登录CSDN学院 APP 在我的课程中进行学习; 2、移动端:CSDN 学院APP(注意不是CSDN APP哦)  本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页