使用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 web程序
Sep 11 Python
Python基于Matplotlib库简单绘制折线图的方法示例
Aug 14 Python
用django设置session过期时间的方法解析
Aug 05 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
Jan 12 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
Django高并发负载均衡实现原理详解
Apr 04 Python
keras实现VGG16 CIFAR10数据集方式
Jul 07 Python
Python下划线5种含义代码实例解析
Jul 10 Python
python3爬虫GIL修改多线程实例讲解
Nov 24 Python
Python爬虫之Selenium实现关闭浏览器
Dec 04 Python
详解Python中的GIL(全局解释器锁)详解及解决GIL的几种方案
Jan 29 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 24 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入门学习笔记之一
2010/10/12 PHP
php中inlcude()性能对比详解
2012/09/16 PHP
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
2014/05/10 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
PHP类的反射用法实例
2014/11/03 PHP
php获取随机数组列表的方法
2014/11/13 PHP
php组合排序简单实现方法
2016/10/15 PHP
javascript Demo模态窗口
2009/12/06 Javascript
JavaScript Cookie显示用户上次访问的时间和次数
2009/12/08 Javascript
js截取固定长度的中英文字符的简单实例
2013/11/22 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
javascript+ajax实现产品页面加载信息
2015/07/09 Javascript
手机端转盘抽奖代码分享
2015/09/10 Javascript
Javascript中的prototype与继承
2017/02/06 Javascript
vue-dialog的弹出层组件
2020/05/25 Javascript
springMVC + easyui + $.ajaxFileUpload实现文件上传注意事项
2017/04/23 Javascript
微信web端后退强制刷新功能的实现代码
2018/03/04 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
解决vue语法会有延迟加载显现{{xxx}}的问题
2019/11/14 Javascript
Angular6项目打包优化的实现方法
2019/12/15 Javascript
js+canvas实现画板功能
2020/09/13 Javascript
详解Vue3.0 + TypeScript + Vite初体验
2021/02/22 Vue.js
详解Python中heapq模块的用法
2016/06/28 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
Django网络框架之HelloDjango项目创建教程
2019/06/06 Python
浅析Django中关于session的使用
2019/12/30 Python
法国美发器材和产品购物网站:Beauty Coiffure
2016/12/05 全球购物
自荐信模版
2013/10/24 职场文书
应聘面试自我评价
2014/01/24 职场文书
母亲追悼会答谢词
2014/01/27 职场文书
安全生产责任书
2014/03/12 职场文书
售后服务承诺书范文
2014/03/26 职场文书
调研汇报材料范文
2014/08/17 职场文书
2014年质量工作总结
2014/11/22 职场文书
nginx搭建NFS网络文件系统
2022/04/14 Servers