首页 新闻 会员 周边

.net接收回复邮件

0
悬赏园豆:60 [已解决问题] 解决于 2014-08-22 21:42

由于系统业务需要,要解析客户回复的邮件,步骤如下

1.系统后台用a@company.com发送邮件到user@company.com

2.user@company.com收到邮件后。回复这封邮件

3.系统后台专门有用于处理接收邮件,

现在的问题是,当user回复邮件的时候,我们能不能知道当前user回复的是哪封邮件?

还有当第一步发送邮件的时候。是不是有个邮件ID?

这样我们才能把相应的数据写到数据库,回复的时候也知道相应的信息。

Giant150的主页 Giant150 | 小虾三级 | 园豆:1165
提问于:2014-03-21 10:09
< >
分享
最佳答案
0

昨天经过几个小时的研究,把问题搞定了。主要是用邮件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是一样,这样我们就能知道这个邮件是回复的哪封邮件
这样我们就可以在系统中做相应的处理了

Giant150 | 小虾三级 |园豆:1165 | 2014-03-23 10:46
其他回答(2)
0

对于邮件的接收,我之前使用的是第三方的插件来实现的,微软自带的WebClient只有发送邮件的方法。第三方的插件我向你推荐一个Lumisoft.NET和S22.Imap。通过插件接收到邮件后,都能够获得你想要的那些信息,包括发件人,收件人,地址,邮件内容等。

收获园豆:50
酷小孩 | 园豆:243 (菜鸟二级) | 2014-03-21 12:56
0

如果两端都是可控的,就用邮件标题和发件人来确认是否同一封邮件,比如OutLook中回复的邮件标题都是原邮件前面加一个前缀。如果有一端不是可控的,那就不知道了,不过我帮你搜到一篇文章:

Identifying the original email from user's reply

收获园豆:10
空明流光 | 园豆:106 (初学一级) | 2014-03-21 20:53
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册