用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 相关文章推荐
Python 错误和异常小结
Oct 09 Python
python学习数据结构实例代码
May 11 Python
python 简单的多线程链接实现代码
Aug 28 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
python web.py开发httpserver解决跨域问题实例解析
Feb 12 Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 Python
python获取全国城市pm2.5、臭氧等空气质量过程解析
Oct 12 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
在django中实现choices字段获取对应字段值
Jul 12 Python
关于python3.7安装matplotlib始终无法成功的问题的解决
Jul 28 Python
如何利用Python给自己的头像加一个小国旗(小月饼)
Oct 02 Python
Python中常见的反爬机制及其破解方法总结
Jun 10 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
暴雪前总裁遗憾:没尽早追赶Dota 取消星际争霸幽灵
2020/03/08 星际争霸
php页面消耗内存过大的处理办法
2013/03/18 PHP
网页上facebook分享功能具体实现
2014/01/26 PHP
PHP不用递归遍历目录下所有文件的代码
2014/07/04 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
解决laravel中日志权限莫名变成了root的问题
2019/10/17 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
javascript操作cookie_获取与修改代码
2009/05/21 Javascript
传智播客学习之java 反射
2009/11/22 Javascript
原来Jquery.load的方法可以一直load下去
2011/03/28 Javascript
快速解决FusionCharts联动的中文乱码问题
2013/12/04 Javascript
二叉树先序遍历的非递归算法具体实现
2014/01/09 Javascript
jQuery检测鼠标左键和右键点击的方法
2015/03/17 Javascript
JS随机洗牌算法之数组随机排序
2016/03/23 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
JavaScript同源策略和跨域访问实例详解
2018/04/03 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
2019/02/20 jQuery
vue中使用mxgraph的方法实例代码详解
2019/05/17 Javascript
ES6中Symbol、Set和Map用法详解
2019/08/20 Javascript
Handtrack.js库实现实时监测手部运动(推荐)
2021/02/08 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
Python获取文件ssdeep值的方法
2014/10/05 Python
Python使用py2exe打包程序介绍
2014/11/20 Python
Python的Django REST框架中的序列化及请求和返回
2016/04/11 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
2017/03/16 Python
python如何对链表操作
2020/10/10 Python
python实现简单的学生管理系统
2021/02/22 Python
汤米巴哈马官方网站:Tommy Bahama
2017/05/13 全球购物
linux面试题参考答案(4)
2013/01/28 面试题
公司授权委托书
2014/04/04 职场文书
个人年终总结怎么写
2015/03/09 职场文书
教师节简报
2015/07/20 职场文书
2016春季小学开学寄语
2015/12/03 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS