[Python]为什么电子邮件 pdf 附件在 Outlook/Thunderbird 上不显示,而在 Gmail 上却显示? (从Python环境发送)

2024-03-01

我刚刚加入了一个项目,并一直试图弄清楚为什么某些电子邮件在 Gmail 上按应有的方式显示,但是当我使用 Thunderbird 或 Outlook 等客户端打开时,附加的 PDF 现在会显示。 作为附加细节,如果我将邮件从 Thunderbird/Tutlook 转发到 Gmail 帐户,则会显示附加的 pdf,如果我将其发送回 Thunderbird/Outlook 连接的帐户,它会再次出现,因此 Gmail 修复了代码中的错误。

这是我第二次处理电子邮件,第一次主要是复制一些代码来看看它是否有效,所以如果您除了帮助我修复它之外还愿意向我解释它,我将非常感激。 我将在此处发布代码,然后添加一些关于我在下面尝试的内容的附加信息,以使其更加清晰。 所以,这是代码:

from email.message import EmailMessage
from email import encoders
from email.mime.base import MIMEBase
import smtplib



msg = EmailMessage()
msg['Subject'] = subject
msg['From'] = "someaddress"
msg['To'] = user_email
msg.set_content('Certification')
msg.add_alternative("""<!DOCTYPE html>
        <html>
            <body>
                Stuff...
            </body>
        </html>
        """, subtype='html')

filename = 'somefilename'
pdf_filename = 'certificate.pdf'
with open(filename, "rb") as attachment:
    part = MIMEBase("application", "octet-stream")
    part.set_payload(attachment.read())

encoders.encode_base64(part)
part.add_header(
    "Content-Disposition",
    "attachment", filename=pdf_filename
)
try:
    msg.attach(part)
    with smtplib.SMTP('someIP', port) as smtp:
        smtp.send_message(msg)

我之前见过一些类似的问题(或者实际上是相同的问题),一些解决方案建议使用 MIMEMultipart 混合消息对象而不是电子邮件对象,如下所示:msg=MIMEMultipart('mixed')代替msg = EmailMessage()但因为 add_alternative 不是 MIMEMultipart 方法,所以如果不更改该部分,我就无法做到这一点。 (以上建议是在这个帖子 https://stackoverflow.com/questions/41639660/outlook-and-thunderbird-do-not-receive-attachment-when-i-send-from-python-using- 这与我的问题完全相同,但不幸的是我无法使用相同的修复)

我尝试做的是打电话msg.make_mixed() below msg=Email.Message()希望混合类型(我还不了解电子邮件类型)能够解决问题,但是当我尝试以这种方式发送电子邮件时,我得到了 Status=4,无法发送文件,错误。

如果您能为资源提供任何建议,以了解有关发送和接收电子邮件的更多信息(从 python 角度来看),我也将非常感激。

谢谢你!


这里的问题是你直接attached多部分/替代消息的预构建 MIME 部分。它以错误消息结束,邮件阅读器可能无法很好地处理该消息。

在 email.message 接口中,您应该使用add_attachement方法。它将处理 base64 编码并将消息更改为多部分/混合消息:

with open(filename, "rb") as attachment:
    msg.add_attachment(attachment.read(), maintype='application',
           subtype='octet-stream', filename=pdf_filename)

try:
    with smtplib.SMTP('someIP', port) as smtp:
        smtp.send_message(msg)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Python]为什么电子邮件 pdf 附件在 Outlook/Thunderbird 上不显示,而在 Gmail 上却显示? (从Python环境发送) 的相关文章

