C#实现QQ邮箱IMAP之邮件处理
public void DealEmail(string fjType = ".db") { IMAP_Client IMAPServer = new IMAP_Client(); try { //连接qq邮箱 IMAPServer.Connect(popServer, popPort); IMAPServer.Login(accout, pass); //获取邮件 IMAPServer.SelectFolder("INBOX"); //获取未读邮件id int[] unseen_ids = IMAPServer.Search(false, Encoding.UTF8, new IMAP_Search_Key_Unseen()); //没有未读邮件则返回 if (unseen_ids.Length == 0) continue; //未读邮件集合 IMAP_t_SeqSet sequence = IMAP_t_SeqSet.Parse(string.Join(",", unseen_ids)); //所需未读邮件集合参数 var items = new IMAP_t_Fetch_i[] { new IMAP_t_Fetch_i_Envelope(), new IMAP_t_Fetch_i_Uid(), new IMAP_t_Fetch_i_Flags(), new IMAP_t_Fetch_i_Flags(), new IMAP_t_Fetch_i_InternalDate(), new IMAP_t_Fetch_i_Rfc822() }; //遍历邮件 IMAPServer.Fetch(false, sequence, items, (s, e) => { try { var email = e.Value as IMAP_r_u_Fetch; if (email.Rfc822 != null) { //处理邮件附件 email.Rfc822.Stream.Position = 0; var mine = Mail_Message.ParseFromStream(email.Rfc822.Stream); email.Rfc822.Stream.Close(); if (mine.Attachments.Length > 0) { List<MIME_Entity> list = new List<MIME_Entity>(mine.Attachments); foreach (var att in list) { if (att.ContentType.Param_Name.Contains(fjType)) { var part = att.Body as MIME_b_SinglepartBase; //路径被URL编码了,格式为:UTF-8''附件名 string filename = att.ContentType.Param_Name; if(filename.Contains("UTF-8")) filename= HttpUtility.UrlDecode(filename.Substring(7)); //下载到指定地址 string filePath = Path.Combine(rootPath, Path.GetFileNameWithoutExtension(filename)); File.WriteAllBytes(filePath, part.Data); } } } //邮件信息 //var Title = email.Envelope.Subject; //var CreateTime = email.InternalDate.Date; //var BodyText = mine.BodyText; //var BodyHtmlText = mine.BodyHtmlText; //处理完的邮件标记为已读 IMAP_t_SeqSet sequenceSet = IMAP_t_SeqSet.Parse(string.Join(",", email.SeqNo)); IMAPServer.StoreMessageFlags(false, sequenceSet, IMAP_Flags_SetType.Add, new IMAP_t_MsgFlags(new string[] { IMAP_t_MsgFlags.Seen })); } } catch (Exception ex) { throw ex; } }); } catch (Exception ex) { throw ex; } finally { IMAPServer.Disconnect(); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构