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

news2024/9/19 10:56:34

  上一篇文章《使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

哪款半入耳式蓝牙耳机音质好?音质比较好的半入耳式蓝牙耳机推荐

半入耳式的蓝牙耳机相比入耳式的要舒适许多&#xff0c;佩戴更加的舒适透气&#xff0c;近年来&#xff0c;市面上的蓝牙耳机鱼龙混杂&#xff0c;人们选购蓝牙耳机对音质有一定的要求&#xff0c;下面是我整理的四款音质高的半入耳式蓝牙耳机&#xff0c;可以参考参考。 一、…

[carla入门教程]-1 安装carla环境

本专栏教程将记录我从安装carla到调用carla的pythonAPI进行车辆操控的全流程,带领大家从安装carla开始,到最终能够熟练使用carla仿真环境进行传感器数据采集和车辆控制. 第一节 carla 仿真环境的安装 准备工作: 在本节教程之前,需要大家安装ubuntu18.04以上的系统,并且安装对…

【MATLAB教程案例33】基于高斯混合模型的视频背景提取算法的matlab仿真实现

FPGA教程目录 MATLAB教程目录 本课程学习成果预览(左图是原始视频,右图是背景提取结果) 目录 1.软件版本 2.基于高斯混合模型的视频背景

顺序表和链表

顺序表和链表1.线性表2.顺序表2.1 概念和结构2.2 接口实现2.3 顺序表的问题及思考3.链表3.1 链表的概念和结构3.2 链表的分类3.3 链表的实现3.4 双向链表的实现4. 顺序表和链表的区别和联系1.线性表 线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使…

Qt 添加第三方字体库

Qt字体库默认主持操作系统所有的字体库&#xff0c;但是设计师一般喜欢比如思源字体&#xff0c;但是咱们的操作系统没有安装&#xff0c;在其他没有安装第三方字体库的电脑上运行&#xff0c;就达不到设计师最初设计的观感。这篇博客介绍Qt如何第三方字体库&#xff0c;以思源…

HTML【基础篇】

HTML【基础篇】&#x1f34e;一.HTML结构&#x1f352;1.1认识HTML标签&#x1f352;1.2HTML文件基本结构&#x1f352;1.3标签层次结构&#x1f352;1.4快速生成代码框架&#x1f34e;二.HTML常见标签&#x1f352;1.1注释标签&#x1f352;1.2标题标签&#xff08;h1-h6&…

用ADSelfService Plus更新Windows缓存的凭证

研究显示&#xff0c;帮助台技术员收到的所有电话中高达30%是因为遗忘了密码。当帮助台技术员处理大量此类电话时&#xff0c;对于来自远程的用户请求就无能为力了。这些用户使用本地缓存的Active Directory凭证来登录其机器。当该用户离开办公室时&#xff0c;帮助台技术员无法…

京东云开发者|ElasticSearch降本增效常见的方法

Elasticsearch在db_ranking 的排名又&#xff08;双叒叕&#xff09;上升了一位,如图1-1所示;由此可见es在存储领域已经蔚然成风且占有非常重要的地位。 随着Elasticsearch越来越受欢迎&#xff0c;企业花费在ES建设上的成本自然也不少。那如何减少ES的成本呢&#xff1f;今天…

某大厂软件测试岗一面笔试题+二面问答题面试经验分享

