用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实现问号表达式(?)的方法
Nov 27 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
pycharm远程调试openstack的图文教程
Nov 21 Python
Python按钮的响应事件详解
Mar 04 Python
一文了解Python并发编程的工程实现方法
May 31 Python
浅谈Pytorch中的torch.gather函数的含义
Aug 18 Python
python3正则模块re的使用方法详解
Feb 11 Python
windows、linux下打包Python3程序详细方法
Mar 17 Python
Python BeautifulReport可视化报告代码实例
Apr 13 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
Appium+Python实现简单的自动化登录测试的实现
Jan 26 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中的file_get_contents获取远程页面乱码的问题
2013/06/25 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
Laravel5.5新特性之友好报错以及展示详解
2017/08/13 PHP
Javascript 获取滚动条位置等信息的函数
2009/09/08 Javascript
多种方式实现JS调用后台方法进行数据交互
2013/08/20 Javascript
B/S模式项目中常用的javascript汇总
2013/12/17 Javascript
javascript学习笔记(七)Ajax和Http状态码
2014/10/08 Javascript
javascript实现回到顶部特效
2015/05/06 Javascript
vue2.0实现倒计时的插件(时间戳 刷新 跳转 都不影响)
2017/03/30 Javascript
解决Extjs下拉框不显示的问题
2017/06/21 Javascript
vue2.0 根据状态值进行样式的改变展示方法
2018/03/13 Javascript
Angular入口组件(entry component)与声明式组件的区别详解
2018/04/09 Javascript
vue 路由嵌套高亮问题的解决方法
2018/05/17 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
原生JS实现获取及修改CSS样式的方法
2018/09/04 Javascript
Node.js操作MongoDB数据库实例分析
2020/01/19 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
Python 多线程抓取图片效率对比
2016/02/27 Python
Python Sql数据库增删改查操作简单封装
2016/04/18 Python
tf.truncated_normal与tf.random_normal的详细用法
2018/03/05 Python
python获取点击的坐标画图形的方法
2019/07/09 Python
Python PIL图片添加字体的例子
2019/08/22 Python
win10子系统python开发环境准备及kenlm和nltk的使用教程
2019/10/14 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
python连接PostgreSQL过程解析
2020/02/09 Python
大都会艺术博物馆商店:The Met Store
2018/06/22 全球购物
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
职称评定自我鉴定
2014/03/18 职场文书
代理协议书范本
2014/04/22 职场文书
小学生演讲稿大全
2014/04/25 职场文书
杭白菊导游词
2015/02/10 职场文书
指导教师推荐意见
2015/06/05 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书