使用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操作摄像头截图实现远程监控的例子
Mar 25 Python
python通过floor函数舍弃小数位的方法
Mar 17 Python
Python打造出适合自己的定制化Eclipse IDE
Mar 02 Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 Python
python实现两个经纬度点之间的距离和方位角的方法
Jul 05 Python
django fernet fields字段加密实践详解
Aug 12 Python
Python解析多帧dicom数据详解
Jan 13 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
May 20 Python
Virtualenv 搭建 Py项目运行环境的教程详解
Jun 22 Python
Python3爬虫里关于Splash负载均衡配置详解
Jul 10 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 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
XAMPP安装与使用方法详细解析
2013/11/27 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
PHP CodeIgniter框架的工作原理研究
2015/03/30 PHP
Netbeans 8.2与PHP相关的新特性介绍
2016/10/08 PHP
PHP7新特性
2021/03/09 PHP
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
2009/07/06 Javascript
Zero Clipboard js+swf实现的复制功能使用方法
2010/03/07 Javascript
js解析与序列化json数据(一)json.stringify()的基本用法
2013/02/01 Javascript
编写自己的jQuery提示框(Tip)插件
2015/02/05 Javascript
jQuery插件datalist实现很好看的input下拉列表
2015/07/14 Javascript
解析JavaScript的ES6版本中的解构赋值
2015/07/28 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
详解React之key的使用和实践
2018/09/29 Javascript
详解vue-video-player使用心得(兼容m3u8)
2019/08/23 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
OpenLayers3实现图层控件功能
2020/09/25 Javascript
Python argv用法详解
2016/01/08 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
python中协程实现TCP连接的实例分析
2018/10/14 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
Python scipy的二维图像卷积运算与图像模糊处理操作示例
2019/09/06 Python
Python序列化与反序列化pickle用法实例
2019/11/11 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
2021/01/08 Python
IE9对HTML5中部分属性不支持的原因分析
2014/10/15 HTML / CSS
美国汽车交易网站:Edmunds
2016/08/17 全球购物
linux面试题参考答案(10)
2016/10/26 面试题
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
集体婚礼证婚词
2014/01/13 职场文书
小学校园活动策划
2014/01/30 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
创业计划书之便利店
2019/09/05 职场文书
python pygame入门教程
2021/06/01 Python
基于python定位棋子位置及识别棋子颜色
2021/07/26 Python
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers