python SMTP 发送带图片带附件的html的QQ邮件

准备:

  主要是对SMTP和MIME的熟悉对我帮助很大的帖子链接:

https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832745198026a685614e7462fb57dbf733cc9f3ad000

主要的思路就是:

     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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值