//用来被回调的函数 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里边还有很多对象可以自己挖掘 }
/// <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; }
/// <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; }
/// <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); } } }
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 }; } } } ); }
/// <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:"); } }