我正在寻找一种在使用.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邮箱,并能够通过此唯一标识符跟踪它。
任何人都知道这是否可行?
答案 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附加到主题行或将其添加到电子邮件正文的最末端?它对用户是可见的,但如果它位于电子邮件的底部(可能包含更多信息),那么它将不再适用,并且仍然可以进行搜索。