使用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之类的细节
Oct 13 Python
介绍Python中内置的itertools模块
Apr 29 Python
python下载微信公众号相关文章
Feb 26 Python
Python使用dict.fromkeys()快速生成一个字典示例
Apr 24 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
Jun 27 Python
简单了解python 邮件模块的使用方法
Jul 24 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
Feb 27 Python
Python %r和%s区别代码实例解析
Apr 03 Python
keras的三种模型实现与区别说明
Jul 03 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
pycharm 复制代码出现空格的解决方式
Jan 15 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输出时间格式
2013/08/31 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
jQuery 性能优化指南 (1)
2009/05/21 Javascript
jquery ajax 同步异步的执行 return值不能取得的解决方案
2012/01/08 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
js使浏览器窗口最大化实现代码(适用于IE)
2013/08/07 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
Vuejs入门教程之Vue生命周期,数据,手动挂载,指令,过滤器
2017/04/19 Javascript
JS非空验证及邮箱验证的实例
2017/08/11 Javascript
原生javascript实现的全屏滚动功能示例
2017/09/19 Javascript
VSCode配置react开发环境的步骤
2017/12/27 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
解决Vue 项目打包后favicon无法正常显示的问题
2018/09/01 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
详解小程序用户登录状态检查与更新实例
2019/05/15 Javascript
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
javascript获取select值的方法完整实例
2019/06/20 Javascript
使用vue中的混入mixin优化表单验证插件问题
2019/07/02 Javascript
通过微信公众平台获取公众号文章的方法示例
2019/12/25 Javascript
Vue组件模板及组件互相引用代码实例
2020/03/11 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
[40:03]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#1EHOME VS Archon
2016/03/02 DOTA
python获取文件后缀名及批量更新目录下文件后缀名的方法
2014/11/11 Python
Python在信息学竞赛中的运用及Python的基本用法(详解)
2017/08/15 Python
新手入门学习python Numpy基础操作
2020/03/02 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
标准大学生职业生涯规划书写作指南
2014/09/18 职场文书
批评与自我批评范文
2014/10/15 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
nginx处理http请求实现过程解析
2021/03/31 Servers