使用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获取指定网页上所有超链接的方法
Apr 04 Python
Python中datetime模块参考手册
Jan 13 Python
利用python求解物理学中的双弹簧质能系统详解
Sep 29 Python
详解Python中where()函数的用法
Mar 27 Python
pandas使用get_dummies进行one-hot编码的方法
Jul 10 Python
python实现五子棋人机对战游戏
Mar 25 Python
django重新生成数据库中的某张表方法
Aug 28 Python
Python 面向对象之类class和对象基本用法示例
Feb 02 Python
关于Keras Dense层整理
May 21 Python
pandas 实现将NaN转换为None
May 14 Python
python ansible自动化运维工具执行流程
Jun 24 Python
python开发的自动化运维工具ansible详解
Aug 07 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
phpMyAdmin 链接表的附加功能尚未激活问题的解决方法(已测)
2012/03/27 PHP
解析关于wamp启动是80端口被占用的问题
2013/06/21 PHP
PHP中判断变量为空的几种方法分享
2013/08/26 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
php制作圆形用户头像的实例_自定义封装类源代码
2017/09/18 PHP
做好七件事帮你提升jQuery的性能
2014/02/06 Javascript
原生js实现类似弹窗抖动效果
2015/04/02 Javascript
JS使用eval解析JSON的注意事项分析
2015/11/14 Javascript
jquery实现触发时更新下拉列表内容的方法
2015/12/02 Javascript
Windows 系统下设置Nodejs NPM全局路径
2016/04/26 NodeJs
对javascript继承的理解
2016/10/11 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
Ionic + Angular.js实现验证码倒计时功能的方法
2017/06/12 Javascript
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
浅谈JS中this在各个场景下的指向
2019/08/14 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
JavaScript中arguments的使用方法详解
2020/12/20 Javascript
闭包在python中的应用之translate和maketrans用法详解
2014/08/27 Python
python在windows和linux下获得本机本地ip地址方法小结
2015/03/20 Python
Python Socket使用实例
2017/12/18 Python
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
用Eclipse写python程序
2018/02/10 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
python3实现绘制二维点图
2019/12/04 Python
用python读取xlsx文件
2020/12/17 Python
Timberland德国官网:靴子、鞋子、衣服、夹克及配件
2019/12/10 全球购物
个人委托书怎么写
2014/09/17 职场文书
2015年化验室工作总结
2015/04/23 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书
大学生党课感想
2015/08/11 职场文书
幼儿园教师心得体会范文
2016/01/21 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang
Python上下文管理器Content Manager
2021/06/26 Python
Java实现超大Excel文件解析(XSSF,SXSSF,easyExcel)
2022/07/15 Java/Android