昨天经过几个小时的研究,把问题搞定了。主要是用邮件Header中的Message-Id来做。
首先在后台用a@company.com发送邮件,在Header中手动增加Message-Id
SmtpClient smtp = new SmtpClient(); MailMessage message = new MailMessage(); message.Body = "test mail Body"; message.From = new MailAddress("a@company.com", "SystemA"); message.Subject = "MailSubject"; message.To.Add(new MailAddress("user@company.com", "User")); message.Headers.Add("Message-Id", String.Format("{0}@{1}", Guid.NewGuid().ToString(), "company.com")); smtp.Send(message);
这样自己生成的Message-Id可以记录到数据库
第一步完成,接下来,用户接收邮件。
我们可以用以下代码来看到用户收到的邮件中,邮件头Header中的Message-Id就是我们在上面增加时候的ID
client.Connect("pop3.company.com", 110, false); client.Authenticate("username", "password"); //得到邮件总数 int MailCount = client.GetMessageCount(); //拿到邮件头 MessageHeader RMailHeader = client.GetMessageHeaders(MailCount); //邮件头中的Message-Id Console.WriteLine(RMailHeader.MessageId); //下载邮件 Message RMessage = client.GetMessage(MailCount); //得到邮件中的附件 List<MessagePart> RMessageAttach = RMessage.FindAllAttachments(); Console.WriteLine(MailCount.ToString()); Console.ReadKey();
第3步,用户回复邮件,回复后,我们用上面同样的代码在接收a@company.com里面的邮件
就会发现,邮件Header中有一个属性:List<string> RAddress = RMailHeader.InReplyTo;
这个InReplyTo就是告诉你,这个邮件是回复的哪封邮件的ID,也就是我们第一步生成的Message-Id
注:第3步中回复的邮件的Message-Id和我们第一步生成的Message-Id是不同的,
第3步中的InReplyTo和第1步中Message-Id是一样,这样我们就能知道这个邮件是回复的哪封邮件
这样我们就可以在系统中做相应的处理了
ps: 以上内容部分为借鉴其他大大的.
http://q.cnblogs.com/q/60529/
可惜本来是我的豆豆。。。。
你问别人是不是有个邮件ID,你知道都不知道, 别人怎么知道呢?