天天看点

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

大家好,今天给大家介绍基于C#+asp.net+cs的电子邮件收发系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦

文章目录:

  • 基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)
    • 1、项目简介
    • 2、资源详情
    • 3、关键词:
    • 4、毕设简介
    • 5、资源下载

1、项目简介

  1. 为了方便用户快捷地收发邮件,本课题利用SMTP协议和POP3协议,经过前期对系统的需求分析和对相关协议的了解,设计并实现了简单的电子邮件收发系统。为了保证本系统功能的完整性,在实现该系统过程中,设计了邮件用户注册模块,当用户首次使用本系统时,须注册一个邮件账号,然后才能进行其他的操作。作为一个电子邮件客户端,邮件的发送与收取是其核心功能,本系统邮件发送块实现电子邮件的发送,支持邮件的单个发送和群发,在邮件收取块,实现了电子邮件的简单收取。另外还增加了地址薄管理块让用户更方便地管理自己的联系人,对联系人进行添加、修改、删除等。

2、资源详情

项目难度:中等难度

适用场景:相关题目的毕业设计

配套论文字数:9688个字31页

包含内容:整套源码+完整毕业论文

3、关键词:

电子邮件;SMTP;POP3;邮件收发系统

4、毕设简介

提示:以下为毕业论文的简略介绍,项目源码及完整毕业论文下载地址见文末。

1 引言

1.1 邮件客户端相关介绍

电子邮件(Electronic Mail、E-mai1)又称电子信箱,它是—种用电子手段提供信息交换的通信方式,是应用于网络上的使用最广泛的网络功能之一。到目前为止,可以说电子邮件是Internet资源使用最多的一种服务,E-mail不只局限于信件的传递,还可用来传递文件、声音及图形、图像等不同类型的信息。电子邮件不是“终端到终端”的服务,而是被称为“存贮转发式”的服务。“存贮转发式”正是电子信箱系统的核心,利用存贮转发可进行非实时通信,属异步通信方式。电子邮件的发送几乎是即时的并且可以一次发送给多个人,发送和接收主要通过SMTP协议和POP3协议来实现,经过几十年的发展,电子邮件系统已经形成了完善的技术体系。

电子邮件系统是一种新型的信息系统,是通信技术和计算机技术结合的产物。电子邮件系统采用“存储转发”的机制来完成电子邮件的收发。邮件服务器处理发送和接收消息的事项,并在处理电子邮件的过程中与其他机器进行通信。

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图1工作流程图

1.2 课题背景

省略

1.3 现状分析

电子邮件来源于专有电子邮件系统,早在Internet流行以前,电子邮件就已经存在了,是在主机-多终端的主从式体系中从一台计算机终端向另一台计算机终端传送文本信息的相对简单的方法下发展起来的。

省略

2 电子邮件相关协议

开发邮件客户端程序,就不得不用到RFC822邮件格式、SMTP协议和POP3协议。RFC822定义了用于电子邮件报文的格式,即RFC822定义了POP3、SMTP以及其他电子邮件传输协议所提交、传输的内容;POP3是因特网上传输邮件的第一个协议,也是一个离线协议;SMTP是Internet上传输电子邮件的标准协议,用于提交和传送电子邮件,规定了主机之间传输电子邮件的标准交换格式和邮件在链路层上的传输机制。

2.1 RFC822邮件格式

RFC822中对电子邮件的格式加以定义,内容全部由ASCII字符组成,就是通常所说的文本文件,因而标准将它称为Internet文本信件(Internet Text Messages)。为了支持多媒体文档的传输,1996年又发表了一系列的关于MIME(Multipurpose Internet mail Extensions)格式的定义。RFC822定义的邮件格式由两部分组成:邮件头(也称信封)和邮件内容。邮件头包括与传输、投递邮件有关的信息;邮件内容包括标题和正文。

2.2 SMTP协议

SMTP( Simple Mail Transfer Protocol)简单邮件传输协议,是目前使用最广泛的发送电子邮件的协议。SMTP通常用于把电子邮件从客户机传输到服务器,以及从某一服务器传输到另一个服务器。

2.2.1 SMTP协议简介

