使用 SmtpClient 发送邮件作为回复

Send a mail as a reply using SmtpClient

场景:需要发送一封邮件,实际上是来自 asp.net c# 程序的回复邮件。我设法将邮件发送给客户端,但它作为新邮件发送。

代码:

var SMTP = _genRepository.GetData("SELECT * FROM LOCATION WHERE ID='" + mail.LocationId + "'").FirstOrDefault();
SmtpClient c = new SmtpClient(SMTP.SMTP_Host, SMTP.SMTP_Port);
MailAddress add = new MailAddress(mail.From);
MailMessage msg = new MailMessage();
msg.To.Add(add);
msg.From = new MailAddress(SMTP.Email);
msg.IsBodyHtml = true;
msg.Subject = mail.Subject;
msg.Body = mail.Body;
c.Credentials = new System.Net.NetworkCredential(SMTP.Email, SMTP.EmailPassword);
c.EnableSsl = true;
c.Send(msg);

我有发件人的电子邮件 messageid。我只需要知道如何发送邮件作为回复。

如果添加以下内容headers,邮件客户端会认为该邮件是回复。

In-Reply-To

References

        MailMessage mailMessage = new MailMessage();
        mailMessage.Headers.Add("In-Reply-To", "<Message-ID Value>");
        mailMessage.Headers.Add("References", "<Message-ID Value>");

我找不到 SMTP headers 的任何 'official' 参考,但下面给出了一些 details:

The presence of In-Reply-To and References headers indicate that the message is a reply to a previous message.

The References header makes "threaded mail reading" and per-discussion archival possible.

此外,一些邮件客户端也需要完全相同的主题。请看这个相关的SO post

在outlook中,如果邮件主题相同,并且为文件夹启用了“对话视图”,则不管上述headers,它会将具有相同主题的所有邮件组合在一起。

您可以使用您的客户端手动发送回复,并将消息 headers 与原始邮件进行比较,以查看您的客户端如何添加消息 headers。