首页 > 编程问答 >您好,我有一个关于仅使用 python 3.10 发送电子邮件附件的问题

您好,我有一个关于仅使用 python 3.10 发送电子邮件附件的问题

时间:2024-08-07 15:48:42浏览次数:14  
标签:python python-3.x

我在发送包含附件的电子邮件时遇到问题。我的电子邮件的内容类型似乎设置不正确,这导致附件无法正确附加。

这是我的电子邮件发送功能的片段:

python

复制代码

self.send( subject=self.subject 、recipients=self.recipients、html=""、text=""、attachments=self.attachments, )

函数 send 函数按如下方式处理附件:

python

复制代码

附件中的附件或 []: message.attachment(attachment)

attachment 方法确定附件是否内联:

python

复制代码

def attachment(self, attachment): if attachment.inline: self.make_related() else: self.make_mixed()

make_mixed 方法处理多部分内容类型:

python

复制代码

def make_mixed(self): if self.get_content_maintype() != "multipart": print("---inside------self.get_content_maintype()-", self.get_content_maintype()) self.set_content(MIMEMultipart("mixed")) elif self.get_content_subtype() != "mixed": print("---inside-----self.get_content_subtype()-", self.get_content_subtype()) mixed = MIMEMultipart("mixed") for part in self.get_payload(): mixed.attach(part) self.set_payload([mixed])

但是,当发送电子邮件时,内容类型为 message ,内容子类型为 rfc822 附件未按预期包含。

这里可能出了什么问题? 如何确保附件正确附加且内容类型设置正确?


问题出在 make_mixed 函数中。如果邮件已经是多部分邮件(例如,因为它已经有 HTML 或文本正文),正在创建一个新的多部分邮件,但没有递归地处理现有的部分。这会导致第一个多部分边界丢失,并且附件将无法被识别。

以下是经过更正的代码:

def make_mixed(self):
    if self.get_content_maintype() != "multipart":
        self.set_content(MIMEMultipart("mixed"))
    else:
        # 如果已经存在多部分消息,则将其封装到一个新的多部分/混合消息中
        if self.get_content_subtype() != "mixed":
            mixed = MIMEMultipart("mixed")
            for part in self.get_payload():
                mixed.attach(part)
            self.set_payload([mixed])

解释:

  1. 检查现有内容类型: 此代码首先检查邮件是否已经是多部分邮件。
  2. 创建新消息或封装现有消息:
  3. 如果不是多部分邮件,它将像以前一样创建一个新的 multipart/mixed 消息。
  4. 如果已经是多部分邮件,它会创建一个新的 multipart/mixed 消息 并将现有的邮件内容附加到新消息中 。这样可以确保所有现有的部分(例如 HTML 正文)和新的附件都包含在最终的邮件中。

通过此更改,的附件应该正确附加,并且内容类型应该正确设置为 multipart/mixed

标签:python,python-3.x
From: 78842440

相关文章

  • python+flask计算机毕业设计社区居民信息管理系统 (程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着城市化进程的加快,社区居民信息管理成为社区管理的重要组成部分。传统的社区管理方式存在信息更新不及时、管理效率低下等问题,难以满足......
  • Python安装教程(含MacOS&&Linux系统)
    Python安装教程Windows用户访问Python官网:WelcometoPython.org 打开下载好的安装包根据提示安装   Pip换源(系统级别)(注:Pip在3.4以上的版本才支持,3.4之前的版本可以在cmd中输入 easy_installpip 下载pip)1.为什么要换源?Python安装......
  • python
    字符串比较按位比较,有一位大,整体就大。函数多返回值正确:deftest_return():return1,2,3错误:return1return2函数的多种传参方式位置参数:关键字参数:函数调用时通过“键=值”的形式传递参数(传参顺序无所谓)eg:test(name="niu",age="19")缺省参数:举例说明:def......
  • 将普通 python 文件导入另一个文件时出现 AttributeError
    我是新手。我正在尝试将简单的python文件导入到我的主文件中。相同的代码在我的mac上工作,但在我的电脑上不起作用。我不断收到此错误消息。“AttributeError:模块‘logo’没有属性‘hammer_logo’”第一个文件拍卖.py代码importlogoprint(logo.hammer_logo)第......
  • 使用python读取mysql数据,并记录到本地的文件中
    上次写过一次读取sqlserver数据,写入本地文件。今天分享一下mysql的。原理相似,希望对大家有小小的帮忙PS,我是3.6.13版本python,上一版本用包mysql-connector,一直不成功,查询官方文档,发现这个版本的PYTHON简直是奇葩的存在了。基本所有版本都支持,就是几个小版本排除在外了。......
  • python合并音视频-通过moviepy模块合并音视频
    ......
  • esp32安装circuitpython
    安装Thonnyhttps://thonny.org/在Thonny中安装circuitpython在配置解释器中选择circuitython然后点击右下角“安装或更新...“variant这里我选择了DOITesp32DevelopmentBoard(试过其他的一些个,不知道为什么安装完之后会无限重启,所以最后选择了这个)烧录完之后,重新连接,Th......
  • 利用Python进行金融数据分析的全面指南【文末送书】
    文章目录Python金融数据分析技术文章Python金融数据分析【文末送书】Python金融数据分析技术文章金融数据分析在现代金融行业中扮演着至关重要的角色。通过使用Python编程语言,我们可以对大量金融数据进行处理、分析和可视化,从而获得有价值的洞察。本篇文章将介绍如何......
  • python和sliver交互
    开源第三方库:https://sliverpy.readthedocs.io/en/latest/getting-started.html#connect-example代码示例:importosimportasynciofromsliverimportSliverClientConfig,SliverClientCONFIG_PATH=os.path.join('../sliver/','moloch_127.0.0.1.cfg')......
  • 不写代码,这样使用Python seaborn、matplotlib
    今天分享一个PyQt5GUI工具,动动鼠标拖拽就使用Python的Matplotlib、Seaborn进行绘图,并导出高清PDF。sviewgui安装pip install sviewguisviewgui使用使用很简单,因为,他只有一个方法啊:buildGUI();下面以tips.csv数据和boxplot为例介绍sviewgui的使用。以下三种方法均可......