用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 25 Python
python 判断参数为Nonetype类型或空的实例
Oct 30 Python
Python装饰器基础概念与用法详解
Dec 22 Python
解决nohup执行python程序log文件写入不及时的问题
Jan 14 Python
详解爬虫被封的问题
Apr 23 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
FFT快速傅里叶变换的python实现过程解析
Oct 21 Python
Python和Anaconda和Pycharm安装教程图文详解
Feb 04 Python
Django 自定义404 500等错误页面的实现
Mar 08 Python
pytorch实现线性回归以及多元回归
Apr 11 Python
Python 中random 库的详细使用
Jun 03 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下使用CURL方式POST数据至API接口的代码
2013/02/14 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
javascript+xml技术实现分页浏览
2008/07/27 Javascript
javascript 时间比较实现代码
2009/10/28 Javascript
js jquery数组介绍
2012/07/15 Javascript
jQuery 文本框得失焦点的简单实例
2014/02/19 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
简介JavaScript中getUTCMonth()方法的使用
2015/06/10 Javascript
js中flexible.js实现淘宝弹性布局方案
2020/06/23 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
基于JavaScript实现幸运抽奖页面
2020/07/05 Javascript
JS 自执行函数原理及用法
2019/08/05 Javascript
Node.js从字符串生成文件流的实现方法
2019/08/18 Javascript
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
Vue v-model组件封装(类似弹窗组件)
2020/01/08 Javascript
vue 页面回退mounted函数不执行的解决方案
2020/07/26 Javascript
python中的字典详细介绍
2014/09/18 Python
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
Python DataFrame设置/更改列表字段/元素类型的方法
2018/06/09 Python
python 数据提取及拆分的实现代码
2019/08/26 Python
Python字符串和正则表达式中的反斜杠('\')问题详解
2019/09/03 Python
python爬虫看看虎牙女主播中谁最“顶”步骤详解
2020/12/01 Python
全面解析CSS Media媒体查询使用操作(推荐)
2017/08/15 HTML / CSS
什么是makefile? 如何编写makefile?
2013/01/02 面试题
人力资源管理专业毕业生推荐信
2013/11/07 职场文书
化学学院毕业生自荐信范文
2013/12/17 职场文书
集体备课反思
2014/02/12 职场文书
电子商务求职信
2014/06/15 职场文书
刑事辩护授权委托书
2014/09/13 职场文书
思想政治表现评语
2015/01/04 职场文书
信仰纪录片观后感
2015/06/08 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
python turtle绘图命令及案例
2021/11/23 Python