当前位置:文档之家› 简单邮件收发系统的设计与实现

简单邮件收发系统的设计与实现

简单邮件收发系统的设计与实现作者:林玉香王豫峰来源:《电脑知识与技术》2011年第35期摘要:目前有很多邮件客户端软件免费提供给用户使用,但是它们却过于复杂和庞大,为了用户能够方便快捷地收发邮件,利用SMTP协议和POP协议,设计并实现了简单但实用的电子邮件收发系统。

关键词:电子邮件;SMTP;POP3;邮件收发中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2011)35-0000-0cThe Design and Realization of Simple Mail Sending/Receiving SystemLIN Yu-xiang,WANG Yu-feng(Nanyang Institute of Technology, Nanyang 473004,China)Abstract: Though there are a lot of free software for sending and receiving mails which are also complicated and huge to users. For users to easily and quickly send and receive mail,we do this software with the rock-bottom protocol of SMTP and POP.Key words:E-mail;SMTP;POP3;send and receive e-mail随着通信网络的迅速发展,电子邮件以其方便、快捷的特性而深受广大网络用户的欢迎。

不论是个人、企业还是政府等,都在通过电子邮件进行日常生活和工作上的联系。

目前收发电子邮件的工具很多,但功能越来越趋于复杂,除了最主要的收发信件功能之外,很多功能显得过于华丽而不太实用。

有鉴于此,在了解RFC底层协议的基础上,开发了这个各种功能相对简单但实用的邮件客户端程序,简化了很多不必要的功能。

1系统总体设计作为一个电子邮件收发系统,邮件的发送与收取是其核心功能,发送模块实现电子邮件的发送,支持邮件的单个发送和群发,邮件接收模块,实现电子邮件的收取。

另外还增加了邮件转发、回复、删除以及地址薄管理等模块,其中地址薄管理模块可以让用户方便地管理自己的联系人,对联系人进行添加、修改、删除等。

2 主要模块设计2.1 邮件发送模块主要成员变量说明1) SmtpClient类此类允许应用程序使用简单邮件传输协议 (SMTP) 来发送电子邮件,在使用SmtpClient类发送电子邮件时必须指定一下信息:用来发送电子邮件的SMTP主机服务器;身份验证的凭据(如果SMTP服务器要求);发件人的电子邮件地址;收件人的电子邮件地址;邮件内容等。

2)MailMessage类此类主要用于指定电子邮件的发送地址、收件人地址等,3)MailAttachment类此类用于构造电子邮件附件,首先实例化MailAttachment类,然后把它附加到MailMessage 对象的Attachments集合中就可以完成向电子邮件中添加附件的功能。

使用MailAttachment类添加邮件附件的代码如下:string[] attaFiles = this.txtAttach.Text.Split(';');if (attaFiles.Length > 0){for (int j = 0; j < attaFiles.Length - 1; j++){Attachment attaFile = new Attachment(attaFiles[j].ToString());message.Attachments.Add(attaFile);}主要成员函数说明1) 邮件发送函数 SendMail()这是整个程序的核心部分,具体实现SMTP协议,以下代码是实现发送邮件的功能。

private void SendEmail(){if (this.txtTo.Text == ""){MessageBox.Show("请输入收件人地址!");}else{ string txtBody;if (htmlEditor1.toolStripCombmailtype.Text == "纯文本邮件"){txtBody = htmlEditor1.richTextBox1.Text;}else{txtBody = htmlEditor1.Text;}string[] name = this.txtTo.Text.Split(';');try{for (int i = 0; i < name.Length - 1; i++){ SmtpClient client = new SmtpClient(smtpServer);eDefaultCredentials = false;client.Credentials = new workCredential(txtFrom, txtPwd);MailAddress from = new MailAddress(txtFrom);MailAddress to = new MailAddress(name[i].ToString());MailMessage message = new MailMessage(from, to);message.Subject = txtSubject.Text;message.SubjectEncoding = System.Text.Encoding.UTF8;message.Body = txtBody.ToString();message.IsBodyHtml = true;//指定信息的主体格式为HTML格式message.BodyEncoding = System.Text.Encoding.UTF8;string[] attaFiles = this.txtAttach.Text.Split(';');if (attaFiles.Length > 0){ for (int j = 0; j < attaFiles.Length - 1; j++){Attachment attaFile = new Attachment(attaFiles[j].ToString());message.Attachments.Add(attaFile);}}client.Send(message);}saveData("已发送");MessageBox.Show("邮件发送成功!");}catch (SmtpException ex){saveData("发件箱");MessageBox.Show("网络不通畅导致发送失败,邮件已经保存到发件箱!");}}} 以上即为发送不带附件的邮件SMTP命令用代码实现的过程2.2 邮件接收模块主要成员变量说明1)DB类:此类用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。

2)message类:此类主要是提供了一些获取邮件信息(比如邮件主题、发件人地址、收件人地址、日期、附件、邮件大小等)的方法。

主要成员函数说明1)ReceiveMails()函数ReceiveMails()函数用于获取指定邮箱中的邮件,并返回当前指定邮箱中所有的邮件列表。

部分主要代码如下:private void ReceiveMails(){OleDbConnection conn = DB.CreateConn();conn.Open();string strSql = "select * from Accounts where MailName='" + this.list.SelectedNode.Text + "'"; OleDbDataAdapter da = new OleDbDataAdapter(strSql, conn);DataSet ds = new DataSet();da.Fill(ds);popClient.Disconnect();popClient.Connect(ds.Tables[0].Rows[0][2].ToString(), 110);int index = this.list.SelectedNode.Text.IndexOf("@");popClient.Authenticate(this.list.SelectedNode.Text.Substring(0, index).ToString(),ds.Tables[0].Rows[0][1].ToString());int Count = popClient.GetMessageCount();//读取邮件总数//txtTotalMessages.Text = Count.ToString();msgs.Clear();listMessages.Nodes.Clear();//邮件列表listAttachments.Nodes.Clear();//附件列表webBrowser1.DocumentText = "";for (int i = Count; i >= 1; i -= 1){MIMEParser.Message m = popClient.GetMessageHeader(i);//获得邮件头TreeNode node;if (m != null){ if (m.Subject.Length > 0)node = listMessages.Nodes.Add(m.Subject);elsenode = listMessages.Nodes.Add("无主题");node.Tag = i.ToString();}Thread.Sleep(1);}MessageBox.Show(this, "邮件接收完毕!"); }2.3 删除邮件主要成员变量说明1) 网络连接类及实例TcpClient tc:为 TCP 网络服务提供客户端连接类TcpClient实例对象tc。

TcpClient 类提供了一些简单的方法,用于在同步阻塞模式下通过网络来连接、发送和接收流数据。

而实例化的过程也是连接SMTP服务器的过程。

相关主题