使用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 13 Python
浅析Python中的for 循环
Jun 09 Python
基于Django的ModelForm组件(详解)
Dec 07 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
Mar 05 Python
python 拷贝特定后缀名文件,并保留原始目录结构的实例
Apr 27 Python
python使用Matplotlib绘制分段函数
Sep 25 Python
matplotlib.pyplot绘图显示控制方法
Jan 15 Python
python实现五子棋小游戏
Mar 25 Python
Python子类继承父类构造函数详解
Feb 19 Python
Python 共享变量加锁、释放详解
Aug 28 Python
python实现xlwt xlrd 指定条件给excel行添加颜色
Jul 14 Python
Python Numpy之linspace用法说明
Apr 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
使用Xdebug调试和优化PHP程序之[1]
2007/04/17 PHP
php基于curl实现的股票信息查询类实例
2016/11/11 PHP
php表单习惯用的正则表达式
2017/10/11 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
基于JQUERY的多级联动代码
2012/01/24 Javascript
Firefox/Chrome/Safari的中可直接使用$/$$函数进行调试
2012/02/13 Javascript
事件委托与阻止冒泡阻止其父元素事件触发
2014/09/02 Javascript
jquery实现鼠标滑过显示提示框的方法
2015/02/05 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
JScript中的条件注释详解
2015/04/24 Javascript
javascript实现简单的进度条
2015/07/02 Javascript
Bootstrap基本插件学习笔记之模态对话框(16)
2016/12/08 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
windows系统下更新nodejs版本的方案
2017/11/24 NodeJs
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
JavaScript实现身份证验证代码实例
2019/08/26 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
Python的Django中django-userena组件的简单使用教程
2015/05/30 Python
python中的插值 scipy-interp的实现代码
2018/07/23 Python
Flask配置Cors跨域的实现
2019/07/12 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
解决安装新版PyQt5、PyQT5-tool后打不开并Designer.exe提示no Qt platform plugin的问题
2020/04/24 Python
python能否java成为主流语言吗
2020/06/22 Python
python-图片流传输的思路及示例(url转换二维码)
2020/12/21 Python
Python中的流程控制详解
2021/02/18 Python
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
日本最大的旅游网站:Rakuten Travel(乐天旅游)
2018/08/02 全球购物
阳光体育:Sunny Sports(购买露营和远足设备)
2018/08/07 全球购物
往来会计岗位职责
2013/12/19 职场文书
运动会广播稿500字
2014/01/28 职场文书
节能减耗标语
2014/06/21 职场文书
公司表扬信格式
2015/05/04 职场文书
微信搭讪开场白
2015/05/28 职场文书
金正昆讲礼仪观后感
2015/06/11 职场文书
vue响应式原理与双向数据的深入解析
2021/06/04 Vue.js
24年收藏2000多部退役军用电台
2022/02/18 无线电