简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),该环境可以包括一个网络,几个网络或一个网络的子网。传送系统(或IPCE)不是一对一的,进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信,邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送,更特别的是,邮件可以通过不同网络上的主机进行接力式传送。

SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方向传送。

一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。

SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;当两者不在同一个传送服务下时,通过中继SMTP服务器传送,为了能够对SMTP服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。

SMTP的工作过程有一下几个过程有:(Mail)基本发送过程,向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终端和打开关闭交换等。

2.2.2 SMTP的命令与应答

SMTP定义了14个命令,它们是:

HELO

MAIL FROM:

RCPT TO:

DATA

RSET

SEND FROM:

SOML FROM:

SAML FROM:

VRFY

EXPN

HELP [ ]

NOOP

QUIT

TURN

其中使得SMTP工作的基本的命令有7个,分别为:HELO,MAIL,RCPT,DATA,REST,NOOP和QUIT。下面分别介绍如下:

HELO–发件方向收件方问候,命令后面是发件人的服务器地址或标识。收件方回答OK时标识自己的身份。问候和确认过程表明两台机器可以进行通信,同时状态参量被复位,缓冲区被清空。

MAIL–这个命令用来开始传送邮件,它的后面跟随发件方邮件地址(返回邮件地址)。它也用来当邮件无法送达时,发送失败通知。为保证邮件的成功发送,发件方的地址应是被对方或中间转发方同意接受的,这个命令会清空有关的缓冲区,为新的邮件做好准备。

RCPT --这个命令告诉收件方收件人的邮箱。当有多个收件人时,需要多次使用该命令,每次只能指明一个人。如果接收方服务器不同意转发这个地址的邮件,它必须报550错误代码通知发件方;如果服务器同意转发,它要更改邮件发送路径,把最开始的目的地(该服务器)换成下一个服务器。

DATA–收件方把该命令之后的数据作为发送的数据。数据被加入数据缓冲区中,以单独一行是"."的行结束数据。结束行对于接收方意味着立即开始缓冲区内的数据传送,传送结束后清空缓冲区;如果传送接受,接收方回复OK。

REST–这个命令用来通知收件方复位,所有已存入缓冲区的收件人数据、发件人数据和待传送的数据都必须清除,接收方必须回答OK。

NOOP–这个命令不影响任何参数,只是要求接收方回答OK,不会影响缓冲区的数据。

QUIT–SMTP要求接收方必须回答OK,然后中断传输。在收到这个命令并回答OK前,收件方不得中断连接,即使传输出现错误。发件方在发出这个命令并收到OK答复前,也不得中断连接。

对SMTP命令的响应是多样的,它确定了在邮件传输过程中请求和处理的同步,也保证了发送SMTP知道接收SMTP的状态。每个命令必须有且只有一个响应。

SMTP响应由三位数字组成,其后跟一些文本。数字决定了下一个应该进入的状态,而文本对人是有意义的。三位的响应已经包括了足够的信息,不用再阅读文本,文本可以直接抛弃或者传递给用户。特别的是,文本是与接收和环境相关的,所以每次接收到的文本可能不同。在附录E中可以看到全部的响应码。正规的情况下,响应由下面序列构成:三位的数字,一行文本和一个,或者也可以是一个多行响应。只有EXPN和HELP命令可以导致多行应答,然而对所有命令,多行响应都是允许的。

SMTP协议传送邮件的应答:

500 格式错误,命令不可识别(此错误也包括命令行过长)

501 参数格式错误

502 命令不可实现

503 错误的命令序列

504 命令参数不可实现

211 系统状态或系统帮助响应

214 帮助信息

220 服务就绪

221 服务关闭传输信道

421 服务未就绪,关闭传输信道(当必须关闭时,此应答可以作为对任何命令的响应)

250 要求的邮件操作完成

251 用户非本地,将转发向

450 要求的邮件操作未完成,邮箱不可用(例如,邮箱忙)

550 要求的邮件操作未完成,邮箱不可用(例如,邮箱未找到,或不可访问)

451 放弃要求的操作;处理过程中出错

551 用户非本地,请尝试

452 系统存储不足,要求的操作未执行