随机推荐

  • jsPDF with Cordova - 添加图像

    我正在尝试使用 jsPDF 库生成 PDF https github com MrRio jsPDF https github com MrRio jsPDF 从移动 Cordova 应用程序中 我目前正在 Android 4 0 4 设备
  • Java反射带参数的私有方法最好的方法是什么?

    我正在尝试使用java反射调用私有方法我开发了一个小方法来调用其他方法迭代所有方法并按名称和参数类型进行比较我已成功调用4个方法 我有一个问题 1 这是最好的方法吗 因为我知道 class getMethod 仅匹配公共方法 Java有内置
  • 停止 ReSharper 添加注释

    我在我的 C 项目中使用 ReSharper 总的来说我很喜欢它 但是 当我执行某些重构操作时 它会不断向代码添加注释 例如 它添加了 NotNull 当我使用 检查参数是否为空 上下文操作时 Before context action p
  • SQL 连接:选择一对多关系中的最后一条记录

    假设我有一张客户表和一张采购表 每次购买都属于一位客户 我想获得所有客户的列表以及他们最后一次购买的商品SELECT陈述 最佳实践是什么 关于建立索引有什么建议吗 请在您的答案中使用这些表 列名称 顾客 id name 购买 id cust
  • Apache Camel 路由中的 Spring Boot 属性使用

    是否可以在 Apache Camel 路由中使用 Spring Boot 属性 Value 工作正常 但这是否可以直接放置表达式的占位符 Update 我知道 PropertiesComponent 但这将是除了我不喜欢的 Applicat
  • 根据时间/时间表交换 div 可见性

    在我的页面上 我有两个 div 一个 div 我希望从上午 10 点到下午 6 点 服务器时间 可见 而另一个 div 在剩余时间内可见 我尝试了一系列搜索来找到某种 javascript 或 jquery 内容交换器 但没有任何运气 感谢
  • 无法终止容器::尝试终止容器,但未收到退出事件

    我无法停止 删除或终止我的 docker 容器 下面给出的命令及其各自的错误消息 1 docker stop
  • 创建存储过程时是否需要“definer”?

    我已经将所有 MySQL 过程编写为root localhost CREATE DEFINER root localhost PROCEDURE p add user 问题是 当部署到另一台服务器时 我必须替换root与当前用户并替换loc
  • 奇怪的程序集名称从手机访问网站时出错

    我有一个用 Asp net MVC 制作的网站 它安装在共享托管环境的根目录中 现在 我已经在 Asp net MVC 中为该网站制作了一个移动版本 并将其安装为子域http m price tag org http m price tag
  • 有人可以解释 BCrypt 如何验证哈希吗?

    我正在使用 C 和 BCrypt Net 来哈希我的密码 例如 string salt BCrypt Net BCrypt GenerateSalt 6 var hashedPassword BCrypt Net BCrypt HashPa
  • 字符串数组是可变的吗?

    我想知道Java中的字符串数组是否是可变的 我知道字符串是不可变的 但是字符串数组怎么样 如果我有一个字符串数组 并更改内容 是否会创建一个新的字符串对象 或者实际值会改变吗 提前致谢 The Strings 包含在String 确实是不可
  • 从 React Native 中解析的对象数组中渲染图像源

    我正在构建一个反应本机应用程序 它假设使用一些 元数据 对象作为源 我正在解析数组中的每个对象并为每个对象返回一个 JSX 布局item 我遇到的唯一问题是如何提供图像来源 因为我将它们存储在本地并且需要require link 他们 我的
  • React Router - 刷新后保持在同一页面

    我正在学习反应 我有一个包含 4 个子页面的页面 我使用 React Router 来浏览这些页面 除了重新加载页面之外 一切正常 当我从页面 主页 转到 关于 或其他页面时 这是可以的 但是当我刷新页面时 它会再次渲染页面 关于 一秒钟
  • 浏览器关闭时的通知

    我有一个 chrome 扩展 当用户访问特定页面时 它会向用户发送通知 我希望在浏览器关闭或在后台运行时发送通知 类似于智能手机 任何想法或提示都会很棒 在 Chrome 扩展中 您可以使用 2 个工具 chrome gcm API htt
  • 如何在 C# 中获取目录大小(目录中的文件)?

    我希望能够使用 C 获取本地目录之一的大小 我试图避免以下情况 伪代码 尽管在最坏的情况下我将不得不解决这个问题 int GetSize Directory int Size 0 foreach File in Directory File
  • 缩放到点和从点缩放

    我正在尝试将 DisplayObject 缩放到某个点 我认为这很容易 但我现在花了一天时间试图弄清楚 基本上我认为这个should工作 强调应该 newPoint is the point being centered There is
  • 如何将音频文件从 iPhone 文档文件夹上传到服务器

    我正在录制语音并将其保存到iphone文件夹中 但我想将其上传到服务器 那么如何执行此操作 NSString path NSString stringWithFormat Documents wav NSHomeDirectory pati
  • 在 ASP 和 VB 中动态添加文本文件到 DDL

    我希望通过动态更新来更新我的 DDL 功能之一 这样如果用户添加更多文件 下拉列表就会选择它 目前我的下拉列表是从VB代码后面拉出来的 如下所示 Public Sub DDL SelectedIndexChanged sender As O
  • 在 C# 中创建 .csv 文件

    好吧 我想用 C 创建一个 csv 文件 我环顾四周 发现很多人都在使用 system IO memorystream 和 system io streamwriter 问题是这样的 我有一个网络应用程序 我想让用户能够导出到 Excel
  • [Python]为什么电子邮件 pdf 附件在 Outlook/Thunderbird 上不显示,而在 Gmail 上却显示? (从Python环境发送)

    我刚刚加入了一个项目 并一直试图弄清楚为什么某些电子邮件在 Gmail 上按应有的方式显示 但是当我使用 Thunderbird 或 Outlook 等客户端打开时 附加的 PDF 现在会显示 作为附加细节 如果我将邮件从 Thunderb