zoukankan      html  css  js  c++  java
  • 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();
        }
    }
  • 相关阅读:
    php date() 函数
    ajax接收遍历处理json格式数据
    textarea 滚动条属性设置
    $.each()和$(selector).each()
    PhpStorm快捷方式
    asp.net错误记录
    php checkbox 从数据库读取和写入
    php表单中如何获取单选按钮与复选按钮的值(示例)
    php一些单选、复选框的默认选择方法(示例)
    常用正则表达式:手机、电话、邮箱、身份证、IP地址、网址、日期等
  • 原文地址:https://www.cnblogs.com/tenfly/p/14756827.html
Copyright © 2011-2022 走看看