SMTP回复方法

本文关键字:方法 回复 SMTP | 更新日期: 2023-09-27 17:57:32

我正在创建一个WebMail客户端,但我有一个问题
如果只使用SMTPClient,发送邮件很容易,但我该如何发送回复,例如,如果用户决定回复消息,它基本上只是复制旧的正文并将其附加到我要发送的新正文中,还是什么是回复消息的更好方法

所以我最想做的就是

MailAddress replyto = new MailAddress("reply@whosoever.something");
replyto.What? = recievedmessage ID? (wich I get from my Imap Library)
replyto.Headers["whatgoeshere"] = recievedmessage ID? (wich I get from my Imap Library)

SMTP回复方法

首先,回复消息应该做以下事情(这些都是约定,而不是其他任何事情):

  1. 如果已设置,则应将回复消息的To标头设置为原始消息的Reply-To值,否则应设置为From
  2. 回复消息的Subject标头应设置为原始消息的Subject标头的值,但要使用"Re: "前缀(除非它已经有前缀)
  3. 回复消息的In-Reply-To标头应设置为原始消息的Message-Id标头值
  4. 应将回复消息的References标头设置为原始消息的References标头值,并在其后面附加原始消息的Message-Id

这样就可以处理标题了。对于邮件正文,这将取决于您回复的邮件正文是text/plain格式还是text/html格式。

由于text/html消息没有真正的约定,因此我将解释text/plain回复的约定。

通常,作为电子邮件客户端的作者,您所做的是构建以下格式的默认回复文本主体:

On ${TIMESTAMP}, ${AUTHOR_NAME} wrote:

然后是原始消息文本,每行前缀为"> "(大于空格)。

根据邮件客户端的不同,${TIMESTAMP}字符串的格式会有所不同,但它通常与原始消息的Date标头的格式大致相同。

当然,作者的名字取自From标题中解析的电子邮件地址。

如果你是自动生成邮件回复,那么在"引用"的原始邮件正文文本(通常被称为顶部帖子)之前添加回复文本可能是最简单的,但有些人在手动回复时也会使用其他样式。

根据我的经验,只要新消息根据SMTP RFC正确格式化,你就可以自由地做你想做的事。SMTP本质上是一个中继代理,而不是邮件服务器。