用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抓取百度首页的方法
May 19 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
Mar 30 Python
Django 反向生成url实例详解
Jul 30 Python
基于python分析你的上网行为 看看你平时上网都在干嘛
Aug 13 Python
Python中zip()函数的解释和可视化(实例详解)
Feb 16 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
python中time、datetime模块的使用
Dec 14 Python
去除python中的字符串空格的简单方法
Dec 22 Python
python保存大型 .mat 数据文件报错超出 IO 限制的操作
May 10 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 Python
Matplotlib可视化之添加让统计图变得简单易懂的注释
Jun 11 Python
linux中nohup和后台运行进程查看及终止
Jun 24 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
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
CI框架使用composer安装的依赖包步骤与方法分析
2016/11/21 PHP
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
jQuery中:nth-child选择器用法实例
2014/12/31 Javascript
javascript实现获取浏览器版本、操作系统类型
2015/01/29 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
jQuery原理系列-常用Dom操作详解
2016/06/07 Javascript
微信小程序 实现tabs选项卡效果实例代码
2016/10/31 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
js实现批量删除功能
2020/08/27 Javascript
js实现头像上传并且可预览提交
2020/12/25 Javascript
[00:15]TI9地铁玩家打卡
2019/08/11 DOTA
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
解析Python的缩进规则的使用
2019/01/16 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
Django DRF认证组件流程实现原理详解
2020/08/17 Python
详解Canvas 实现炫丽的粒子运动效果(粒子生成文字)
2018/02/01 HTML / CSS
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
黄色火烈鸟:De Gele Flamingo
2019/03/18 全球购物
美国单身专业人士在线约会网站:EliteSingles
2019/03/19 全球购物
美国婴儿服装购物网站:Gerber Childrenswear
2020/05/06 全球购物
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
ddl,dml和dcl的含义
2016/05/08 面试题
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
酒店财务部岗位职责
2015/04/14 职场文书
小学生安全保证书
2015/05/09 职场文书
2015年度环卫处工作总结
2015/07/24 职场文书
《小蝌蚪找妈妈》教学反思
2016/02/23 职场文书
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
2021/05/31 Python
SQL Server #{}可以防止SQL注入
2022/05/11 SQL Server