使用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 24 Python
用Python实现一个简单的能够上传下载的HTTP服务器
May 05 Python
python3制作捧腹网段子页爬虫
Feb 12 Python
Python利用flask sqlalchemy实现分页效果
Aug 02 Python
python计算列表内各元素的个数实例
Jun 29 Python
Python中三元表达式的几种写法介绍
Mar 04 Python
python 为什么说eval要慎用
Mar 26 Python
python实现批量视频分帧、保存视频帧
May 31 Python
python itchat给指定联系人发消息的方法
Jun 11 Python
django基于restframework的CBV封装详解
Aug 08 Python
Django之模板层的实现代码
Sep 09 Python
python实现复制文件到指定目录
Oct 16 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
vs中通过剪切板循环来循环粘贴不同内容
2011/04/30 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
jQuery EasyUI API 中文文档 - Dialog对话框
2011/11/15 Javascript
javascript图像处理—仿射变换深度理解
2013/01/16 Javascript
Jquery UI震动效果实现原理及步骤
2013/02/04 Javascript
JS获取网页图片name属性的方法
2015/04/01 Javascript
JavaScript基本语法学习教程
2016/01/14 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
Angular 应用技巧总结
2016/09/14 Javascript
任意Json转成无序列表的方法示例
2016/12/09 Javascript
微信小程序 css使用技巧总结
2017/01/09 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
JS中Swiper的使用和轮播图效果
2017/08/11 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
vue项目使用微信公众号支付总结及遇到的坑
2018/10/23 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
小程序实现搜索框功能
2020/03/26 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
Python打印scrapy蜘蛛抓取树结构的方法
2015/04/08 Python
Python操作json的方法实例分析
2018/12/06 Python
浅谈python requests 的put, post 请求参数的问题
2019/01/02 Python
Tensorflow 实现释放内存
2020/02/03 Python
python3实现raspberry pi(树莓派)4驱小车控制程序
2020/02/12 Python
浅析Python requests 模块
2020/10/09 Python
python包的导入方式总结
2021/03/02 Python
优秀团队获奖感言
2014/02/19 职场文书
建筑公司员工自我鉴定
2014/04/08 职场文书
1亿有多大教学反思
2014/05/01 职场文书
英语分层教学实施方案
2014/06/15 职场文书
初三语文教学计划
2015/01/22 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
2016年小学教师政治学习心得体会
2016/01/23 职场文书
MySQL 外键约束和表关系相关总结
2021/06/20 MySQL