Exemple #1
0
        //用来被回调的函数
        public void Fetchcallback(object sender, LumiSoft.Net.EventArgs <IMAP_r_u> eventArgs)
        {
            try
            {
                if (eventArgs.Value is IMAP_r_u_Fetch)
                {
                    IMAP_r_u_Fetch fetchResp = (IMAP_r_u_Fetch)eventArgs.Value;
                    if (fetchResp.Flags.Flags.Count == 0 && fetchResp.Envelope.From != null)
                    {
                        DataRow dr = dtblEmail.NewRow();
                        dr["Subject"]     = fetchResp.Envelope.Subject;
                        dr["ReceiveDate"] = fetchResp.InternalDate.Date;
                        dr["From"]        = fetchResp.Envelope.From[0];
                        dtblEmail.Rows.Add(dr);
                        UnReadEmailCount++;
                    }
                }
            }
            catch (Exception ex)
            {
                MyLog.LogError("邮件查询回调函数异常", ex);
            }

            //var st = x.Rfc822.Stream;
            //st.Position = 0;
            //LumiSoft.Net.Mail.Mail_Message mime = LumiSoft.Net.Mail.Mail_Message.ParseFromStream(st);
            //MessageBox.Show(mime.BodyText);
            //mime里边还有很多对象可以自己挖掘
        }
Exemple #2
0
        /// <summary>
        /// This method is called when FETCH (Envelope Flags InternalDate Rfc822Size Uid) untagged response is received.
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="e">Event data.</param>
        private void m_pImap_Fetch_MessageItems_UntaggedResponse(object sender, EventArgs <IMAP_r_u> e)
        {
            /* NOTE: All IMAP untagged responses may be raised from thread pool thread,
             *  so all UI operations must use Invoke.
             *
             * There may be other untagged responses than FETCH, because IMAP server
             * may send any untagged response to any command.
             */

            try
            {
                if (e.Value is IMAP_r_u_Fetch)
                {
                    IMAP_r_u_Fetch fetchResp = (IMAP_r_u_Fetch)e.Value;
                    try
                    {
                        string from = "";
                        if (fetchResp.Envelope.From != null)
                        {
                            for (int i = 0; i < fetchResp.Envelope.From.Length; i++)
                            {
                                // Don't add ; for last item
                                if (i == fetchResp.Envelope.From.Length - 1)
                                {
                                    from += fetchResp.Envelope.From[i].ToString();
                                }
                                else
                                {
                                    from += fetchResp.Envelope.From[i].ToString() + ";";
                                }
                            }
                        }
                        else
                        {
                            from = "<none>";
                        }
                        Console.WriteLine("From {0}", from);
                        Console.WriteLine("Тема письма {0}", fetchResp.Envelope.Subject != null ? fetchResp.Envelope.Subject : "<none>");
                        Console.WriteLine("Внутренняя тема {0}", fetchResp.InternalDate.Date.ToString("dd.MM.yyyy HH:mm"));
                        Console.WriteLine("Размер в килобайтах {0}", ((decimal)(fetchResp.Rfc822Size.Size / (decimal)1000)).ToString("f2") + " kb");
                        Console.WriteLine("UID {0}", fetchResp.UID.UID.ToString());
                        Console.WriteLine("UID1 {0}", fetchResp.UID.UID);
                        Console.WriteLine("UID1 {0}", fetchResp.Rfc822Text.Stream);
                    }
                    catch (Exception x)
                    {
                        Console.WriteLine("Error: " + x.ToString(), "Error:");
                    }
                }
            }
            catch (Exception x)
            {
                Console.WriteLine("Error: " + x.ToString(), "Error:");
            }
        }
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="fetch">Fetch response.</param>
        /// <param name="dataItem">Fetch data-item.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>fetch</b> or <b>dataItem</b> is null reference.</exception>
        public IMAP_Client_e_FetchGetStoreStream(IMAP_r_u_Fetch fetch,IMAP_t_Fetch_r_i dataItem)
        {
            if(fetch == null){
                throw new ArgumentNullException("fetch");
            }
            if(dataItem == null){
                throw new ArgumentNullException("dataItem");
            }

            m_pFetchResponse = fetch;
            m_pDataItem      = dataItem;
        }
