【发布时间】:2012-06-02 08:17:38
【问题描述】:
在 .NET 中使用 SmtpClient 和 MailMessage classes 通过本地邮件服务器 (hMailServer) 发送电子邮件,我目前找不到获取已发送邮件的 Message-ID 标头值的方法。
背后的理念
我正在尝试以编程方式跟踪无法投递的邮件,因此我必须找到一种方法来识别来自目标 SMTP 服务器的拒绝特定邮件的回复。
现在我想简单地记住 Message-ID SMTP 标头值并解析此 ID 的传入邮件。
我在发送消息后尝试检查Headers collection,但没有找到任何Message-ID。
我的问题
是否可以获得我的 SMTP 服务器在发送 MailMessage 实例期间添加的 Message-ID 标头值?
2012-05-27 更新
根据this example,我已成功尝试在发送之前自行手动生成Message-ID。
到目前为止,我的所有示例都有效,因此似乎这是我问题的解决方案。
【问题讨论】:
-
我很确定 id 是由 SMTP 服务器分配的,并且 SMTP 协议没有指定将该值返回给客户端。解决此问题的一种方法是将相同的邮件密件抄送给您控制的帐户,并从该邮件中提取邮件 ID...假设邮件 ID 在初始 SMTP 服务器上生成一次。另一种可能性是在电子邮件中添加自定义“X-tag”。
-
不幸的是,stackoverflow.com/questions/7095104/… 对此没有防弹方法。
-
Jeremy Holovacs:这不是问题所在。对于退回跟踪,您知道邮件未送达,并且您想了解退回邮件是针对哪个地址生成的。这很难,但可行。另外作为记录,实践中的大多数 MSA 都允许您指定自己的 Message-Id;但是,正如我在回答中指出的那样,这并没有真正的帮助,因为一些反弹愚蠢地忽略了原始的 Message-Id。
-
@tripleee,我不确定在所有情况下都是如此,也就是说,我不相信真正的邮件中继是 RFC 定义的协议有义务中继失败通知的。我承认我可能错了。
-
没有反弹超出了我理解的讨论范围。
标签: c# .net smtp mailmessage hmail-server