前言

最近一些小伙伴,在搞邮箱的事情,小编于是去折腾了一下!总结了一些干货,与大家分享一下!速来,抱大腿,我要开车了!

基本思路就是,使用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邮箱,收到这个声明后,会根据文件扩展名来猜测。
废话不多说,上代码:
#coding=utf-8
import smtplib
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart
_user = "9759***16@qq.com"
_pwd = "vaz*****yzabebf" #服务器授权码(在qq邮箱设置里找到账户里的smtp服务,然后开启,会生成服务器授权码!)
_to = "224***497@qq.com"
msg = MIMEMultipart()
msg["Subject"] = "测试一下" #邮件标题
msg["From"] = _user
msg["To"] = _to

文字部分

part = MIMEText("你好")
msg.attach(part)

附件部分

xlsx类型附件

part = MIMEApplication(open('D:\\Tyrone.xlsx','rb').read())
part.add_header('Content-Disposition', 'attachment', filename="Tyrone.xlsx") #这边的filename随便写,完全看你心情,但是后缀的格式一定要统一
msg.attach(part)

jpg类型附件(png类型和jpg一样)

part = MIMEApplication(open('D:\\Tyrone.jpg','rb').read())
part.add_header('Content-Disposition', 'attachment', filename="Tyrone.jpg")
msg.attach(part)

pdf类型附件

part = MIMEApplication(open('D:\\Tyrone.pdf','rb').read())
part.add_header('Content-Disposition', 'attachment', filename="Tyrone.pdf")
msg.attach(part)

mp3类型附件

part = MIMEApplication(open('D:\\Tyrone.mp3','rb').read())
part.add_header('Content-Disposition', 'attachment', filename="Tyrone.mp3")
msg.attach(part)

html类型

part = MIMEText('<html><h1>你好!</h1></html>','html','utf-8')
msg.attach(part)

try:
s = smtplib.SMTP_SSL("smtp.qq.com", 465) #连接smtp邮件服务器,端口默认是25,所有这边也可以写成("smtp.qq.com")
s.login(_user, _pwd) #登陆服务器
s.sendmail(user, _to, msg.as_string()) #发送邮件
s.quit()
print "完美!"
except smtplib.SMTPException,e:
print "失败!"

最新文章

  1. openstack-swift云存储部署(二)
  2. 19-ES6(2)
  3. Zookeeper 的学习与运用
  4. tcp/ip http socket笔记
  5. Webstorm 2016内置web服务器配置
  6. iOS UIAlertView添加输入框
  7. ios中@class和 #import,两种方式的讨论
  8. Color About——First
  9. strcmp() Anyone?
  10. openstack手动部署简单记录
  11. vue-cli2.9.1如何自动打开浏览器及实现手机调试
  12. KFold,StratifiedKFold k折交叉切分
  13. MYSQL的安全模式:sql_safe_updates介绍
  14. [Swift]LeetCode179. 最大数 | Largest Number
  15. Petrozavodsk Winter Camp, Day 8, 2014, Fine Brochures
  16. 利用IO和File类实现拷贝文件目录问题
  17. 电子书转换为PDF格式
  18. NodeJs加载站点的所有页面不存在则404
  19. Flume连接oracle实时推送数据到kafka
  20. MMU实验

热门文章

  1. 【转】V8 之旅: 垃圾回收器
  2. 基于SDN的IP RAN网络虚拟化技术
  3. 【题解】CQOI2007余数求和
  4. ZOJ 3229 Shoot the Bullet | 有源汇可行流
  5. JSONP以及Spring对象MappingJacksonValue的使用方式
  6. oralce的客户端sqlplus
  7. kettle基础操作
  8. codevs 3305 水果姐逛水果街Ⅱ&amp;&amp;codevs3006
  9. 关于dlib人脸对比,人脸识别
  10. bzoj 1297 矩阵乘法变形