使用Python发送各种形式的邮件的方法汇总


Posted in Python onNovember 09, 2015

我们平时需要使用 Python 发送各类邮件,这个需求怎么来实现?答案其实很简单,smtplib 和 email 库可以帮忙实现这个需求。smtplib 和 email 的组合可以用来发送各类邮件:普通文本,HTML 形式,带附件,群发邮件,带图片的邮件等等。我们这里将会分几节把发送邮件功能解释完成。
smtplib 是 Python 用来发送邮件的模块,email 是用来处理邮件消息。

发送 HTML 形式的邮件
发送 HTML 形式的邮件,需要 email.mime.text 中的 MIMEText 的 _subtype 设置为 html,并且 _text 的内容应该为 HTML 形式。

import smtplib
from email.mime.text import MIMEText

sender = '***'
receiver = '***'
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '***'
password = '***'

msg = MIMEText(u'''<pre>
<h1>你好</h1>
</pre>''','html','utf-8')

msg['Subject'] = subject

smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msg.as_string())
smtp.quit()

注意:这里的代码并没有把异常处理加入,需要读者自己处理异常。

发送带图片的邮件
发送带图片的邮件是利用 email.mime.multipart 的 MIMEMultipart 以及 email.mime.image 的 MIMEImage:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.image import MIMEImage

sender = '***'
receiver = '***'
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '***'
password = '***'

msgRoot = MIMEMultipart('related')
msgRoot['Subject'] = 'test message'

msgText = MIMEText(
  '''<b> Some <i> HTML </i> text </b > and an image.<img alt="" src="cid:image1"/>good!''', 'html', 'utf-8')
msgRoot.attach(msgText)

fp = open('/Users/1.jpg', 'rb')
msgImage = MIMEImage(fp.read())
fp.close()

msgImage.add_header('Content-ID', '<image1>')
msgRoot.attach(msgImage)

smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msgRoot.as_string())
smtp.quit()

发送带附件的邮件
发送带附件的邮件是利用 email.mime.multipart 的 MIMEMultipart 以及 email.mime.image 的 MIMEImage,重点是构造邮件头信息:

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

sender = '***'
receiver = '***'
subject = 'python email test'
smtpserver = 'smtp.163.com'
username = '***'
password = '***'

msgRoot = MIMEMultipart('mixed')
msgRoot['Subject'] = 'test message'

# 构造附件
att = MIMEText(open('/Users/1.jpg', 'rb').read(), 'base64', 'utf-8')
att["Content-Type"] = 'application/octet-stream'
att["Content-Disposition"] = 'attachment; filename="1.jpg"'
msgRoot.attach(att)

smtp = smtplib.SMTP()
smtp.connect(smtpserver)
smtp.login(username, password)
smtp.sendmail(sender, receiver, msgRoot.as_string())
smtp.quit()
Python 相关文章推荐
Python数据处理numpy.median的实例讲解
Apr 02 Python
基于python3 OpenCV3实现静态图片人脸识别
May 25 Python
python多线程并发实例及其优化
Jun 27 Python
django 使用全局搜索功能的实例详解
Jul 18 Python
python 的 scapy库,实现网卡收发包的例子
Jul 23 Python
探秘TensorFlow 和 NumPy 的 Broadcasting 机制
Mar 13 Python
python pandas.DataFrame.loc函数使用详解
Mar 26 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
win10安装python3.6的常见问题
Jul 01 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
Python基于mediainfo批量重命名图片文件
Dec 29 Python
python 中 .py文件 转 .pyd文件的操作
Mar 04 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
Nov 09 #Python
使用Python实现BT种子和磁力链接的相互转换
Nov 09 #Python
Python中MySQLdb和torndb模块对MySQL的断连问题处理
Nov 09 #Python
使用Python对IP进行转换的一些操作技巧小结
Nov 09 #Python
Python实现模拟时钟代码推荐
Nov 08 #Python
用Python的Flask框架结合MySQL写一个内存监控程序
Nov 07 #Python
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
Nov 07 #Python
You might like
PHP中两个float(浮点数)比较实例分析
2015/09/27 PHP
php  PATH_SEPARATOR判断当前服务器系统类型实例
2016/10/28 PHP
php5对象复制、clone、浅复制与深复制实例详解
2019/08/14 PHP
FusionCharts图表显示双Y轴双(多)曲线
2012/11/22 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
Javascript中的包装类型介绍
2015/04/02 Javascript
AngularJS中的$watch(),$digest()和$apply()区分
2016/04/04 Javascript
jQuery实例—选项卡的简单实现(js源码和jQuery)
2016/06/14 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
Bootstrap实现的标签页内容切换显示效果示例
2017/05/25 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
基于jquery.page.js实现分页效果
2018/01/01 jQuery
Vue插值、表达式、分隔符、指令知识小结
2018/10/12 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
JS使用正则表达式提交页面验证的代码
2019/10/16 Javascript
vue+element-ui表格封装tag标签使用插槽
2020/06/18 Javascript
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
python随机取list中的元素方法
2018/04/08 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
浅谈Python 敏感词过滤的实现
2019/08/15 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
python利用opencv实现SIFT特征提取与匹配
2020/03/05 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
css 省略号 css3让多余的字符串消失并附加省略号的实现代码
2013/02/07 HTML / CSS
CSS3 Media Queries详细介绍和使用实例
2014/05/08 HTML / CSS
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
Sperry澳大利亚官网:源自美国帆船鞋创始品牌
2019/07/29 全球购物
explicit和implicit的含义
2012/11/15 面试题
淘宝客服工作职责
2014/07/11 职场文书
走群众路线学习心得体会
2014/10/31 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
详解CocosCreator项目结构机制
2021/04/14 Javascript
windows11怎么查看wifi密码? win11查看wifi密码的技巧
2021/11/21 数码科技