电子邮件收发系统毕业论文 第8页

电子邮件收发系统毕业论文 第8页
MTP流程,它是由RFC821定义的
1、 首先,客户端尝试建立与邮件服务器建立连接,并且等候邮件服务器返回220 Ready的信息,当客户端收到此信息时,会发出HELO<Mail Server>信息,以响应邮件服务器。
代码如下:
//Socket初始化
                Socket ClientSocket =w new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//连接服务器
                ClientSocket.Connect(OutgoingMailServerStr, OutPort);
//接收响应
                Rec(ClientSocket);
                if (RespondInfo[0] != "220")
                {
                    ClientSocket.Close();
                    throw new MyException("错误发生在与服务器的连接!");
                }
//发送命令“helo <客户端标识(域名或IP)>”
                ClientSocket.Send(System.Text.Encoding.Default.GetBytes("helo " + OutgoingMailServerStr + "\r\n"));
                //接收响应
                Rec(ClientSocket);
                if (RespondInfo[0] != "250")
                {
                    ClientSocket.Close();
                    throw new MyException("错误发生在向服务器标识用户身份!");
                }

                //发送命令“auth login\r\n”
                ClientSocket.Send(System.Text.Encoding.Default.GetBytes("auth login\r\n"));
                //接收响应
                Rec(ClientSocket);
                if (RespondInfo[0] != "334")
                {
                    ClientSocket.Close();
                    throw new MyException("错误发生在认证!");
                }
如果服务器要求验证客户端登录信息,客户端则发送账户和密码进行验证。
具体代码如下:
//发送用户名
                OutUserStr = Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(OutUserStr));
                ClientSocket.Send(System.Text.Encoding.Default.GetBytes(OutUserStr + "\r\n"));
                //接收响应
                Rec(ClientSocket);
                if (RespondInfo[0] != "334")
                {
                    ClientSocket.Close();
                    throw new MyException("错误发生在用户名校验!");
                }

                //发送密码
                OutPassword = Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(OutPassword));
                ClientSocket.Send(System.Text.Encoding.Default.GetBytes(OutPassword + "\r\n"));
                //接收响应
                Rec(ClientSocket);
                if (RespondInfo[0] != "235")
                {
                    ClientSocket.Close();
                    throw new MyException("错误发生在密码校验!");
                }
 
2、 邮件发送是以MAIL FROM:指令开始。首先,客户端发出MAIL FROM:<发件人E-mail地址>的信息,若发件人的E-mail地址正确,会发出250 OK信息,否则会返回550 信息。
设计代码如下:
//发送命令“mail from:<发件人邮箱地址>\r\n”
                ClientSocket.Send(System.Text.Encoding.Default.GetBytes("mail from:<" + AddressStr + ">\r\n"));
                //接收响应
                Rec(ClientSocket);
                if (RespondInfo[0] != "250")
                {
                    ClientSocket.Close();
                    throw new MyException("错误发生在发件人的认证!");
                }


3、 随后客户端会发出RCPT TO:<发件人E-mail Address>指令,以代表收件人的E-mail地址,若正确,服务器返回250,否返回550信息。
代码如下:
for (int a = 0; a < ToCCBCCStrs.Length; a++)
                {
                    //发送命令“rcpt to:<收件人邮箱地址>\r\n”
                    ClientSocket.Send(System.Text.Encoding.Default.GetBytes("rcpt to:<" + ToCCBCCStrs[a] + ">\r\n"));
                    //接收响应
                    Rec(ClientSocket);
                    if (RespondInfo[0] != "250")
                    {
                        ClientSocket.Close();
                        throw new MyException("错误发生在收件人的认证!");
                    }
                }
4、 开始处理邮件标题及内容,客户端会开始先发送出DATA指令,以告知邮件服务器将要开始发送邮件标题及内容。若正确,会响应354信息,随后开始发送邮件标题及内容,每行以<CRLF>结尾。
代码如下:
//发送命令“data\r\n”
                ClientSocket.Send(System.Text.Encoding.Default.GetBytes("data\r\n"));
                //接收响应
                Rec(ClientSocket);
                if (RespondInfo[0] != "354")
                {
                    ClientSocket.Close();
                    throw new MyException("错误发生在数据传输的初始化!");
                }

                //发送数据
                PackMail();
                ClientSocket.Send(System.Text.Encoding.Default.GetBytes(Content));
                //接收响应
                Rec(ClientSocket);
                if (RespondInfo[0] != "250")
                {
                    ClientSocket.Close();
                    throw new MyException("错误发生在数据的发送!");
                }5、 发送邮件标题及内容后,必须发送一个特殊的字符串,以代表邮件内容发送结束,特殊字符串为:<CRLF>.<CRLF>。服务器返回250 OK信息表示发送成功。

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

Copyright © 2007-2012 www.chuibin.com 六维论文网 版权所有