实例介绍
【实例简介】利用 LumiSoft.Net实现 读取邮件内容实例
【实例截图】
【核心代码】
using System; using System.IO; using System.Collections.Generic; using System.Text; using System.Drawing; using System.Windows.Forms; using Pop3ClinetApp.Resources; using LumiSoft.Net.Log; using LumiSoft.Net.MIME; using LumiSoft.Net.Mail; using LumiSoft.Net.POP3.Client; namespace Pop3ClinetApp { /// <summary> /// Application main window. /// </summary> public class wfrm_Main : Form { private TabControl m_pTab = null; // TabPage Mail private ToolStrip m_pTabMail_MessagesToolbar = null; private ListView m_pTabMail_Messages = null; private ListView m_pTabMail_Attachments = null; private TextBox m_pTabMail_BodyText = null; // TabPage Log private RichTextBox m_pTabLog_LogText = null; private POP3_Client m_pPop3 = null; /// <summary> /// Default constructor. /// </summary> public wfrm_Main() { InitUI(); this.Visible = true; wfrm_Connect frm = new wfrm_Connect(new EventHandler<WriteLogEventArgs>(Pop3_WriteLog)); if(frm.ShowDialog(this) == DialogResult.OK){ m_pPop3 = frm.POP3; FillMessagesList(); } else{ Dispose(); } } #region method Dispose /// <summary> /// Cleans up any resources being used. /// </summary> /// <param name="disposing"></param> protected override void Dispose(bool disposing) { base.Dispose(disposing); // Clean up POP3 client. if(m_pPop3 != null){ m_pPop3.Dispose(); m_pPop3 = null; } } #endregion #region method InitUI /// <summary> /// Creates and initializes UI. /// </summary> private void InitUI() { this.ClientSize = new Size(700,500); this.StartPosition = FormStartPosition.CenterScreen; this.Icon = ResManager.GetIcon("app.ico"); this.Text = "POP3 Client demo"; m_pTab = new TabControl(); m_pTab.Dock = DockStyle.Fill; #region TabPage Mail m_pTab.TabPages.Add("Mail"); m_pTab.TabPages[0].ClientSize = new Size(700,500); m_pTabMail_MessagesToolbar = new ToolStrip(); m_pTabMail_MessagesToolbar.Dock = DockStyle.None; m_pTabMail_MessagesToolbar.Location = new Point(595,5); m_pTabMail_MessagesToolbar.Anchor = AnchorStyles.Right | AnchorStyles.Top; m_pTabMail_MessagesToolbar.GripStyle = ToolStripGripStyle.Hidden; m_pTabMail_MessagesToolbar.BackColor = this.BackColor; m_pTabMail_MessagesToolbar.Renderer = new ToolBarRendererEx(); m_pTabMail_MessagesToolbar.ItemClicked = new ToolStripItemClickedEventHandler(m_pTabMail_MessagesToolbar_ItemClicked); // Save button ToolStripButton button_Save = new ToolStripButton(); button_Save.Enabled = false; button_Save.Image = ResManager.GetIcon("save.ico").ToBitmap(); button_Save.Name = "save"; button_Save.Tag = "save"; button_Save.ToolTipText = "Save"; m_pTabMail_MessagesToolbar.Items.Add(button_Save); // Delete button ToolStripButton button_Delete = new ToolStripButton(); button_Delete.Enabled = false; button_Delete.Image = ResManager.GetIcon("delete.ico").ToBitmap(); button_Delete.Name = "delete"; button_Delete.Tag = "delete"; button_Delete.ToolTipText = "Delete"; m_pTabMail_MessagesToolbar.Items.Add(button_Delete); m_pTabMail_Messages = new ListView(); m_pTabMail_Messages.Size = new Size(690,200); m_pTabMail_Messages.Location = new Point(5,30); m_pTabMail_Messages.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; m_pTabMail_Messages.View = View.Details; m_pTabMail_Messages.HideSelection = false; m_pTabMail_Messages.FullRowSelect = true; m_pTabMail_Messages.Columns.Add("From",100); m_pTabMail_Messages.Columns.Add("Subject",300); m_pTabMail_Messages.Columns.Add("Received",120); m_pTabMail_Messages.Columns.Add("Size",60); m_pTabMail_Messages.SelectedIndexChanged = new EventHandler(m_pTabMail_Messages_SelectedIndexChanged); m_pTabMail_Attachments = new ListView(); m_pTabMail_Attachments.Size = new Size(690,40); m_pTabMail_Attachments.Location = new Point(5,240); m_pTabMail_Attachments.Anchor = AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; m_pTabMail_Attachments.View = View.SmallIcon; m_pTabMail_Attachments.MouseClick = new MouseEventHandler(m_pAttachments_MouseClick); m_pTabMail_BodyText = new TextBox(); m_pTabMail_BodyText.Size = new Size(690,200); m_pTabMail_BodyText.Location = new Point(5,285); m_pTabMail_BodyText.Anchor = AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right | AnchorStyles.Top; m_pTabMail_BodyText.ScrollBars = ScrollBars.Both; m_pTabMail_BodyText.Multiline = true; m_pTab.TabPages[0].Controls.Add(m_pTabMail_MessagesToolbar); m_pTab.TabPages[0].Controls.Add(m_pTabMail_Messages); m_pTab.TabPages[0].Controls.Add(m_pTabMail_Attachments); m_pTab.TabPages[0].Controls.Add(m_pTabMail_BodyText); #endregion #region TabPage Log m_pTab.TabPages.Add("Log"); m_pTab.TabPages[1].ClientSize = new Size(700,500); m_pTabLog_LogText = new RichTextBox(); m_pTabLog_LogText.Dock = DockStyle.Fill; m_pTabLog_LogText.ReadOnly = true; m_pTab.TabPages[1].Controls.Add(m_pTabLog_LogText); #endregion this.Controls.Add(m_pTab); } #endregion #region Events Handling #region method m_pTabMail_MessagesToolbar_ItemClicked private void m_pTabMail_MessagesToolbar_ItemClicked(object sender,ToolStripItemClickedEventArgs e) { if(string.Equals(e.ClickedItem.Name,"save")){ SaveFileDialog dlg = new SaveFileDialog(); dlg.FileName = "message.eml"; if(dlg.ShowDialog() == DialogResult.OK){ this.Cursor = Cursors.WaitCursor; POP3_ClientMessage message = (POP3_ClientMessage)m_pTabMail_Messages.SelectedItems[0].Tag; File.WriteAllBytes(dlg.FileName,message.MessageToByte()); this.Cursor = Cursors.Default; } } else if(string.Equals(e.ClickedItem.Name,"delete")){ if(MessageBox.Show(this,"Do you want to delete selected message ?","Confirm Delete:",MessageBoxButtons.YesNo,MessageBoxIcon.Question) == DialogResult.Yes){ POP3_ClientMessage message = (POP3_ClientMessage)m_pTabMail_Messages.SelectedItems[0].Tag; message.MarkForDeletion(); m_pTabMail_Messages.SelectedItems[0].Remove(); } } } #endregion #region method m_pTabMail_Messages_SelectedIndexChanged private void m_pTabMail_Messages_SelectedIndexChanged(object sender,EventArgs e) { this.Cursor = Cursors.WaitCursor; try{ m_pTabMail_MessagesToolbar.Items["save"].Enabled = false; m_pTabMail_MessagesToolbar.Items["delete"].Enabled = false; if(m_pTabMail_Messages.SelectedItems.Count > 0){ m_pTabMail_Attachments.Items.Clear(); m_pTabMail_BodyText.Text = ""; POP3_ClientMessage message = (POP3_ClientMessage)m_pTabMail_Messages.SelectedItems[0].Tag; Mail_Message mime = Mail_Message.ParseFromByte(message.MessageToByte()); 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.Tag = entity; m_pTabMail_Attachments.Items.Add(item); } if(mime.BodyText != null){ m_pTabMail_BodyText.Text = mime.BodyText; } m_pTabMail_MessagesToolbar.Items["save"].Enabled = true; m_pTabMail_MessagesToolbar.Items["delete"].Enabled = true; } } catch(Exception x){ MessageBox.Show(this,"Error: " x.Message,"Error:",MessageBoxButtons.OK,MessageBoxIcon.Error); } this.Cursor = Cursors.Default; } #endregion #region method m_pAttachments_MouseClick private void m_pAttachments_MouseClick(object sender,MouseEventArgs e) { if(e.Button == MouseButtons.Right && m_pTabMail_Attachments.SelectedItems.Count > 0){ ContextMenuStrip menu = new ContextMenuStrip(); menu.Items.Add("Save"); menu.ItemClicked = new ToolStripItemClickedEventHandler(menu_ItemClicked); menu.Show(Control.MousePosition); } } private void menu_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { MIME_Entity entity = (MIME_Entity)m_pTabMail_Attachments.SelectedItems[0].Tag; SaveFileDialog dlg = new SaveFileDialog(); dlg.FileName = m_pTabMail_Attachments.SelectedItems[0].Text; if(dlg.ShowDialog(this) == DialogResult.OK){ File.WriteAllBytes(dlg.FileName,((MIME_b_SinglepartBase)entity.Body).Data); } } #endregion #region method Pop3_WriteLog private delegate void AppendText(string text); /// <summary> /// This method is called when POP3 client has new log entry. /// </summary> /// <param name="sender">Sender.</param> /// <param name="e">Event data.</param> private void Pop3_WriteLog(object sender,WriteLogEventArgs e) { try{ if(e.LogEntry.EntryType == LogEntryType.Read){ m_pTabLog_LogText.BeginInvoke(new AppendText(m_pTabLog_LogText.AppendText),ObjectToString(e.LogEntry.RemoteEndPoint) " >> " e.LogEntry.Text "\r\n"); } else if(e.LogEntry.EntryType == LogEntryType.Write){ m_pTabLog_LogText.BeginInvoke(new AppendText(m_pTabLog_LogText.AppendText),ObjectToString(e.LogEntry.RemoteEndPoint) " << " e.LogEntry.Text "\r\n"); } else if(e.LogEntry.EntryType == LogEntryType.Text){ m_pTabLog_LogText.BeginInvoke(new AppendText(m_pTabLog_LogText.AppendText),ObjectToString(e.LogEntry.RemoteEndPoint) " xx " e.LogEntry.Text "\r\n"); } } catch(Exception x){ MessageBox.Show(x.ToString()); } } #endregion #endregion #region method FillMessagesList /// <summary> /// Gets messages list from POP3 server and adds them to UI. /// </summary> private void FillMessagesList() { this.Cursor = Cursors.WaitCursor; try{ foreach(POP3_ClientMessage message in m_pPop3.Messages){ Mail_Message mime = Mail_Message.ParseFromByte(message.HeaderToByte()); ListViewItem item = new ListViewItem(); if(mime.From != null){ item.Text = mime.From.ToString(); } else{ item.Text = "<none>"; } if(string.IsNullOrEmpty(mime.Subject)){ item.SubItems.Add("<none>"); } else{ item.SubItems.Add(mime.Subject); } item.SubItems.Add(mime.Date.ToString()); item.SubItems.Add(((decimal)(message.Size / (decimal)1000)).ToString("f2") " kb"); item.Tag = message; m_pTabMail_Messages.Items.Add(item); } } catch(Exception x){ MessageBox.Show(this,"Error: " x.Message,"Error:",MessageBoxButtons.OK,MessageBoxIcon.Error); } this.Cursor = Cursors.Default; } #endregion #region method ObjectToString /// <summary> /// Calls obj.ToSting() if obj is not null, otherwise returns "". /// </summary> /// <param name="obj">Object.</param> /// <returns>Returns obj.ToSting() if obj is not null, otherwise returns "".</returns> private string ObjectToString(object obj) { if(obj == null){ return ""; } else{ return obj.ToString(); } } #endregion } }
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论