552 过量的存储分配,要求的操作未执行

553 邮箱名不可用,要求的操作未执行(例如邮箱格式错误)

354 开始邮件输入,以.结束

554 操作失败

2.3 POP3协议

POP3(Post office Protrol,邮局协议,第3版)是Internet上传输电子邮件的第一个标准协议,也是一个离线协议。POP3为客户机提供了发送信任状(用户名和密码),这样就可以规范对电子邮件的访问。POP3是绝大多数邮件收发程序使用的协议,用户接收邮件时,一般都使用该协议。

2.3.1 POP3协议简介

POP3协议适用于C/S结构的脱机模型的电子邮件协议。在POP3协议下,当客户机与服务器连接并查询电子邮件时,被客户机所指定的将被下载的邮件都将被程序下载到客户机,下载后客户机可进行读取,修改等操作,而无需与服务器进一步交互。

POP3客户向POP3服务器发送命令并等待响应,POP3命令采用命令行形式,用ASCII码表示。

服务器响应是由一个单独的命令行组成,或多个命令行组成,响应第一行以ASCII文本+OK或-ERR指出相应的操作状态。

在POP3协议中有三种状态,即认可状态,处理状态和更新状态。

当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后重返认可状态。

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图2 POP3协议与三种状态间的关系

2.3.2 POP3的命令和应答

一般情况下,大多数现有的POP3客户端与服务器执行采用ASCII明文发送用户名和口令,在认可状态等待客户连接的情况下,客户发出连接,并由命令user/pass对在网络上发送明文用户名和口令给服务器 进行身份确认。一旦确认成功,便转入处理状态。为了避免发送明文口令的问题,有一种新的认证方法,命令为APOP,使用APOP,口令在传输之前被加密。

当第一次与服务器连接时,POP3服务器向客户机发送一个ASCII码问候,这个问候由一串字符组成对每个客户机是唯一的,与当时的时间有关,然后客户机把它的纯文本口令附加到从服务器接收到的字符串之后,然后计算出结果字符串的MD5单出函数消息摘要,客户机把用户名与MD5消息摘要作为APOP命令的参数一起发送出去。

一开始便是客户端与服务器的连接,端口设为POP3协议默认的110。 客户端连接服务器成功后,服务器会返回以下信息: +OK…… 字符+OK是POP3协议的返回信息。它的回应信息不像SMTP协议那样用丰富多变的数字表示,只有两个:+OK或者-ERR。其中,+OK表示连接成功,而-ERR则表示连接失败。 接下来,客户端输入USER <用户名> 该命令告诉服务器你的用户名。注意,有些服务器会区分大小写字母的。服务器返回+OK后,客户端输入PASS <口令> 服务器返回+OK后,还返回一些邮箱的统计信息,比如:+OK 1 message(s) [1304 byte(s)] 不同的服务器返回的信息格式不太一样,所以我们可以用STAT命令来查看邮箱的情况。STAT命令的回应中有两个数字,分别表示邮件的数量和邮件的大小。如果信箱里有信,就可以用RETR命令来获取邮件的正文。RETR命令的格式为: RETR <邮件编号> 如果返回结果第一行是+OK信息,则表示成功。第二行起便是邮件的正文。最后一行和SMTP协议一样,是一个单独的英文句号,表示邮件的结尾部分。把邮件存储起来后要用DELE命令删除邮箱中的邮件,否则原有的邮件会继续保留在服务器上,一旦邮件一多,你的邮箱就爆了。DELE命令的格式为: DELE <邮件编号> 如果删错了,可以用RSET命令来恢复所有已被删除的邮件。条件是你还没有退出,一旦退出,邮件便不能恢复了。全部完成以后,输入QUIT命令就可以退出POP3服务器了。

表1 pop3协议命令码

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

3 系统需求分析

3.1 功能需求

作为一个电子邮件客户端,其核心功能是能够发送和接收邮件,其他附加功能如地址薄管理等也是不可少的。

3.1.1 邮件发送需求

主要要求能实现邮件的发送,不仅能实现单个发送而且还能实现群发,同时要求能够发送附件。

3.1.2 邮件接收需求

