ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#实现QQ邮箱IMAP之邮件处理

2021-05-11 19:35:49  阅读:263  来源: 互联网

标签:QQ IMAPServer C# Fetch email var new 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();
    }
}

 

标签:QQ,IMAPServer,C#,Fetch,email,var,new,IMAP
来源: https://www.cnblogs.com/tenfly/p/14756827.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有