实例介绍
【实例简介】C#收发电子邮件
【实例截图】
【核心代码】using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Threading;
using OpenPOP.POP3;
using OpenPOP;
namespace MailClient
{
public partial class Form1 : Form
{
private POPClient popClient = new POPClient();
private Hashtable msgs = new Hashtable();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
txtMessage.Text = "";
msgs.Clear();
listMessages.Nodes.Clear();//邮件列表
listAttachments.Nodes.Clear();//附件列表
popClient.AuthenticationBegan = new EventHandler(popClient_AuthenticationBegan);
popClient.AuthenticationFinished = new EventHandler(popClient_AuthenticationFinished);
popClient.CommunicationBegan = new EventHandler(popClient_CommunicationBegan);
popClient.CommunicationOccured = new EventHandler(popClient_CommunicationOccured);
popClient.CommunicationLost = new EventHandler(popClient_CommunicationLost);
popClient.MessageTransferBegan = new EventHandler(popClient_MessageTransferBegan);
popClient.MessageTransferFinished = new EventHandler(popClient_MessageTransferFinished);
}
#region 通讯事件
private void popClient_CommunicationBegan(object sender, EventArgs e)
{
AddEvent("开始连接POP3服务器");
}
private void popClient_CommunicationOccured(object sender, EventArgs e)
{
AddEvent("连接成功!");
}
private void popClient_AuthenticationBegan(object sender, EventArgs e)
{
AddEvent("经行用户验证");
}
private void popClient_AuthenticationFinished(object sender, EventArgs e)
{
AddEvent("验证成功!");
}
private void popClient_MessageTransferBegan(object sender, EventArgs e)
{
AddEvent("开始经行邮件接收");
}
private void popClient_MessageTransferFinished(object sender, EventArgs e)
{
AddEvent("邮件接收完毕!");
}
private void popClient_CommunicationLost(object sender, EventArgs e)
{
AddEvent("关闭连接!");
}
#endregion
/// <summary>
/// 接收邮件,直接收邮件头
/// 陈明新
/// </summary>
private void ReceiveMails()
{
popClient.Disconnect();
popClient.Connect(txtPOPServer.Text, int.Parse(txtPort.Text));
popClient.Authenticate(txtLogin.Text, txtPassword.Text);
int Count = popClient.GetMessageCount();//读取邮件总数
txtTotalMessages.Text = Count.ToString();
txtMessage.Text = "";
msgs.Clear();
listMessages.Nodes.Clear();//邮件列表
listAttachments.Nodes.Clear();//附件列表
for (int i = Count; i >= 1; i -= 1)
{
OpenPOP.MIMEParser.Message m = popClient.GetMessageHeader(i);//获得邮件头
TreeNode node;
if (m != null)
{
if (m.Subject.Length > 0)
node = listMessages.Nodes.Add(m.Subject);
else
node = listMessages.Nodes.Add("无主题");
node.Tag = i.ToString();
}
Thread.Sleep(1);
}
MessageBox.Show(this, "邮件接收完毕!");
}
private void button1_Click(object sender, EventArgs e)
{
ReceiveMails();
}
private void listMessages_AfterSelect(object sender, TreeViewEventArgs e)
{
OpenPOP.MIMEParser.Message m = popClient.GetMessage(Int32.Parse(listMessages.SelectedNode.Tag.ToString()), false);//读出邮件全部内容
if (msgs["msg" listMessages.SelectedNode.Tag.ToString()] == null)
msgs.Add("msg" listMessages.SelectedNode.Tag.ToString(), m);//存入哈希表
if (m != null)
{
if (m.MessageBody.Count > 0)
{
txtMessage.Text = (string)m.MessageBody[m.MessageBody.Count - 1];
webBrowser1.DocumentText = (string)m.MessageBody[m.MessageBody.Count - 1];
}
listAttachments.Nodes.Clear();
string filenm="";
for (int i = 0; i < m.AttachmentCount; i )
{
OpenPOP.MIMEParser.Attachment att = m.GetAttachment(i);//获取邮件附件列表
filenm = m.GetAttachmentFileName(att);
if (filenm != "body.html" && filenm != "body.htm")//附件列表中去除邮件正文
listAttachments.Nodes.Add(filenm).Tag = att;
}
#region 邮件详细信息
DataSet ds = new DataSet();
ds.Tables.Add("table1");
ds.Tables[0].Columns.Add("Header");
ds.Tables[0].Columns.Add("Value");
ds.Tables[0].Rows.Add(new object[] { "AttachmentBoundry", m.AttachmentBoundry });
ds.Tables[0].Rows.Add(new object[] { "AttachmentBoundry2", m.AttachmentBoundry2 });
ds.Tables[0].Rows.Add(new object[] { "AttachmentCount", m.AttachmentCount });
for (int j = 0; j < m.CC.Length; j )
ds.Tables[0].Rows.Add(new object[] { "CC", m.CC[j] });
for (int j = 0; j < m.TO.Length; j )
ds.Tables[0].Rows.Add(new object[] { "TO", m.TO[j] });
ds.Tables[0].Rows.Add(new object[] { "ContentEncoding", m.ContentEncoding });
ds.Tables[0].Rows.Add(new object[] { "ContentLength", m.ContentLength });
ds.Tables[0].Rows.Add(new object[] { "ContentType", m.ContentType });
ds.Tables[0].Rows.Add(new object[] { "FROM", m.From });
ds.Tables[0].Rows.Add(new object[] { "FromEmail", m.FromEmail });
ds.Tables[0].Rows.Add(new object[] { "HasAttachment", m.HasAttachment });
ds.Tables[0].Rows.Add(new object[] { "MessageID", m.MessageID });
ds.Tables[0].Rows.Add(new object[] { "MimeVersion", m.MimeVersion });
ds.Tables[0].Rows.Add(new object[] { "ReturnPath", m.ReturnPath });
ds.Tables[0].Rows.Add(new object[] { "Subject", m.Subject });
ds.Tables[0].Rows.Add(new object[] { "Date", m.Date });
ds.Tables[0].Rows.Add(new object[] { "Received", m.Received });
ds.Tables[0].Rows.Add(new object[] { "HTML", m.HTML });
ds.Tables[0].Rows.Add(new object[] { "Importance", m.Importance });
ds.Tables[0].Rows.Add(new object[] { "ReplyTo", m.ReplyTo });
ds.Tables[0].Rows.Add(new object[] { "ReplyToEmail", m.ReplyToEmail });
for (int j = 0; j < m.Keywords.Count; j )
ds.Tables[0].Rows.Add(new object[] { "Keyword", (string)m.Keywords[j] });
for (IDictionaryEnumerator i = m.CustomHeaders.GetEnumerator(); i.MoveNext(); )
ds.Tables[0].Rows.Add(new object[] { (string)i.Entry.Key, (string)i.Entry.Value });
gridHeaders.DataMember = ds.Tables[0].TableName;
gridHeaders.DataSource = ds;
#endregion
}
}
private void listAttachments_AfterSelect(object sender, TreeViewEventArgs e)
{
OpenPOP.MIMEParser.Attachment att = (OpenPOP.MIMEParser.Attachment)listAttachments.SelectedNode.Tag;
OpenPOP.MIMEParser.Message m = (OpenPOP.MIMEParser.Message)msgs["msg" listMessages.SelectedNode.Tag.ToString()];
if (att != null & m != null)
{
saveFile.FileName = m.GetAttachmentFileName(att);
DialogResult result = saveFile.ShowDialog();
if (result != DialogResult.OK)
return;
//if (m.IsMIMEMailFile(att))//这里MIME 邮件 也通过附件形式直接下载
//{
// result = MessageBox.Show(this, "邮件附件是 MIME 类型,要执行吗?", "MIME mail", MessageBoxButtons.YesNo);
// if (result == DialogResult.Yes)
// {
// OpenPOP.MIMEParser.Message m2 = att.DecodeAsMessage();
// string attachmentNames = "";
// bool blnRet = false;
// if (m2.AttachmentCount > 0)
// for (int i = 0; i < m2.AttachmentCount; i )
// {
// OpenPOP.MIMEParser.Attachment att2 = m2.GetAttachment(i);
// attachmentNames = m2.GetAttachmentFileName(att2) "(" att2.ContentLength " bytes)\r\n";
// }
// blnRet = m.SaveAttachments(System.IO.Path.GetDirectoryName(saveFile.FileName));
// MessageBox.Show(this, "附件 " (blnRet == true ? "保存成功" : "保存失败") "!\r\n\r\n附件:\r\n" attachmentNames);
// }
// else
// {
// MessageBox.Show(this, "附件 " ((m.SaveAttachment(att, saveFile.FileName)) ? "保存成功" : "保存失败") "!");
// }
//}
//else
MessageBox.Show(this, "附件 " ((m.SaveAttachment(att, saveFile.FileName)) ? "保存成功" : "保存失败") "!");
}
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
DialogResult drRet = MessageBox.Show(this, "确定要删除该邮件?", "删除邮件", MessageBoxButtons.YesNo);
if (drRet == DialogResult.Yes)
{
popClient.DeleteMessage(Convert.ToInt32(listMessages.SelectedNode.Tag));
listMessages.SelectedNode.Remove();
drRet = MessageBox.Show(this, "要重新读取邮件列表吗?", "收邮件", MessageBoxButtons.YesNo);
if (drRet == DialogResult.Yes)
ReceiveMails();
}
}
private void AddEvent(string strEvent)
{
lstEvents.Items.Add(strEvent);
lstEvents.SelectedIndex = lstEvents.Items.Count - 1;
}
}
}
【实例截图】

