本文转自:http://blog.csdn.net/zm2714/article/details/7993732
可采用email模块发送电子邮件附件。发送一个未知MIME类型的文件附件其基本思路如下:
- 构造MIMEMultipart对象做为根容器
- 构造MIMEText对象做为邮件显示内容并附加到根容器
- 构造MIMEBase对象做为文件附件内容并附加到根容器
a. 读入文件内容并格式化
b. 设置附件头 - 设置根容器属性
- 得到格式化后的完整文本
- 用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.很少使用