是否可以捕获使用SmtpClient发送的电子邮件的“消息ID”?

时间:2012-05-27 19:18:49

标签: c# .net smtp mailmessage hmail-server

使用.NET中的SmtpClientMailMessage classes通过本地邮件服务器(hMailServer)发送电子邮件,我目前无法获取Message-ID标头值已发送的消息。

背后的理念

我正在尝试以编程方式跟踪无法传递的邮件,因此我必须找到一种方法来识别拒绝某个邮件的目标SMTP服务器的回复。

现在我想到只记住Message-ID SMTP标头值并解析此ID的传入邮件。

我在发送邮件后尝试检查Headers collection,但我没有找到任何Message-ID

我的问题

是否可以获取我的SMTP服务器在发送Message-ID实例期间添加的MailMessage标头值?

更新2012-05-27

根据this example我已成功尝试在发送前自行手动生成Message-ID

到目前为止我的所有示例都有效,所以似乎这是我问题的解决方案。

3 个答案:

答案 0 :(得分:3)

您可以在发送电子邮件之前添加自己的消息ID。我使用下一个代码:

Guid id = Guid.NewGuid(); //Save the id in your database 
mensajeEmail.Headers.Add("Message-Id", String.Format("<{0}@{1}>",id.ToString(),"mail.example.com"));

注意:对于我使用OpenPop.Net的下载邮件,我会检查message.Headers.InReplyTo媒体资源,并显示已发送的邮件ID。

答案 1 :(得分:2)

您的问题的标准解决方案是VERP。阅读伯恩斯坦的原始文章,找出为什么Message-Id等。不可靠。 http://cr.yp.to/proto/verp.txt

答案 2 :(得分:0)

我正在将MailKit库用于.Net和SMTP客户端。

我尝试了另一种解决方案来获取SMTP客户端发送的邮件的ID,以跟踪所有已回复的邮件。

在发送邮件之前,请在邮件标题中添加一个隐藏的ID属性,

Check this sample

现在继续发送您的消息, 等待大约10秒钟,然后您将使用 IMAP 客户端获取已发送文件夹,并获取该文件夹中的每封邮件, 循环遍历邮件标题,并检查其中是否有人== {messageIdentity,现在您抓到了 已成功发送消息,并获取有关其的任何信息,例如ID等...