用Python实现一个简单的能够发送带附件的邮件程序的教程


Posted in Python onApril 08, 2015

基本思路就是,使用MIMEMultipart来标示这个邮件是多个部分组成的,然后attach各个部分。如果是附件,则add_header加入附件的声明。
在python中,MIME的这些对象的继承关系如下。
MIMEBase
    |-- MIMENonMultipart
        |-- MIMEApplication
        |-- MIMEAudio
        |-- MIMEImage
        |-- MIMEMessage
        |-- MIMEText
    |-- MIMEMultipart
一般来说,不会用到MIMEBase,而是直接使用它的继承类。MIMEMultipart有attach方法,而MIMENonMultipart没有,只能被attach。
MIME有很多种类型,这个略麻烦,如果附件是图片格式,我要用MIMEImage,如果是音频,要用MIMEAudio,如果是word、excel,我都不知道该用哪种MIME类型了,得上google去查。
最懒的方法就是,不管什么类型的附件,都用MIMEApplication,MIMEApplication默认子类型是application/octet-stream。
application/octet-stream表明“这是个二进制的文件,希望你们那边知道怎么处理”,然后客户端,比如qq邮箱,收到这个声明后,会根据文件扩展名来猜测。

下面上代码。
假设当前目录下有foo.xlsx/foo.jpg/foo.pdf/foo.mp3这4个文件。
 

import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
from email.mime.application import MIMEApplication 
_user = "sigeken@qq.com" 
_pwd = "***" 
_to  = "402363522@qq.com" 
  
#如名字所示Multipart就是分多个部分 
msg = MIMEMultipart() 
msg["Subject"] = "don't panic" 
msg["From"]  = _user 
msg["To"]   = _to 
  
#---这是文字部分--- 
part = MIMEText("乔装打扮,不择手段") 
msg.attach(part) 
  
#---这是附件部分--- 
#xlsx类型附件 
part = MIMEApplication(open('foo.xlsx','rb').read()) 
part.add_header('Content-Disposition', 'attachment', filename="foo.xlsx") 
msg.attach(part) 
  
#jpg类型附件 
part = MIMEApplication(open('foo.jpg','rb').read()) 
part.add_header('Content-Disposition', 'attachment', filename="foo.jpg") 
msg.attach(part) 
  
#pdf类型附件 
part = MIMEApplication(open('foo.pdf','rb').read()) 
part.add_header('Content-Disposition', 'attachment', filename="foo.pdf") 
msg.attach(part) 
  
#mp3类型附件 
part = MIMEApplication(open('foo.mp3','rb').read()) 
part.add_header('Content-Disposition', 'attachment', filename="foo.mp3") 
msg.attach(part) 
  
s = smtplib.SMTP("smtp.qq.com", timeout=30)#连接smtp邮件服务器,端口默认是25 
s.login(_user, _pwd)#登陆服务器 
s.sendmail(_user, _to, msg.as_string())#发送邮件 
s.close()
Python 相关文章推荐
使用C语言扩展Python程序的简单入门指引
Apr 14 Python
pymongo为mongodb数据库添加索引的方法
May 11 Python
Python的几个高级语法概念浅析(lambda表达式闭包装饰器)
May 28 Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 Python
python实现list元素按关键字相加减的方法示例
Jun 09 Python
python3 对list中每个元素进行处理的方法
Jun 29 Python
Python之两种模式的生产者消费者模型详解
Oct 26 Python
Python 带有参数的装饰器实例代码详解
Dec 06 Python
python发送多人邮件没有展示收件人问题的解决方法
Jun 21 Python
七个非常实用的Python工具包总结
Jun 15 Python
python unittest单元测试的步骤分析
Aug 02 Python
Python使用pyecharts控件绘制图表
Jun 05 Python
Python 创建子进程模块subprocess详解
Apr 08 #Python
Python中使用gzip模块压缩文件的简单教程
Apr 08 #Python
Python使用scrapy抓取网站sitemap信息的方法
Apr 08 #Python
Python中用format函数格式化字符串的用法
Apr 08 #Python
简单介绍Python中的JSON模块
Apr 08 #Python
Python实现把xml或xsl转换为html格式
Apr 08 #Python
Python正则表达式匹配HTML页面编码
Apr 08 #Python
You might like
用PHP+java实现自动新闻滚动窗口
2006/10/09 PHP
xajax写的留言本
2006/11/25 PHP
获取URL文件名后缀
2013/10/24 PHP
jquery 入门教程 [翻译] 推荐
2009/08/17 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
JavaScript中的anchor()方法使用详解
2015/06/08 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
react-router JS 控制路由跳转实例
2017/06/15 Javascript
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
javascript函数的节流[throttle]与防抖[debounce]
2017/11/15 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
[58:42]DOTA2上海特级锦标赛C组败者赛 Newbee VS Archon第一局
2016/02/27 DOTA
python使用reportlab画图示例(含中文汉字)
2013/12/03 Python
python pandas中DataFrame类型数据操作函数的方法
2018/04/08 Python
pandas实现选取特定索引的行
2018/04/20 Python
python实现搜索文本文件内容脚本
2018/06/22 Python
Python最小二乘法矩阵
2019/01/02 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
2019/03/11 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
使用TensorFlow实现简单线性回归模型
2019/07/19 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
keras之权重初始化方式
2020/05/21 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
python 爬取B站原视频的实例代码
2020/09/09 Python
Python 随机按键模拟2小时
2020/12/30 Python
芝加哥牛排公司:Chicago Steak Company
2018/10/31 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
Deichmann英国:德国鞋类零售商
2021/01/30 全球购物
安全例会汇报材料
2014/08/23 职场文书
2015中学教师个人工作总结
2015/07/22 职场文书