目录 某大软件测试厂笔试题 选择题 二面 某大软件测试厂笔试题 判断题(Y对&#xff0c;N错) 1.软件测试的目的是尽可能多的找出软件的缺陷。(Y) 2.Beta测试是验收测试的一种。(Y) 3.验收测试是由最终用户来实施的。(N) 4.项目立项前测试人员不需要提交任何工件。(Y) 5…

20 | 如何处理normal.mod not found

目录1 现象2 解决思路2.1 通过命令修复2.2 通过工具修复2.3 通过快照还原3 实际操作3.1 通过命令修复3.1.1 ls3.1.2 ls (hd0,X)/3.1.3 执行命令3.1.4 其他命令3.2 通过工具修复3.2.1 通过liveCD模式3.2.2 安装Boot-Repair3.2.3 修复3.3 通过快照还原1 现象 提示&#xff1a;ER…

YOLO9000: Better, Faster, Stronger (Yolov2)论文详细解读

目录前言1. Better&#xff08;更准&#xff09;2. Faster&#xff08;更快&#xff09;3. Stronger&#xff08;更壮&#xff09;前言 对应YOLOv1论文解读&#xff1a;You Only Look Once: Unified, Real-Time Object Detection&#xff08;Yolov1&#xff09; 论文详细解读 …

带你着手「Servlet」

⭐️前言⭐️ 有了前边文章为我们奠定下的网络基础&#xff0c;我们就可以开始学习Servlet的知识了&#xff0c;在部署一个Java的Servlet程序时&#xff0c;必须要有的开发工具是Tomcat,需要自行完成Tomcat的配置&#xff0c;并掌握maven仓库的配置方法&#xff0c;下边我们也…

windows下搭建mindspore的编译环境

rugwindows 10下安装mindpsore环境&#xff0c;需要visual studio 2019及以上&#xff0c;cmake, python 也可以从上面下载mindspore编译依赖的软件。 visual studioan安装时需注意 然后再安装cmake,git&#xff0c;安装好之后设置检查环境变量&#xff0c;缺失的要补上 系统…

WEB静态网页设计与制作——我的美丽家乡邢台

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

【数据结构】顺序表OJ

文章目录0. 前言1. 移除元素2. 删除有序数组中的重复项3. 合并两个有序数组4. 结语0. 前言 在上篇博客中&#xff0c;我们使用C语言实现了顺序表。其中我们也对顺序表的接口进行了完整的实现。但是光实现不够&#xff0c;还是需要题目来练习。于是今天我就为大家带来顺序表的三…

【雷达仿真 | FMCW TDMA-MIMO毫米波雷达信号处理仿真(可修改为DDMA-MIMO)】

本文编辑&#xff1a;调皮哥的小助理 本文引用了CSDN雷达博主XXXiaojie的文章源码&#xff08;https://blog.csdn.net/Xiao_Jie1&#xff09;&#xff0c;加以修改和注释&#xff0c;全面地、详细地阐述了FMCW TDM-MIMO毫米波雷达的工作原理&#xff0c;同时配套MATLA仿真实现方…

kubernetes

目录 一、容器云发展及主要内容 1、云平台计算,交付标准&#xff08;iaas-----openstack&#xff09; 2、平台即服务(PAAS&#xff09; 3.软件及服务(SAAS) 特点 二、内容 三、kubernetes集群架构与组件 基本组件 (1)Pod&#xff08;最小的资源单位&#xff09; (2)初…

信息系统综合测试与管理__软件测试

一 概念 软件测试是使用人工或者自动手机来运行或测试某个系统的过程&#xff0c; 目的是检测是否满足需求或者比较预期与实际的差别。 软件测试应该覆盖整个开发、维护过程&#xff0c; 不仅仅是编码阶段完成之后进行的一项活动。 常考的软件测试工具为LoadRunner, 是一种…

RHCE——分区、创建逻辑卷

1.创建一个逻辑卷 请按下列要求创建一个新的逻辑卷&#xff1a; 创建一个名为 datastore 的卷组&#xff0c;卷组的大小为4G 逻辑卷的名字为 database ,所属卷组为 datastore,该逻辑卷大小为3G 将新建的逻辑卷格式化为 xfs 文件系统&#xff0c; 2.通过自动挂载将该逻辑卷到/v…

机器学习笔记 十五:随机森林(Random Forest)评估机器学习模型的特征重要性

随机森林1. 随机森林介绍1.1 租赁数据案例2. 特征相关性分析&#xff08;热图&#xff09;2.1 热图绘制2.2 构建随机森林模型2.3 不同特征合并的重要性2.3.1 经纬度合并&#xff08;分3类&#xff09;2.3.2 经纬度合并&#xff08;分2类&#xff09;2.3.3 经纬度合并&#xff0…