使用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获取CPU和内存信息的思路与实现(linux系统)
Jan 03 Python
python实现360皮肤按钮控件示例
Feb 21 Python
Python urllib、urllib2、httplib抓取网页代码实例
May 09 Python
python实现微信接口(itchat)详细介绍
Oct 23 Python
Python数据分析matplotlib设置多个子图的间距方法
Aug 03 Python
Python标准库使用OrderedDict类的实例讲解
Feb 14 Python
PyQt5创建一个新窗口的实例
Jun 20 Python
python程序快速缩进多行代码方法总结
Jun 23 Python
Django ORM 常用字段与不常用字段汇总
Aug 09 Python
深入浅析Python 中的sklearn模型选择
Oct 12 Python
python 图片二值化处理(处理后为纯黑白的图片)
Nov 01 Python
Python中logging日志的四个等级和使用
Nov 17 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
第五节 克隆 [5]
2006/10/09 PHP
ftp类(myftp.php)
2006/10/09 PHP
PHP SESSION的增加、删除、修改、查看操作
2015/03/20 PHP
php header函数的常用http头设置
2015/06/25 PHP
LINUX下PHP程序实现WORD文件转化为PDF文件的方法
2016/05/13 PHP
js 小贴士一星期合集
2010/04/07 Javascript
javascript关于继承解析
2016/05/10 Javascript
JSONP和批量操作功能的实现方法
2016/08/21 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
2019/04/03 Javascript
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
解析Python中的二进制位运算符
2015/05/13 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
K-近邻算法的python实现代码分享
2017/12/09 Python
解决nohup重定向python输出到文件不成功的问题
2018/05/11 Python
一看就懂得Python的math模块
2018/10/21 Python
pandas中apply和transform方法的性能比较及区别介绍
2018/10/30 Python
python二进制文件的转译详解
2019/07/03 Python
python pip源配置,pip配置文件存放位置的方法
2019/07/12 Python
Python中的 sort 和 sorted的用法与区别
2019/08/10 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python selenium页面加载慢超时的解决方案
2020/03/18 Python
解决使用Pandas 读取超过65536行的Excel文件问题
2020/11/10 Python
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
be2台湾单身男女交友:全球网路婚姻介绍的领导品牌
2019/10/11 全球购物
绘画设计学生的个人自我评价
2013/09/20 职场文书
品质管理部岗位职责范文
2014/03/01 职场文书
报告会主持词
2014/04/02 职场文书
自查自纠工作总结
2014/10/15 职场文书
无子女夫妻离婚协议书(4篇)
2014/10/20 职场文书
检讨书范文500字
2015/01/28 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
PyTorch的Debug指南
2021/05/07 Python