Python发送带附件的邮件

来源:互联网 发布:centos kali双系统 编辑:程序博客网 时间:2024/05/18 13:44

本文转自:http://blog.csdn.net/zm2714/article/details/7993732

可采用email模块发送电子邮件附件。发送一个未知MIME类型的文件附件其基本思路如下:

  1. 构造MIMEMultipart对象做为根容器
  2. 构造MIMEText对象做为邮件显示内容并附加到根容器
  3. 构造MIMEBase对象做为文件附件内容并附加到根容器
      a. 读入文件内容并格式化
      b. 设置附件头
  4. 设置根容器属性
  5. 得到格式化后的完整文本
  6. 用smtp发送邮件
# -*- coding: utf-8 -*-  import smtplibimport os.pathimport mimetypesimport email.MIMETextimport email.MIMEBaseimport email.MIMEImageimport email.MIMEMultipartFrom = "13137082108@163.com"To = "1820201926@qq.com"file_name = "/home/xushukui/xsk/xsk123.png.jpeg"#附件名server = smtplib.SMTP("smtp.163.com")server.login("13137082108@163.com","xxxx") #仅smtp服务器需要验证时(账号,密码)# 构造MIMEMultipart对象做为根容器main_msg = email.MIMEMultipart.MIMEMultipart()# 构造MIMEText对象做为邮件显示内容并附加到根容器text_msg = email.MIMEText.MIMEText("this is a test text to text mime",_charset="utf-8")main_msg.attach(text_msg)# 构造MIMEBase对象做为文件附件内容并附加到根容器  ctype,encoding = mimetypes.guess_type(file_name)if ctype is None or encoding is not None:    ctype='application/octet-stream' maintype,subtype = ctype.split('/',1)#分割返回两个值#print maintype,subtype (可以输出看看)file_msg=email.MIMEImage.MIMEImage(open(file_name,'rb').read(),subtype)print ctype,encoding  #火狐会将jpg、jpeg翻译成image/jpeg,png翻译成image/png## 设置附件头basename = os.path.basename(file_name)#os.path.basename(path) #返回文件名 #Content-disposition就是当用户想把请求所得内容存为一个文件的提供一个默认的文件名file_msg.add_header('Content-Disposition','attachment', filename = basename)#修改邮件头main_msg.attach(file_msg)# 设置根容器属性 main_msg['From'] = From  main_msg['To'] = Tomain_msg['Subject'] = "attach test "main_msg['Date'] = email.Utils.formatdate( )# 得到格式化后的完整文本  fullText = main_msg.as_string( )  # 用smtp发送邮件  try:    server.sendmail(From, To, fullText)  finally:    server.quit()#application/octet-stream#1.只能提交二进制,而且只能提交一个二进制,#如果提交文件的话,只能提交一个文件,后台接收参数只能有一个,而且只能是流(或者字节数组)#2.属于HTTP规范中Content-Type的一种#3.很少使用
原创粉丝点击