C#电子邮件客户端软件设计(开题报告+英文文献+答辩PPT) 第15页
命名控件MailSend
由于在C Sharp语言中,都是以命名控件来组织程序的。而所有的类都归属于一个特定的命名空间下。需要的命名空间系统本身自带了一部分,而且如果系统没有你需要的命名空间的话,就可以自己编写,本节中的这个命名空间就是由于需要而编写的。而调用某一个类中的某个变量成员的方法就是通过 命名空间名.类名.变量成员 来访问的,当然在C Sharp 中如果在程序开始通过Using 命名空间名,就可以直接的象C++那样来访问成员变量,可以说相当的方便,这些都会在程序中体现出来,再次不再做过多的叙述。
5.1 发送邮件类SmtpMail
5.1.1 主要成员变量说明
1) 网络连接类及实例TcpClient tc
为 TCP 网络服务提供客户端连接类TcpClient实例对象tc。TcpClient 类提供了一些简单的方法,用于在同步阻塞模式下通过网络来连接、发送和接收流数据。而实例化的过程也是连接SMTP服务器的过程。它的重载方法之一的两个参数一个为服务器名称字符串,另一个为服务器的埠。
2)提供用于网络访问的基础数据流及其实例 NetworkStream ns
此类提供访问网络的基础数据流的方法。其中最基本也是最重要的两个方法就是Write()和Read()方法,至于参数不再次赘述。
3)一维字符串数组变量FilePath
此字符串数组主要用来存放用户选择的附件的绝对路径名,并在发送带附件的邮件时用到。
4)发送邮件所需的基本参数
比如用于ESMTP等录检验用的用户名、密码,发送邮件需要的收信人,发信人地址以及主题等等在此不再赘述。
5.1.2 主要成员函数说明
1)重载的构造函数 SmtpMail()
此函数主要用于在初始化过程中,把用户选择的附件的路径以参数的形式传给FilePath。
2)添加附件的函数 AddAttachment
传给FilePath的路径,通过这样一个函数就可以循环的动态的添加到IList接口的一个对象中了,方便以后在具体的实现的过程中的使用。
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)将字符串编码为Base64字符串的函数 Base64Encode
由于ESMTP的LOGIN认证机制是采用Base64编码,当用户发出AUTHLOGIN的命令后,服务器返回334的应答码等待用户输入。如果身份确认后服务器返回235的应答码,否则返回失败信息。所以要将用户名和密码转换成Base64编码然后再发给服务器。此函数的作用就是把给定的字符串转换成相应的Base64编码的字符串。
5) 发送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;
}
6) 接受服务器应答的函数 RecvResponse
它的作用就是从网络流中读取服务器返回的字节型的信息,将其转换成字符串型的变量,然后将其返回,可以通过其返回值来判断操作是否成功。具体实现代码如下所示:
private string RecvResponse()
{
int StreamSize=0;
string ReturnValue ="";
//定义一个字节型的数组
byte[] ReadBuffer = new byte[1024] ;
try
{
//从网络流中读取数据,并返回读取的个数
StreamSize=ns.Read(ReadBuffer,0,ReadBuffer.Length);
}
catch (Exception ex)
{
//返回异常信息
MessageBox.Show(ex.ToString ());
}
if (StreamSize!=0)
{
//将当前读取的信息转换成字符串型然后返回
ReturnValue= Encoding.Default.GetString(ReadBuffer).Substring(0,StreamSize);
}
return ReturnValue;
}
7) 重载的函数 Dialog
它们的作用是与服务器交互,发送命令并接收回应。不同的是参数是字符串类型的那个函数,每次发送一条命令,并接受服务器的响应,根据响应的信息来判断交互的结果是否成功。而参数是字符串数组的函数每次发送的是一组命令,用于和服务器的交互,这个函数主要是用于ESMTP服务器的验证的功能,因为验证的过程是一个等待然后又输入的过程,因此将他们放在一个数组中有利于理解和操作。而他们的实现主要是通过调用上面的发送SMTP命令函数SendCommand以及接受SMTP服务器响应的函数RecvResponse来实现的。具体的代码如下所示:
private bool Dialog(string str,string errstr)
{
bool flag=false;
if(str==null||str.Trim()=="")
<< 上一页 [11] [12] [13] [14] [15] [16] [17] [18] 下一页