准备:
主要是对SMTP和MIME的熟悉对我帮助很大的帖子链接:
主要的思路就是:
1、写好SMTP组要的服务端口
2、创建邮件根容器
3、创建邮件头部
4、创建邮件正文
5、创建邮件附件容器并添加到根容器
6、连接SMTP并校验 发送邮件
一定要注意各个邮件服务商的不同(qq需要的密码是授权码,百度一下就好)
开始:
#coding=utf-8
import sys
reload(sys)
sys.setdefaultencoding('utf8')
#-----------------------------------以上为控制编码方式
import smtplib #引入SMTP协议包
from email.mime.text import MIMEText
from email.header import Header
from email.mime.multipart import MIMEMultipart #创建包含多个部分的邮件体
from email.mime.base import MIMEBase #添加附件(附件内容并附加到根容器 )
from email.mime.image import MIMEImage
import os.path #分析路径
from email import Encoders
#这里添加图片不可以像html一样写路径,任何邮件都会屏蔽掉这些路径,
# 要像附件一样添加然后给予编号,引用编号即可
#-------------------设置发送者和接收者---------------
sender = "**********@qq.com"
password = "**********"
receiver = "**********@qq.com"
#--------------------邮件服务与端口信息----------------------
smtp_server = "smtp.qq.com"
smtp_port = 465 #qq的SMTP端口465
msg = MIMEMultipart('related') ##采用related定义内嵌资源的邮件体
#-------------------构建邮件内容--------------------
#-------------------读入图片文件并编号--------------------
img_file = open('C:\Users\***\Desktop/1.png',"rb")
img_data = img_file.read()
img_file.close()
img = MIMEImage(img_data)
img.add_header('Content-ID', '0') #正常附件的header是不同的
msg.attach(img)
#------------------邮件头部信息-------------------------
msg["From"] = Header("*********^*^", "utf-8")
msg["To"] = Header(receiver, "utf-8")
msg["Subject"] = Header("来自Python SMTP的问候...", "utf-8")
#-----------------将图片作为正文内容添加-------------------
message = MIMEText("<p>Python 邮件发送测试...</p><p>这是html代码</p><img src='cid:0'/>","html","utf-8") #plain表示纯文本
msg.attach(message)
#-----------------构造附件-------------------------------
#------------------附件信息----------------------------
contype = 'application/octet-stream'
maintype, subtype = contype.split('/', 1)
#------------------- 构建附件体-------------------
data = open('C:\Users\***\Desktop/resources_cn.jar', 'rb') #打开附件
file_msg = MIMEBase(maintype, subtype)
file_msg.set_payload(data.read()) #将内容添加到附件体内
data.close()
Encoders.encode_base64(file_msg) # 主要是处理图片的时候有很大用处 , 不然图片会有问题
basename = os.path.basename('C:\Users\***\Desktop/resources_cn.jar') #解析附件地址 , 返回最后的文件名
file_msg.add_header('Content-Disposition','attachment', filename = basename)
msg.attach(file_msg) #添加到根容器
#--------------------添加第二个附件---------------------------
data = open('C:\Users\yueyong\Desktop/1.png', 'rb') #打开附件
file_msg = MIMEBase(maintype, subtype) #构建附件体
file_msg.set_payload(data.read()) #将内容添加到附件体内
data.close()
Encoders.encode_base64(file_msg) # 不然图片会有问题
basename = os.path.basename('C:\Users\***\Desktop/1.png') #返回最后的文件名
file_msg.add_header('Content-Disposition','attachment', filename = basename)
msg.attach(file_msg)
#------------------发送邮件----------------------------
try:
smtpObject = smtplib.SMTP_SSL(smtp_server , smtp_port) #qq必须要用.SMTP_SSL
smtpObject.login(sender , password)
smtpObject.sendmail(sender , [receiver] , msg.as_string()) #message.as_string()是将MIMEText对象变成字符串
print "发送成功"
except smtplib.SMTPException :
print ("发送失败!")
smtpObject.quit()
注释挺多的
小白望各位看官大神指点12