Exemple #4
0
        /// <summary>
        /// Default constructor.
        /// </summary>
        /// <param name="fetch">Fetch response.</param>
        /// <param name="dataItem">Fetch data-item.</param>
        /// <exception cref="ArgumentNullException">Is raised when <b>fetch</b> or <b>dataItem</b> is null reference.</exception>
        public IMAP_Client_e_FetchGetStoreStream(IMAP_r_u_Fetch fetch, IMAP_t_Fetch_r_i dataItem)
        {
            if (fetch == null)
            {
                throw new ArgumentNullException("fetch");
            }
            if (dataItem == null)
            {
                throw new ArgumentNullException("dataItem");
            }

            m_pFetchResponse = fetch;
            m_pDataItem      = dataItem;
        }
Exemple #5
0
        /// <summary>
        /// Examples:
        ///		2        -> seq-number (2)
        ///		2:4      -> seq-range  (from 2 - 4)
        ///		2:*      -> seq-range  (from 2 to last)
        ///		2,3,10:* -> sequence-set (seq-number,seq-number,seq-range)
        ///		                       (2,3, 10 - last)
        /// </summary>
        /// <param name="start"></param>
        /// <param name="end"></param>
        public void LoadMessages(String start, String end)
        {
            Messages.Clear();
            if (!_IsConnected)
            {
                throw new EMailException {
                          ExceptionType = EMAIL_EXCEPTION_TYPE.NOT_CONNECTED
                }
            }
            ;
            if (!String.IsNullOrWhiteSpace(_CurrentFolder))
            {
                Client.Fetch(
                    false,

                    IMAP_t_SeqSet.Parse(start + ":" + end),
                    new IMAP_t_Fetch_i[]
                {
                    new IMAP_t_Fetch_i_Envelope(),
                    new IMAP_t_Fetch_i_Flags(),
                    new IMAP_t_Fetch_i_InternalDate(),
                    new IMAP_t_Fetch_i_Rfc822Size(),
                    new IMAP_t_Fetch_i_Uid()
                },
                    (s, e) =>
                {
                    try
                    {
                        IMAP_r_u_Fetch fetchResp = (IMAP_r_u_Fetch)e.Value;

                        string from = "";
                        if (fetchResp.Envelope.From != null)
                        {
                            for (int i = 0; i < fetchResp.Envelope.From.Length; i++)
                            {
                                // Don't add ; for last item
                                if (i == fetchResp.Envelope.From.Length - 1)
                                {
                                    from += fetchResp.Envelope.From[i].ToString();
                                }
                                else
                                {
                                    from += fetchResp.Envelope.From[i].ToString() + ";";
                                }
                            }
                        }
                        else
                        {
                            from = "<none>";
                        }
                        string Subject = fetchResp.Envelope.Subject != null ? fetchResp.Envelope.Subject : "<none>";
                        string Date    = fetchResp.InternalDate.Date.ToString("dd.MM.yyyy HH:mm");
                        string size    = ((decimal)(fetchResp.Rfc822Size.Size / (decimal)1000)).ToString("f2") + " kb";

                        Mail_t_Address[] froms = fetchResp.Envelope.From;

                        string Tag = fetchResp.UID.UID.ToString();

                        IMAP_Message_Wrapper wr = new IMAP_Message_Wrapper {
                            Client = Client, SequenceNumber = (int)fetchResp.UID.UID, UID = Tag, Date = fetchResp.InternalDate.Date, Size = fetchResp.Rfc822Size.Size, Subject = Subject
                        };
                        foreach (var item in froms)
                        {
                            if (item is Mail_t_Mailbox)
                            {
                                wr.From.Add(((Mail_t_Mailbox)item).Address);
                            }
                        }
                        //var F = fetchResp.Flags.Flags;
                        //if(!F.Contains("\\Deleted"))
                        _Messages.Add(wr);
                    }
                    catch (Exception exe)
                    {
                        throw new EMailException
                        {
                            ExceptionType  = EMAIL_EXCEPTION_TYPE.ERROR_ON_GET_MESSAGE,
                            InnerException = exe
                        };
                    }
                }
                    );
                if (OnMessagesLoaded != null)
                {
                    OnMessagesLoaded(this);
                }
            }
        }
