当前位置:   article > 正文

C# 通过IMAP协议读取邮件进行解析_c# imapclient设置代理访问邮件

c# imapclient设置代理访问邮件

前言: 肯定会有小伙伴会对系统发出的邮件进行验证,但是呢用SMTP发出邮件后,发现又读取不了,那我们就得用到IMAP协议去读取邮件了。话不多说往下看

一开始肯定是需要配置邮件的邮箱,这里因为方便大家查看,我就直接定义string参数了。

  1. string imapServer= "emil.qq.com";
  2. int port = 995;
  3. string username = "name"; //用户名
  4. string password = "pwd"; //密码

那有了配置之后,肯定的有连接才行,那我这边用的就是 MailKit包,大家需要去NuGet添加MailKit

接下来肯定是创建IMAP客户端了,废话不多说,直接贴代码

  1. // 创建IMAP客户端
  2. using (var client = new ImapClient())
  3. {
  4. client.Connect(imapServer, port, true);
  5. client.Authenticate(username, password);
  6. // 打开收件箱
  7. var inbox = client.Inbox;
  8. inbox.Open(FolderAccess.ReadOnly);
  9. // 遍历收件箱中的邮件并输出主题
  10. for (int i = 0; i < inbox.Count; i++)
  11. {
  12. var message = inbox.GetMessage(i);
  13. Console.WriteLine("邮件主题:{0}", message.Subject);
  14. }
  15. client.Disconnect(true);
  16. }

到这里大家可能又要问了,我不想要收件箱的啊,我需要的是发件箱的啊,别急,看下面。

  1. // 创建IMAP客户端
  2. using (var client = new ImapClient())
  3. {
  4. client.Connect(imapServer, port, true);
  5. client.Authenticate(username, password);
  6. // 打开发件箱 不可随哟更改邮箱文件夹名称和移动邮件
  7. var folder = client.GetFolder("已发送邮件");
  8. folder.Open(FolderAccess.ReadOnly);
  9. // 获取收件箱中的邮件数量
  10. Console.WriteLine("收件箱中共有 {0} 封邮件", folder.Count);
  11. // 遍历收件箱中的邮件并输出主题
  12. for (int i = 0; i < folder.Count; i++)
  13. {
  14. var message = folder.GetMessage(i);
  15. Console.WriteLine("邮件主题:{0}", message.Subject);
  16. }
  17. //必须得关,坑已经踩过了
  18. client.Disconnect(true);
  19. client.Dispose();
  20. }

哎,大家可以看到client.GetFolder("已发送邮件"); 非常灵活是不是,但是记住,如果邮箱文件夹名称变了,记得这一块也要变动,不然就报错了哦。

到这大家是不是还有疑惑,邮件这么多,都这么分析是不是要老久了,哎,其实他还可以读取时间段内的邮件,接着看代码

  1. // 创建IMAP客户端
  2. using (var client = new ImapClient())
  3. {
  4. client.Connect(imapServer, port, true);
  5. client.Authenticate(username, password);
  6. // 打开发件箱 不可随哟更改邮箱文件夹名称和移动邮件
  7. var folder = client.GetFolder("已发送邮件");
  8. folder.Open(FolderAccess.ReadOnly);
  9. // 获取收件箱中的邮件数量
  10. Console.WriteLine("收件箱中共有 {0} 封邮件", folder.Count);
  11. //获取昨天到今天的邮件 一般两天足已
  12. var uidss = folder.Search(SearchQuery.DeliveredAfter(DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"))));
  13. //获取完整邮件
  14. foreach (var item in uidss)
  15. {
  16. MimeMessage message = folder.GetMessage(new UniqueId(item.Id));
  17. Console.WriteLine("邮件主题:{0}", message.Subject);
  18. }
  19. //必须得关,坑已经踩过了
  20. client.Disconnect(true);
  21. client.Dispose();
  22. }

停停停,到这你是不是已经以为结束了,NONONO,你会发现读取出来的内容乱码了,其实也很好解决。

引用一下 System.Text.Encoding.CodePages 包,在最开始的地方添加 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); 即可

最终的代码就是这样的

  1. /// <summary>
  2. /// IMAP 读取邮箱信息 MimeKit包下 (亲测可用)
  3. /// </summary>
  4. public static void IMAP()
  5. {
  6. try
  7. {
  8. //注册字符集,缺失字符集,一些中文编码数据为乱码 --千万别删,不然就是乱码了
  9. Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
  10. // 设置IMAP服务器地址、端口、用户名和密码
  11. string imapServer = "emil.qq.com";
  12. int port = 995;
  13. string username = "name"; //用户名
  14. string password = "pwd"; //密码
  15. // 创建IMAP客户端
  16. using (var client = new ImapClient())
  17. {
  18. client.Connect(imapServer, port, true);
  19. client.Authenticate(username, password);
  20. // 打开发件箱 不可随哟更改邮箱文件夹名称和移动邮件
  21. var folder = client.GetFolder("已发送邮件");
  22. folder.Open(FolderAccess.ReadOnly);
  23. // 获取收件箱中的邮件数量
  24. Console.WriteLine("收件箱中共有 {0} 封邮件", folder.Count);
  25. //获取昨天到今天的邮件 一般两天足已
  26. var uidss = folder.Search(SearchQuery.DeliveredAfter(DateTime.Parse(DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"))));
  27. //获取完整邮件
  28. foreach (var item in uidss)
  29. {
  30. MimeMessage message = folder.GetMessage(new UniqueId(item.Id));
  31. Console.WriteLine("邮件主题:{0}", message.Subject);
  32. }
  33. //必须得关,坑已经踩过了
  34. client.Disconnect(true);
  35. client.Dispose();
  36. }
  37. }
  38. catch (Exception ex)
  39. {
  40. Console.WriteLine("读取收件箱失败:" + ex.Message);
  41. }
  42. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/985936
推荐阅读
相关标签
  

闽ICP备14008679号