用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 (2)
Oct 31 Python
将Python中的数据存储到系统本地的简单方法
Apr 11 Python
python通过get,post方式发送http请求和接收http响应的方法
May 26 Python
使用Python判断质数(素数)的简单方法讲解
May 05 Python
用python处理图片实现图像中的像素访问
May 04 Python
Python2和Python3.6环境解决共存问题
Nov 09 Python
解决python 上传图片限制格式问题
Oct 30 Python
Python处理PDF与CDF实例
Feb 26 Python
PyCharm License Activation激活码失效问题的解决方法(图文详解)
Mar 12 Python
python中有帮助函数吗
Jun 19 Python
Python调用系统命令os.system()和os.popen()的实现
Dec 31 Python
python实现的web监控系统
Apr 27 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中显示格式化的用户输入
2006/10/09 PHP
PHP+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP微信分享开发详解
2017/01/14 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
jQuery中调用WebService方法小结
2011/03/28 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
js实现a标签超链接提交form表单的方法
2015/06/24 Javascript
原生js实现鼠标跟随效果
2017/02/28 Javascript
浅谈Node.js轻量级Web框架Express4.x使用指南
2017/05/03 Javascript
js合并两个数组生成合并后的key:value数组
2018/05/09 Javascript
了解JavaScript函数中的默认参数
2019/05/30 Javascript
微信小程序如何使用globalData的方法
2019/06/06 Javascript
《javascript设计模式》学习笔记一:Javascript面向对象程序设计对象成员的定义分析
2020/04/07 Javascript
Vue实现附件上传功能
2020/05/28 Javascript
彻底搞懂并解决vue-cli4中图片显示的问题实现
2020/08/31 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
[11:44]Ti9 OG夺冠时刻
2019/08/25 DOTA
详解Python字符串对象的实现
2015/12/24 Python
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
2019/01/29 Python
python logging模块书写日志以及日志分割详解
2019/07/22 Python
Python基于正则表达式实现计算器功能
2020/07/13 Python
详解移动端html5页面长按实现高亮全选文本内容的兼容解决方案
2016/12/03 HTML / CSS
W Concept美国:精选全球独立设计师
2017/02/22 全球购物
美国汽车零部件和配件网站:CarParts
2019/03/13 全球购物
服务行业个人求职的自我评价
2013/12/12 职场文书
婚庆公司的创业计划书
2014/01/22 职场文书
安全教育感言
2014/03/04 职场文书
护士实习求职信
2014/06/22 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
公司禁烟通知
2015/04/23 职场文书
运动员入场词
2015/07/18 职场文书
pytorch显存一直变大的解决方案
2021/04/08 Python