Python发送带附件的邮件

本文转自: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 smtplib
import os.path
import mimetypes
import email.MIMEText
import email.MIMEBase
import email.MIMEImage
import email.MIMEMultipart


From = "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'] = To
main_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.很少使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值