用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基础教程之Hello World!
Aug 29 Python
python提示No module named images的解决方法
Sep 29 Python
Python序列之list和tuple常用方法以及注意事项
Jan 09 Python
Python中字典和集合学习小结
Jul 07 Python
python实现感知器算法详解
Dec 19 Python
在CMD命令行中运行python脚本的方法
May 12 Python
Python如何发布程序的详细教程
Oct 09 Python
python在html中插入简单的代码并加上时间戳的方法
Oct 16 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
pyqt 实现在Widgets中显示图片和文字的方法
Jun 13 Python
pandas的排序和排名的具体使用
Jul 31 Python
自动在Windows中运行Python脚本并定时触发功能实现
Sep 04 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
神族 PROTOSS 概述
2020/03/14 星际争霸
如何使用PHP中的字符串函数
2006/10/09 PHP
层叠菜单的动态生成
2006/10/09 PHP
PHP 远程文件管理,可以给表格排序,遍历目录,时间排序
2009/08/07 PHP
PHP实现视频文件上传完整实例
2014/08/28 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
PHP中的函数声明与使用详解
2017/05/27 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
基于jQuery的烟花效果(运动相关)点击屏幕出烟花
2012/06/14 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
每天一篇javascript学习小结(Date对象)
2015/11/13 Javascript
基于JavaScript实现回到页面顶部动画代码
2016/05/24 Javascript
AnjularJS中$scope和$rootScope的区别小结
2016/09/18 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
Centos6.8下Node.js安装教程
2017/05/12 Javascript
利用node.js实现自动生成前端项目组件的方法详解
2017/07/12 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
layui关闭层级、简单监听的实例
2019/09/06 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
Python 异常处理实例详解
2014/03/12 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
Python使用matplotlib绘制正弦和余弦曲线的方法示例
2018/01/06 Python
python 自定义对象的打印方法
2019/01/12 Python
Python2.7实现多进程下开发多线程示例
2019/05/31 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
python如何修改文件时间属性
2021/02/05 Python
CSS3制作彩色进度条样式的代码示例分享
2016/06/23 HTML / CSS
CSS3实现背景透明文字不透明的示例代码
2018/06/25 HTML / CSS
三只松鼠官方旗舰店:全网坚果销售第1
2017/11/25 全球购物
Collection和Collections的区别
2016/05/02 面试题
电气专业推荐信范文
2013/11/18 职场文书
幼儿园中班个人总结
2015/02/28 职场文书
地道战观后感
2015/06/04 职场文书