使用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中逗号的三种作用实例分析
Jun 08 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
对python周期性定时器的示例详解
Feb 19 Python
Python3实现发送邮件和发送短信验证码功能
Jan 07 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
Jan 16 Python
使用 tf.nn.dynamic_rnn 展开时间维度方式
Jan 21 Python
利用 Python ElementTree 生成 xml的实例
Mar 06 Python
python实现快速文件格式批量转换的方法
Oct 16 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 Python
详解python的内存分配机制
May 10 Python
详解Go语言运用广度优先搜索走迷宫
Jun 23 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 Mssql操作简单封装支持存储过程
2009/12/11 PHP
PHP 验证码的实现代码
2011/07/17 PHP
mysql,mysqli,PDO的各自不同介绍
2012/09/19 PHP
php通过分类列表产生分类树数组的方法
2015/04/20 PHP
控制打印时页眉角的代码
2007/02/08 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
javascript完美拖拽的实现方法
2013/09/29 Javascript
jQuery中使用Ajax获取JSON格式数据示例代码
2013/11/26 Javascript
AngularJS入门教程(一):静态模板
2014/12/06 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
微信小程序 MINA文件结构
2016/10/17 Javascript
JS产生随机数的用法小结
2016/12/10 Javascript
Bootstrap 3 按钮标签实例代码
2017/02/21 Javascript
jquery加载单文件vue组件的方法
2017/06/20 jQuery
微信小程序实现带缩略图轮播效果
2018/11/04 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
p5.js临摹动态图形的方法
2019/10/23 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
python 调用win32pai 操作cmd的方法
2017/05/28 Python
Python+OpenCV感兴趣区域ROI提取方法
2019/01/10 Python
Python如何用filter函数筛选数据
2020/03/05 Python
python SOCKET编程基础入门
2021/02/27 Python
加拿大时尚潮流大码女装购物网站:Addition Elle
2018/04/02 全球购物
意大利在线药房:shop-farmacia.it
2019/03/12 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
婚庆公司的创业计划书
2014/01/22 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
《巨人的花园》教学反思
2014/02/12 职场文书
安全生产中长期规划实施方案
2014/02/21 职场文书
关于保护环境的建议书
2014/08/26 职场文书
公司禁烟通知
2015/04/23 职场文书
企业投资意向书
2015/05/09 职场文书
小学生安全教育主题班会
2015/08/12 职场文书
Python编程编写完善的命令行工具
2021/09/15 Python