【核心代码】using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Collections;
using System.Threading;
using OpenPOP.POP3;
using OpenPOP;
namespace MailClient
{
public partial class Form1 : Form
{
private POPClient popClient = new POPClient();
private Hashtable msgs = new Hashtable();
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
txtMessage.Text = "";
msgs.Clear();
listMessages.Nodes.Clear();//邮件列表
listAttachments.Nodes.Clear();//附件列表
popClient.AuthenticationBegan = new EventHandler(popClient_AuthenticationBegan);
popClient.AuthenticationFinished = new EventHandler(popClient_AuthenticationFinished);
popClient.CommunicationBegan = new EventHandler(popClient_CommunicationBegan);
popClient.CommunicationOccured = new EventHandler(popClient_CommunicationOccured);
popClient.CommunicationLost = new EventHandler(popClient_CommunicationLost);
popClient.MessageTransferBegan = new EventHandler(popClient_MessageTransferBegan);
popClient.MessageTransferFinished = new EventHandler(popClient_MessageTransferFinished);
}
#region 通讯事件
private void popClient_CommunicationBegan(object sender, EventArgs e)
{
AddEvent("开始连接POP3服务器");
}
private void popClient_CommunicationOccured(object sender, EventArgs e)
{
AddEvent("连接成功!");
}
private void popClient_AuthenticationBegan(object sender, EventArgs e)
{
AddEvent("经行用户验证");
}
private void popClient_AuthenticationFinished(object sender, EventArgs e)
{
AddEvent("验证成功!");
}
private void popClient_MessageTransferBegan(object sender, EventArgs e)
{
AddEvent("开始经行邮件接收");
}
private void popClient_MessageTransferFinished(object sender, EventArgs e)
{
AddEvent("邮件接收完毕!");
}
private void popClient_CommunicationLost(object sender, EventArgs e)
{
AddEvent("关闭连接!");
}
#endregion
/// <summary>
/// 接收邮件,直接收邮件头
/// 陈明新
/// </summary>
private void ReceiveMails()
{
popClient.Disconnect();
popClient.Connect(txtPOPServer.Text, int.Parse(txtPort.Text));
popClient.Authenticate(txtLogin.Text, txtPassword.Text);
int Count = popClient.GetMessageCount();//读取邮件总数
txtTotalMessages.Text = Count.ToString();
txtMessage.Text = "";
msgs.Clear();
listMessages.Nodes.Clear();//邮件列表
listAttachments.Nodes.Clear();//附件列表
for (int i = Count; i >= 1; i -= 1)
{
OpenPOP.MIMEParser.Message m = popClient.GetMessageHeader(i);//获得邮件头
TreeNode node;
if (m != null)
{
if (m.Subject.Length > 0)
node = listMessages.Nodes.Add(m.Subject);
else
node = listMessages.Nodes.Add("无主题");
node.Tag = i.ToString();
}
Thread.Sleep(1);
}
MessageBox.Show(this, "邮件接收完毕!");
}
private void button1_Click(object sender, EventArgs e)
{
ReceiveMails();
}
private void listMessages_AfterSelect(object sender, TreeViewEventArgs e)
{
OpenPOP.MIMEParser.Message m = popClient.GetMessage(Int32.Parse(listMessages.SelectedNode.Tag.ToString()), false);//读出邮件全部内容
if (msgs["msg" listMessages.SelectedNode.Tag.ToString()] == null)
msgs.Add("msg" listMessages.SelectedNode.Tag.ToString(), m);//存入哈希表
if (m != null)
{
if (m.MessageBody.Count > 0)
{
txtMessage.Text = (string)m.MessageBody[m.MessageBody.Count - 1];
webBrowser1.DocumentText = (string)m.MessageBody[m.MessageBody.Count - 1];
}
listAttachments.Nodes.Clear();
string filenm="";
for (int i = 0; i < m.AttachmentCount; i )
{
OpenPOP.MIMEParser.Attachment att = m.GetAttachment(i);//获取邮件附件列表
filenm = m.GetAttachmentFileName(att);
if (filenm != "body.html" && filenm != "body.htm")//附件列表中去除邮件正文
listAttachments.Nodes.Add(filenm).Tag = att;
}
#region 邮件详细信息
DataSet ds = new DataSet();
ds.Tables.Add("table1");
ds.Tables[0].Columns.Add("Header");
ds.Tables[0].Columns.Add("Value");
ds.Tables[0].Rows.Add(new object[] { "AttachmentBoundry", m.AttachmentBoundry });
ds.Tables[0].Rows.Add(new object[] { "AttachmentBoundry2", m.AttachmentBoundry2 });
ds.Tables[0].Rows.Add(new object[] { "AttachmentCount", m.AttachmentCount });
for (int j = 0; j < m.CC.Length; j )
ds.Tables[0].Rows.Add(new object[] { "CC", m.CC[j] });
for (int j = 0; j < m.TO.Length; j )
ds.Tables[0].Rows.Add(new object[] { "TO", m.TO[j] });
ds.Tables[0].Rows.Add(new object[] { "ContentEncoding", m.ContentEncoding });
ds.Tables[0].Rows.Add(new object[] { "ContentLength", m.ContentLength });
ds.Tables[0].Rows.Add(new object[] { "ContentType", m.ContentType });
ds.Tables[0].Rows.Add(new object[] { "FROM", m.From });
ds.Tables[0].Rows.Add(new object[] { "FromEmail", m.FromEmail });
ds.Tables[0].Rows.Add(new object[] { "HasAttachment", m.HasAttachment });
ds.Tables[0].Rows.Add(new object[] { "MessageID", m.MessageID });
ds.Tables[0].Rows.Add(new object[] { "MimeVersion", m.MimeVersion });
ds.Tables[0].Rows.Add(new object[] { "ReturnPath", m.ReturnPath });
ds.Tables[0].Rows.Add(new object[] { "Subject", m.Subject });
ds.Tables[0].Rows.Add(new object[] { "Date", m.Date });
ds.Tables[0].Rows.Add(new object[] { "Received", m.Received });
ds.Tables[0].Rows.Add(new object[] { "HTML", m.HTML });
ds.Tables[0].Rows.Add(new object[] { "Importance", m.Importance });
ds.Tables[0].Rows.Add(new object[] { "ReplyTo", m.ReplyTo });
ds.Tables[0].Rows.Add(new object[] { "ReplyToEmail", m.ReplyToEmail });
for (int j = 0; j < m.Keywords.Count; j )
ds.Tables[0].Rows.Add(new object[] { "Keyword", (string)m.Keywords[j] });
for (IDictionaryEnumerator i = m.CustomHeaders.GetEnumerator(); i.MoveNext(); )
ds.Tables[0].Rows.Add(new object[] { (string)i.Entry.Key, (string)i.Entry.Value });
gridHeaders.DataMember = ds.Tables[0].TableName;
gridHeaders.DataSource = ds;
#endregion
}
}
private void listAttachments_AfterSelect(object sender, TreeViewEventArgs e)
{
OpenPOP.MIMEParser.Attachment att = (OpenPOP.MIMEParser.Attachment)listAttachments.SelectedNode.Tag;
OpenPOP.MIMEParser.Message m = (OpenPOP.MIMEParser.Message)msgs["msg" listMessages.SelectedNode.Tag.ToString()];
if (att != null & m != null)
{
saveFile.FileName = m.GetAttachmentFileName(att);
DialogResult result = saveFile.ShowDialog();
if (result != DialogResult.OK)
return;
//if (m.IsMIMEMailFile(att))//这里MIME 邮件 也通过附件形式直接下载
//{
// result = MessageBox.Show(this, "邮件附件是 MIME 类型,要执行吗?", "MIME mail", MessageBoxButtons.YesNo);
// if (result == DialogResult.Yes)
// {
// OpenPOP.MIMEParser.Message m2 = att.DecodeAsMessage();
// string attachmentNames = "";
// bool blnRet = false;
// if (m2.AttachmentCount > 0)
// for (int i = 0; i < m2.AttachmentCount; i )
// {
// OpenPOP.MIMEParser.Attachment att2 = m2.GetAttachment(i);
// attachmentNames = m2.GetAttachmentFileName(att2) "(" att2.ContentLength " bytes)\r\n";
// }
// blnRet = m.SaveAttachments(System.IO.Path.GetDirectoryName(saveFile.FileName));
// MessageBox.Show(this, "附件 " (blnRet == true ? "保存成功" : "保存失败") "!\r\n\r\n附件:\r\n" attachmentNames);
// }
// else
// {
// MessageBox.Show(this, "附件 " ((m.SaveAttachment(att, saveFile.FileName)) ? "保存成功" : "保存失败") "!");
// }
//}
//else
MessageBox.Show(this, "附件 " ((m.SaveAttachment(att, saveFile.FileName)) ? "保存成功" : "保存失败") "!");
}
}
private void toolStripMenuItem1_Click(object sender, EventArgs e)
{
DialogResult drRet = MessageBox.Show(this, "确定要删除该邮件?", "删除邮件", MessageBoxButtons.YesNo);
if (drRet == DialogResult.Yes)
{
popClient.DeleteMessage(Convert.ToInt32(listMessages.SelectedNode.Tag));
listMessages.SelectedNode.Remove();
drRet = MessageBox.Show(this, "要重新读取邮件列表吗?", "收邮件", MessageBoxButtons.YesNo);
if (drRet == DialogResult.Yes)
ReceiveMails();
}
}
private void AddEvent(string strEvent)
{
lstEvents.Items.Add(strEvent);
lstEvents.SelectedIndex = lstEvents.Items.Count - 1;
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论