使用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 可爱的大小写
Sep 06 Python
python批量下载图片的三种方法
Apr 22 Python
用Python生成器实现微线程编程的教程
Apr 13 Python
Python中防止sql注入的方法详解
Feb 25 Python
解读! Python在人工智能中的作用
Nov 14 Python
django数据关系一对多、多对多模型、自关联的建立
Jul 24 Python
Django REST框架创建一个简单的Api实例讲解
Nov 05 Python
wxPython之wx.DC绘制形状
Nov 19 Python
Python input函数使用实例解析
Nov 22 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
python boto和boto3操作bucket的示例
Oct 30 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生成0~1随机小数的方法(必看)
2017/04/05 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
ExtJS的FieldSet的column列布局
2009/11/20 Javascript
IE和Firefox下event事件杂谈
2009/12/18 Javascript
一些经常会用到的Javascript检测函数
2010/05/31 Javascript
基于jquery的实现简单的表格中增加或删除下一行
2010/08/01 Javascript
Javascript倒计时代码
2010/08/12 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
深入理解javascript作用域和闭包
2014/09/23 Javascript
在JavaScript中操作数组之map()方法的使用
2015/06/09 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
记录一篇关于redux-saga的基本使用过程
2018/08/18 Javascript
JavaScript设计模式之代理模式实例分析
2019/01/16 Javascript
vue.js高德地图实现热点图代码实例
2019/04/18 Javascript
javascript实现导航栏分页效果
2019/06/27 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
Python写的PHPMyAdmin暴力破解工具代码
2014/08/06 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
符合语言习惯的 Python 优雅编程技巧【推荐】
2018/09/25 Python
python判断字符串或者集合是否为空的实例
2019/01/23 Python
Python遍历字典方式就实例详解
2019/12/28 Python
CSS3 flex布局之快速实现BorderLayout布局
2015/12/03 HTML / CSS
html5 拖拽上传图片实例演示
2013/04/01 HTML / CSS
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
培训协议书范本
2014/04/22 职场文书
毕业感言怎么写
2015/07/31 职场文书
乡镇司法所2015年度工作总结
2015/10/14 职场文书
业余无线电通联Q语
2022/02/18 无线电