使用System.Net.Mail唯一标识发送的电子邮件

时间:2011-06-03 17:19:39

标签: c# .net email smtp guid

我正在寻找一种在使用.NET SmtpClient类(在System.Net.Mail中)发送电子邮件时唯一标识电子邮件的方法,即

        SmtpClient client = new SmtpClient(smtpServer, smtpPort);

        client.EnableSsl = false;

        MailAddress from = new MailAddress(fromAddress);
        MailAddress to = new MailAddress(destinationAddress); 

        MailMessage message = new MailMessage(from, to);

        message.Body = body;
        message.Subject = subject;

我可以使用message.Headers设置'Message-Id'属性(将其设置为System.Guid),但它被smtp服务器覆盖,我不知道如何访问smtp服务器生成的消息ID 。

我需要一个客户端系统来打开接收电子邮件的pop3邮箱,并能够通过此唯一标识符跟踪它。

任何人都知道这是否可行?

3 个答案:

答案 0 :(得分:8)

一种选择是将自定义标头附加到邮件中。自定义标头以X-前缀表示。因此,在这种情况下,您可以创建一个名为X-Unique-Id的名称,不会被覆盖。

但是,并不一定所有邮件客户端都允许基于自定义标头进行过滤/搜索,您必须检查客户端。

MSDN

  

添加的任何自定义标头都将是   包含在MailMessage实例中   发送。

只需添加到message.Headers集合中:

message.Headers["X-Unique-Id"] = "1";

另一种选择是使用特殊的回复:或来自:包含消息ID的值。例如。如果您的回复地址是auto@responder.net,请将其更改为auto+{unique-id }@responder.net。许多邮件服务器(包括gmail)会将+视为通配符,并将邮件正常传递给auto@responder.net。这是一种常用方法,允许用户通过电子邮件直接回复应用内消息。

答案 1 :(得分:4)

根据“客户端系统”的含义,我建议您添加一个客户标题,例如X-MyHeader: GUID

X-Headers不与邮件服务器交互;这也被许多流行的邮件工具使用,例如mailchimp:

System.Net.Mail.MailMessage m;
m.Headers.Add("X-MyHeader", Guid.NewGuid());

答案 2 :(得分:1)

您是否可以将GUID附加到主题行或将其添加到电子邮件正文的最末端?它对用户是可见的,但如果它位于电子邮件的底部(可能包含更多信息),那么它将不再适用,并且仍然可以进行搜索。