【问题标题】:What's the easiest/cleanest way to get the MessageID of a sent email?获取已发送电子邮件的 MessageID 的最简单/最干净的方法是什么?
【发布时间】:2011-03-29 02:40:52
【问题描述】:

我想保存已发送电子邮件的 MessageID,以便稍后在 References: 标头中使用它以促进线程处理。

我在 root/django/trunk/django/core/mail.py(第 ~55 行)中看到创建 MessageID 的位置。

我试图想出收集这个值的最佳方法,而不是仅仅复制/粘贴到一个新的后端模块并返回它。也许这是最好的方法?

【问题讨论】:

  • 欢迎来到 Stack Overflow。由于您已经解决了问题并记录了答案,请接受该答案作为您问题的答案。这样其他居民就知道您在这个问题上不需要任何帮助了。

标签: python django email-headers


【解决方案1】:

并非所有后端实际上都支持声明消息 ID(例如,SES 设置它自己的消息 ID 并在其发送响应中返回它)。如果您使用较新的(大约 1.1?)EmailMessage 类,您实际上可以提取返回/生成/设置的消息 ID,您可以在调用 .send() 后从实例中提取返回的消息 ID,例如:

e=EmailMessage(
            subject,
            content,
            from_email,
            recipient_list,
            headers = headers,
        )
 e.send()
 message_id = e.extra_headers.get('Message-Id',None)

【讨论】:

  • recipient_list 有多个 email id 时如何工作。我们应该为不同的收件人获取不同的 message_id。
  • 多个收件人都将具有相同的邮件 ID,因为您不会(即使在 SMTP 级别)创建多封邮件,而是创建一封邮件,并且 SMTP 协议会处理将该邮件复制到多个收件人.我已经用 SES 测试并确认了。
  • 我无法让 EmailMessage 工作,变量中没有 message_id。我搬到了 boto,它正确返回 message_id 并且 (message_id, email) 是我的唯一键。但是我失去了使用 SMTP 而不是使用 API 的效率。
  • 不适用于我的 Django 设置,返回的 id 是 None
  • django 中包含的邮​​件后端的当前代码中没有任何内容处理消息 ID。除了 3rd-party 后端,这不应该工作
【解决方案2】:

好的,我看到我正在浏览可悲的旧代码。在调用 send 之前,我应该能够调用 django.core.mail.message.make_msgid() 并自己填充标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2011-12-02
    • 2011-04-20
    • 1970-01-01
    相关资源
    最近更新 更多