Exemple #6
0
        public void LoadInfos()
        {
            if (!Client.IsConnected)
            {
                throw new EMailException {
                          ExceptionType = EMAIL_EXCEPTION_TYPE.NOT_CONNECTED
                }
            }
            ;
            Client.Fetch(
                true,
                IMAP_t_SeqSet.Parse(UID),
                new IMAP_t_Fetch_i[] {
                new IMAP_t_Fetch_i_Rfc822()
            },
                (sender, e) =>
            {
                if (e.Value is IMAP_r_u_Fetch)
                {
                    IMAP_r_u_Fetch fetchResp = (IMAP_r_u_Fetch)e.Value;
                    try
                    {
                        if (fetchResp.Rfc822 != null)
                        {
                            fetchResp.Rfc822.Stream.Position = 0;
                            Mail_Message mime = Mail_Message.ParseFromStream(fetchResp.Rfc822.Stream);
                            fetchResp.Rfc822.Stream.Dispose();

                            if (String.IsNullOrWhiteSpace(mime.BodyText))
                            {
                                _TextBody = mime.BodyHtmlText;
                            }
                            else
                            {
                                _TextBody = mime.BodyText;
                            }
                            Attachments.Clear();
                            foreach (MIME_Entity entity in mime.Attachments)
                            {
                                IMAP_Mail_Attachment att = new IMAP_Mail_Attachment();
                                if (entity.ContentDisposition != null && entity.ContentDisposition.Param_FileName != null)
                                {
                                    att.Text = entity.ContentDisposition.Param_FileName;
                                }
                                else
                                {
                                    att.Text = "untitled";
                                }
                                att.Body = ((MIME_b_SinglepartBase)entity.Body).Data;
                                Attachments.Add(att);
                            }
                        }
                    }
                    catch (Exception exe)
                    {
                        throw new EMailException {
                            ExceptionType = EMAIL_EXCEPTION_TYPE.ERROR_ON_GET_MESSAGE, InnerException = exe
                        };
                    }
                }
            }
                );
        }
Exemple #7
0
        /// <summary>
        /// This method is called when FETCH RFC822 untagged response is received.
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="e">Event data.</param>
        private void m_pImap_Fetch_Message_UntaggedResponse(object sender, EventArgs <IMAP_r_u> e)
        {
            /* NOTE: All IMAP untagged responses may be raised from thread pool thread,
             *  so all UI operations must use Invoke.
             *
             * There may be other untagged responses than FETCH, because IMAP server
             * may send any untagged response to any command.
             */

            try
            {
                if (e.Value is IMAP_r_u_Fetch)
                {
                    IMAP_r_u_Fetch fetchResp = (IMAP_r_u_Fetch)e.Value;
                    try
                    {
                        fetchResp.Rfc822.Stream.Position = 0;
                        Mail_Message mime = Mail_Message.ParseFromStream(fetchResp.Rfc822.Stream);
                        fetchResp.Rfc822.Stream.Dispose();

                        /*
                         *                          m_pTabPageMail_MessagesToolbar.Items["save"].Enabled = true;
                         *                          m_pTabPageMail_MessagesToolbar.Items["delete"].Enabled = true;
                         *
                         *                          m_pTabPageMail_MessageAttachments.Tag = mime;
                         *                          foreach (MIME_Entity entity in mime.Attachments)
                         *                          {
                         *                              ListViewItem item = new ListViewItem();
                         *                              if (entity.ContentDisposition != null && entity.ContentDisposition.Param_FileName != null)
                         *                              {
                         *                                  item.Text = entity.ContentDisposition.Param_FileName;
                         *                              }
                         *                              else
                         *                              {
                         *                                  item.Text = "untitled";
                         *                              }
                         *                              item.ImageIndex = 0;
                         *                              item.Tag = entity;
                         *                              m_pTabPageMail_MessageAttachments.Items.Add(item);
                         *                          }*/

                        if (mime.Subject != null)
                        {
                            currentEmail.subject = mime.Subject;
                            currentEmail.message = mime.BodyHtmlText;
                            currentEmail.from    = mime.From.ToString();
                            currentEmail.date    = mime.Date.ToShortDateString();
                            currentEmail.to      = mime.To.ToString();
                        }
                    }
                    catch (Exception x)
                    {
                        Console.WriteLine("Error: " + x.ToString(), "Error:");
                    }
                }
            }
            catch (Exception x)
            {
                Console.WriteLine("Error: " + x.ToString(), "Error:");
            }
        }