为啥对我的 SMTP 发送的 gmail 邮件的回复没有线程化?

Posted

技术标签:

【中文标题】为啥对我的 SMTP 发送的 gmail 邮件的回复没有线程化?【英文标题】:Why are replies to my SMTP-sent gmail messages not threaded?为什么对我的 SMTP 发送的 gmail 邮件的回复没有线程化? 【发布时间】:2011-09-01 20:57:50 【问题描述】:

我正在使用以下 Python sn-p 通过 SMTP 发送许多类似的电子邮件:

def send(from_, to, body):
  server = smtplib.SMTP('smtp.gmail.com:587')
  server.ehlo()
  server.starttls()
  server.ehlo()
  server.login('michael@gmail.com', password)
  msg = '''\
From: %s
To: %s
Subject: %s

%s''' % (from_, to.encode('utf-8'), "Hello", body.encode('utf-8'))
  server.sendmail(from_, to, msg)
  server.quit()

这些消息是对话中的第一条消息。 Strangley,对这些消息的回复不会串接到原始消息的对话中。

回复在我的收件箱中作为单独的邮件返回,主题 =“回复:你好”,与原件没有联系。 (偶尔会有一个被正确穿线,这更奇怪。)

我已验证这些(非线程)回复有一个 References: 字段,该字段引用已发送邮件的 Message-ID 字段,该字段由 GMail 自动生成。

知道我做错了什么吗?

【问题讨论】:

【参考方案1】:

查看References: 标头。它包含线程中先前的Message-ID: 标头链,通常用于线程。自己指定Message-ID: 通常是个好主意,如果您跟踪以前使用过的,可以在References: 标头中使用它们来强制执行线程。

Message-ID 应该是全局唯一的。它们通常是这样构造的,但这不是必需的。

Message-ID: unixtimestamp.somerandomval@sending-hostname

【讨论】:

谢谢 Michael -- 我会尝试添加 Message-ID 标头。如果他们的线程正确,我会接受你的回答。 @Michael:谢谢。没有以前的消息:通过 SMTP 发送的唯一消息是发起对话的消息。其余的对话发生在 gmail 的网络界面中。 不幸的是,当我通过 SMTP 发送邮件时,我看到 GMail 会自动将 Message-ID 添加到我的邮件中;无论我是否明确指定,都不会更改传出消息。所以我认为这不是罪魁祸首。还有其他想法吗? 此外:未正确线程化的回复确实有一个 References: 标头,指的是最初发送的消息的消息 ID。 GMail 是否会被许多具有相同主题的类似电子邮件弄糊涂,并放弃尝试正确线程?

以上是关于为啥对我的 SMTP 发送的 gmail 邮件的回复没有线程化?的主要内容,如果未能解决你的问题,请参考以下文章

使用 .NET core 2.2 中的 MailKit SMTP 客户端通过 Gmail SMTP 发送邮件对我不起作用

使用 Gmail SMTP OAUTH 从 asp.net 发送电子邮件 [重复]

错误 SMTP 无法从 gmail 发送电子邮件

使用SMTP和Gmail在Django上发送电子邮件

在 django 中发送邮件 - gmail smtp 问题

无法通过 gmail 从新创建的电子邮件中使用 phpMailer 发送 SMTP 邮件 [重复]