要求能实现电子邮件的接收,不仅能实现邮件文本的接收而且还能实现附件的接收,同时具有提示发件人,接收日期。

3.1.3 附加功能需求

附件功能主要有地址薄管理,用户能方便地实现对联系人的管理。

3.2 研究思路

根据需求,本系统按照如下几个模块的设计的。

3.2.1 用户注册块

用户只有在注册邮件账号后才能进行其他操作。

3.2.2 邮件发送块

邮件发送块主要实现邮件的发送,包括群发以及附件的发送。

3.2.3 邮件接收块

主要实现邮件文本信息的收取,包括附件的收取,同时具有其他如发件人等信息提示功能。

3.2.4 地址薄管理块

主要是方便用户管理自己的联系人,主要是对联系人的增加,删除等。

4 系统总体功能模块和系统总体流程

4.1 系统总体功能模块

系统的功能模块有账号管理模块、地址薄管理模块、写邮件模块与收邮件模块。

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图3 系统功能模块图

4.2 系统流程

当用户打开客户端时,需要注册一个账号进行邮件的收取等操作。

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图4 流程图

5 系统功能实现

5.1 新建账号模块

5.1.1 模块功能

用户运行系统时,需要新建一个邮件账号,在这个信件账号的过程中,需要指定SMTP服务器以及SMTP的端口。本模块主要实现邮件账号的注册。

5.1.2 核心实现

  1. 网络连接类及实例TcpClient

    为TCP网络服务提供客户端连接类TcpClient实例对象tc。TcpClient类提供了一些简单的方法,用于在同步阻塞模式下通过网络来连接、发送和接收流数据,而实例化的过程也是连接SMTP服务器的过程。

    Privite TcpClient tc;

  2. 提供用于网络访问的基础数据流及其实例 NetworkStream

    此类提供访问网络的基础数据流的方法。其中最基本也是最重要的两个方法就是Write()和Read()方法。

    private NetworkStream ns;

  3. 一维字符串数组变量FilePath

    此字符串数组主要用来存放用户选择的附件的绝对路径。

    private string[] FilePath;

  4. 发送接收邮件所需的基本参数

    UserName; // 用于调用发送邮件类的用户名

    PassWd; // 用于调用发送邮件类的密码

    MailAddress;// 用于调用发送邮件类发送邮件人地址

    AccountName; // 新建的帐户名

    SmtpName; // 用于调用发送邮件类的SMTP服务器名

    SmtpPort=25;

    PopName; // 用于调用接收邮件的pop服务器名

    PopPort=110;

5.1.3 运行界面

指定收发邮件的必须参数之后,再回到系统的主界面。

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图5 新用户注册

5.2 发送邮件模块

5.2.1 模块功能

在新建账号的过程中已经指定了邮件地址和账号名称,所以默认将以这些参数来发送邮件,通过调用参数的不同程序会自动的调用相对应的代码来执行不同的操作。本模块主要实现邮件的发送,支持文本或html形式发送,同时也支持附件的发送。

5.2.2 核心实现

1 重载的构造函数 SmtpMail()

此函数主要用于在初始化过程中,把用户选择的附件的路径以参数的形式传给FilePath。

public SmtpMail(ArrayList array)
        {   //在重载构造函数的同时,将FilePath初始化
            FilePath = new string[array.Count];
            Attachments = new System.Collections.ArrayList();
            for (int i = 0; i < array.Count; i++)
            {
                FilePath[i] = array[i].ToString();
            }
            if (FilePath != null)
            {
                AddAttachment(FilePath);
            }
   }
           

2 添加附件的函数AddAttachment

传给FilePath的路径,通过这样一个函数就可以循环的动态的添加到IList接口的一个对象中了,方便以后在具体的实现的过程中的使用。

public void AddAttachment(params string[] FilePath)
{    try
{
           if (FilePath == null)
            {
                throw (new ArgumentNullException("FilePath"));
             }
            for (int i = 0; i < FilePath.Length; i++)
             {
                 Attachments.Add(FilePath[i]);
              }
          }
          catch (Exception ex)
           {
               MessageBox.Show(ex.ToString());
           }
}
           

