使用Python的smtplib模块发送带附件的邮件

  上一篇文章《使用Python的smtplib模块发送简单邮件》介绍了调用smtplib模块发送包含简单内容的邮件,本文继续学习参考文献1中的发送带附件的邮件的示例代码,同时由于参考文献1中的带附件邮件中并没有邮件附件,而仅仅是邮件内容中关联的内嵌资源附件,本文结合参考文献2,实现发送带附件的电子邮件,代码主要参照参考文献1-2,里面有部分内容也不是太明白,只是记录测试过程及个人理解。
  参考文献1中提供的发送带附件的邮件的示例代码及其程序运行效果如下所示,除了之前文章中用到的发送邮件所需的类及函数之外,代码中用到的类及函数的说明如下所示:

序号类或函数说明
1MIMEMultipart用于定义邮件中不同类型的内容,根据参考文献3的介绍,MIMEMultipart(‘related’)类型除了可以携带各种附件外,还可以将其它内容以内嵌资源的方式存储在邮件中,而MIMEMultipart(‘alternative’)类型可以传送超文本内容
2attach将给定的 payload 添加到当前载荷中,本文中应该是指将带超文本内容的MIMEMultipart作为邮件主体内容加到邮件中。
3MIMEText用来创建主类型为 text 的 MIME 对象。
4open用于打开文件
5MIMEImage用于将实际图像数据编码以便传输
6add_header用于设置高级头字段
# coding=utf-8

import smtplib
from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart

sender='XXXXXXXX@qq.com'
password='XXXXXXXX'
to='XXXXXXXX@qq.com'

def mail():
    ret=True
    try:
        msg=MIMEMultipart('related')
        msg['From']=sender
        msg['To']=to
        msg['Subject']='通过SMTP协议发送带附件邮件测试'

        msgAlternative=MIMEMultipart('alternative')
        msg.attach(msgAlternative)
        mail_msg="""
        <p>邮件测试</p>
        <p><a ref="www.baidu.com">百度搜索</a></p>
        <p>图片演示:</p>
        <p><img src="cid:image1"></p>
        """
        msgAlternative.attach(MIMEText(mail_msg,'html','utf-8'))
        fp=open('test.jpg','rb')
        msgImage=MIMEImage(fp.read())
        fp.close()

        msgImage.add_header('Content-ID','<image1>')
        msg.attach(msgImage)

        server=smtplib.SMTP('smtp.qq.com')
        server.login(sender,password)

        server.sendmail(sender,to,msg.as_string())
        print(msg.as_string())
        server.quit()

    except Exception as e:
        ret=False
        print(e)
    return ret                     

if mail():
    print('邮件发送成功')
else:
    print('邮件发送失败')

在这里插入图片描述
  上述程序代码中所用的图片只是作为内嵌资源用于在邮件主体内容中调用,并非是发邮件时附带的、可以下载的附件。为在邮件中增加附件,基于参考文献2中的代码,将其中夹带附件的代码内嵌到参考文献1的示例代码之中,主要增加的内容如下。:

	    att = MIMEBase("application", "octet-stream")
        att.set_payload(open('test.jpg', "rb").read())
        att1.add_header("Content-Disposition", "attachment", filename=Header("test.jpg", "utf-8").encode())
        encoders.encode_base64(att)
        msg.attach(att)

  再调用发送邮件程序,即可将图片作为邮件附件一并发送,程序执行效果如下图所示:
在这里插入图片描述

参考文献:
[1]Python从菜鸟到高手
[2]https://blog.csdn.net/weixin_51424938/article/details/113795373
[3]https://blog.csdn.net/Winnycatty/article/details/84548381

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值