3 得到上传的附件的文件流GetStream

由于在网络中的操作都是以网络流的形式来实现的,因此先将上传的附件转换成文件流,然后再用Write的方法把这些附件的文件流写入到网络中,来完成发送附件的操作。具体实现代码如下所示:

private string GetStream(string FilePath) 
{ 
//建立文件流对象 
      System.IO.FileStream	FileStr=new System.IO.FileStream(FilePath,System.IO.FileMode.Open); 
      byte[] by=new byte[System.Convert.ToInt32(FileStr.Length)]; 
      FileStr.Read(by,0,by.Length); 
      FileStr.Close(); 
      return(System.Convert.ToBase64String(by)); 
}
           

4 发送SMTP命令的函数SendCommand

这个函数的作用是把SMTP命令的字符串转换成对应的字节型值(C#中规定的Write方法只能写入字节型的数据)然后写入网络中,如果操作成功就返回一个标志为真的布尔型变量,如果操作失败或者发生异常就返回标志为假的布尔型变量。具体代码如下所示:

private bool SendCommand(string str) 
{ 
		//定义一个数组
		byte[] WriteBuffer; 
		//设定一个布尔类型的变量
		bool state=false; 
		WriteBuffer = Encoding.Default.GetBytes(str);
		//加入防错机制,可以有效提高程序运行的效率和捕获出错信息
		try
		{
			//向网络中写入数据
			ns.Write(WriteBuffer,0,WriteBuffer.Length); 
			state=true;
		}
		catch(Exception ex)
		{
			//返回出错信息
			MessageBox.Show (ex.ToString ());
			state=false;
		}
		//返回标志位
		return state;
}
           

5 邮件发送程序SendMail

具体的实现SMTP协议的程序正是通过它一步一步实现并最终实现发送简单邮件甚至带附件的邮件的功能。而它的实现是调用以上给出的各个函数的结果。以下就简单的通过几个SMTP命令的格式来实现。

private bool SendEmail() 
{ 
	//连接网络 
	try 
	{
		//建立一个TCP连接
		tc=new TcpClient(mailserver, mailserverport); 
	}
	catch
	{
		MessageBox.Show ("连接失败","请确认");
		return false; 
	}
	//获取当前流的资料
	ns = tc.GetStream(); 
	SMTPCodeAdd(); 
	//验证网络连接是否正确 
	if(RightCodeHT[RecvResponse().Substring(0,3)]==null) 
	{
		return false; 
	}
	string[] SendBuffer; 
	string SendBufferstr; 
	//进行SMTP验证 
	if(ESmtp) 
	{
		SendBuffer=new String[4]; 
		SendBuffer[0]="EHLO " + mailserver + enter; 
		SendBuffer[1]="AUTH LOGIN" + enter; 
       //核对用户名和密码
		SendBuffer[2]=Base64Encode(username) + enter; 
		SendBuffer[3]=Base64Encode(password) + enter; 
if(!Dialog(SendBuffer,"SMTP服务器验证失败,请核对用户名和密码"))
		return false; 
	}
	else 
	{   SendBufferstr="HELO " + mailserver + enter; 
       if(!Dialog(SendBufferstr,"")) 
       return false; 
	}
   //核对发件人地址
	SendBufferstr="MAIL FROM:<" + From + ">" + enter; 
	if(!Dialog(SendBufferstr,"发件人地址错误,或不能为空")) 
	return false; 
	//把传过来的收件人的地址分割然后提交给服务器
	string split=";";
	string []address=Regex.Split (Recipient,split);
	SendBuffer=new string [address.Length];
	for(int i=0;i<SendBuffer.Length;i++)
	{
		SendBuffer[i]="RCPT TO:<" +address[i]+">" + enter;
	}
	if(!Dialog(SendBuffer,"收件人地址有误")) 
	return false; 
    //发送相关的邮件正文
	SendBufferstr="DATA" + enter; 
	if(!Dialog(SendBufferstr,"")) 
	return false; 
    //提示发件人信息
	SendBufferstr="From:" + FromName + "<" + From +">" +enter;
SendBufferstr += enter + "." + enter; 
	if(!Dialog(SendBufferstr,"错误信件信息")) 
	return false; 
   //断开连接
	SendBufferstr="QUIT" + enter; 
	if(!Dialog(SendBufferstr,"断开连接时错误")) 
		return false; 
	ns.Close(); 
	    tc.Close();
	FilePath=null;
	return true; 
}
           

5.2.2 运行界面

发信时可选择相关的邮箱账号来进行邮件发送,也可选择相关的收件人。

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图6 发送邮件

5.3 接收邮件模块

5.3.1 模块功能

可收取选中的邮件账号邮件,也可收取新邮件账号的邮件。当选中指定的邮件账号收取邮件时,会提示相关的服务器地址、用户名和密码。

5.3.2 核心实现

1 连接服务器并返回邮件总数

public int connect()
  {
       //连接POP3服务器
        OpenPOP.POP3.Utility.Log = true;
        popClient.Disconnect();
        popClient.Connect(POPServer, int.Parse(port));
        popClient.Authenticate(login, password);
        //得到邮件总数
         count = popClient.GetMessageCount();
         msgs.Clear();
         return count;
}
           

2 接收邮件

public void receiveMail(int beginIndex, int endIndex)
 {      // 选取邮件数
          for (int i = beginIndex; i <= endIndex; i++)
          {
               receiveMail(i);
           }
  }
           

5.3.3 运行界面

当要收取新邮件账号邮件时需重新输入相应的服务器地址、用户名和密码。收取邮件运行界面如图7:

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图7 接收邮件

5.4 地址薄模块

5.4.1 模块功能

可以对地址薄管理,即可以添加、删除联系人,也可以修改某个联系人基本信息。

5.4.2 核心实现

1 增加联系人

private void button1_Click(object sender, EventArgs e)
        {
            string txt2;
            string txt3;
            txt2 = textBox2.Text;
            txt3 = textBox3.Text;
            // 判断邮箱地址是否正确
            if (txt2.Contains("@") == false)
            {
                MessageBox.Show("邮箱地址错误!");
            }
            else
            {
                //读取数据库
               LName = this.textBox1.Text;
                MAddress = this.textBox2.Text;
                PhoneNo = this.textBox3.Text;
                Qq = this.textBox4.Text;
                Mobile = textBox5.Text;
                Address = this.textBox6.Text;
                //连接数据库
Stringconn="provider=Microsoft.Jet.OLEDB.4.0;
DataSource="+Application.StartupPath+"\\Manage.mdb"; 
OleDbConnection myconn = new OleDbConnection(conn);
myconn.Open();
//向数据库中插入联系人信息
string insert="insert into
lianxiren(Name,Mailbox,Phone,QQ,Mobile,Address) values('" + Add.LName + "','" + Add.MAddress + "','" + Add.PhoneNo + "','" + Add.Qq + "','" + Add.Mobile + "','" + Add.Address + "')";
OleDbCommand cmd = new OleDbCommand(insert, myconn);
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    myconn.Close();
                }
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
        }
           

2 修改或删除联系人

修改联系人:

private void button1_Click(object sender, EventArgs e)
        {
            string txt2;
            string txt3;
            txt2 = textBox2.Text;
            txt3 = textBox3.Text;
            if (txt2.Contains("@") == false)
            {
                MessageBox.Show("邮箱地址错误!");
            }
            else
            {
                //调用选中账号的相关信息 
                Add.LName = this.textBox1.Text;
                Add.MAddress = this.textBox2.Text;
                Add.PhoneNo = this.textBox3.Text;
                Add.Qq = this.textBox4.Text;
                Add.Mobile = textBox5.Text;
                Add.Address = this.textBox6.Text;
                string conn = "provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Application.StartupPath + "\\Manage.mdb";
                OleDbConnection myconn = new OleDbConnection(conn);
                myconn.Open();
                //修改联系人属性
                string sql = "update lianxiren set Mailbox
='" + Add.MAddress + "',Phone='" + Add.PhoneNo + "',QQ='" + Add.Qq + "',Mobile='" + Add.Mobile + "',Address='" + Add.Address + "' where Name = '" + Add.LName + "'";
                OleDbCommand cmd = new OleDbCommand(sql, myconn);
                try
                {
                    cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                finally
                {
                    myconn.Close();
                }
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
        }
           

删除联系人:

private void button3_Click(object sender, EventArgs e)
        {   //调用选中的账号的信息
            Add.LName = this.textBox1.Text;
            Add.MAddress = this.textBox2.Text;
            Add.PhoneNo = this.textBox3.Text;
            Add.Qq = this.textBox4.Text;
            Add.Mobile = textBox5.Text;
            Add.Address = this.textBox6.Text;
            string conn = "provider=Microsoft.Jet.OLEDB.4.0;
DataSource="+Application.StartupPath + "\\Manage.mdb";
            OleDbConnection myconn = new OleDbConnection(conn);
            myconn.Open();
           //删除选中联系人
            string sql = "delete from lianxiren where Name = '" + Add.LName + "'";
            OleDbCommand cmd = new OleDbCommand(sql, myconn);
            try
            {
                cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            finally
            {
                myconn.Close();
            }
            this.DialogResult = DialogResult.OK;
            this.Close();
    }
           

5.4.3 运行界面

当对地址薄操作时,可增加联系人,修改属性和删除联系人。如图8:

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图8 地址薄管理

6 系统功能测试

6.1 发送邮件测试

本测试主要是对发送文本以及附件的测试

1 发送文本邮件给收信人

测试中用新浪的邮箱分别往新浪的邮箱以及163的邮箱发送文本邮件,均可以发送成功,同时具有群发功能,如图9:

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图9 发送文本文件

2. 发送附件给收件人

测试中用新浪的邮箱分别往新浪的邮箱以及163的邮箱发送附件,均可以发送成功。如图10:

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图10 发送附件

6.2 接收邮件测试

本测试主要是对单个邮件收取测试,在选取相应的邮件账号后,可以对单个邮件进行收取,也可以对新设置的邮件账号进行邮件的收取,如图11:

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图11 接收邮件

6.3 地址薄管理测试

本测试主要是对地址薄管理的测试,包括增加、删除、修改联系人等。

1 增加联系人

当点增加按钮时,对联系人的相关属性进行添加。如图 12:

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图12 增加联系人

2. 删除联系人

选中刚才增加的联系人,对其进行删除,如图13:

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图13 删除联系人

3. 修改联系人属性

选中联系人,对其属性进行修改。

C#毕业设计——基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)——电子邮件收发系统基于C#+asp.net+cs的电子邮件收发系统设计与实现(毕业论文+程序源码)

图14 修改联系人属性

6.4 测试结果

经过对系统的测试,本系统能对邮件进行发送,能对邮件进行收取以及对地址薄进行管理。

结 论

省略

参考文献

[1] Charles Petzold[美].杨涛,王建桥,杨晓云,高文雅译.C#程序设计[M].北京:机械工业出版社,2004。

[2] 郭文夷,戴芳胜. Visual C#.NET可视化程序设计[M]. 上海:华东理工大学出版社,2005。

[3] 秦斌,曾斌.C#应用程序开发标准教程[M].上海:上海科学普及出版社,2003。

[4] 仇谷烽,澎洪洪.Visual C#.NET网络编程[M]. 北京:清华大学出版社,2004。

[5] 孙三才,张智凯,许熏尹.C#与.NET Framework实战演练[M].北京:中国铁道出版社,2002。

[6] 曹麒麟,张千里.垃圾邮件与反垃圾邮件技术[M].北京:人民邮电出版社,2003。

[7] 孙维煜,刘杰,胡方霞,陈发吉.C#案例开发[M].北京:中国水利水电出版社,2005。

[8] 欧立奇,康祥顺,马煜.Visual C#案例开发集锦[M].北京:电子工业出版社,2005。

致 谢

省略

5、资源下载

本项目源码及完整论文如下,有需要的朋友可以点击进行下载。如果链接失效可点击下方卡片扫码自助下载。

序号 毕业设计全套资源(点击下载)
本项目源码 基于C#+asp.net+cs的电子邮件收发系统设计与实现(源码+文档)_.net_SMTP_POP3_电子邮件收发系统.zip