您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 北交计算机网络13281069_谢洁_用SMTP实现EMAIL客户端
用SMTP实现EMAIL客户端1.训练目的运用各种编程语言实现基于smtp协议的Email客户端软件。通过本实验,能够对网络编程有进一步的理解和掌握,并能够理解smtp协议的细节。2.SMTP实现EMAIL客户端功能程序设计(1)SMTP客户机(运行在发送邮件服务器上)在25号端口建立一个到SMTP服务器(运行在接收邮件服务器上)的TCP连接。(2)客户机和服务器执行一些应用层的握手。SMTP客户机指明发送方的邮件地址和接收方的邮件地址。(3)客户机发送报文,SMTP利用TCP提供的可靠数据传输无差错地将邮件投递打牌接收服务器。(4)客户机如果有另外的报文要发送到该服务器,就在该相同的TCP链接上重复这种处理,否则,它指示TCP关闭连接。3.测试结果与分析(1)使用eclipse执行编写好的SMTP实现EMAIL客户端功能程序,显示如下界面:(2)在界面中填写好信息,点击send按钮,进行邮件发送。(3)邮件发送完成,下面的JtextArea框中显示出发送过程的SMTP客户机和SMTP服务器之间交换的报文脚本。(4)打开邮箱,查看到该邮件已经成功的发送到接收方邮箱之中。(5)SMTP客户机和SMTP服务器之间交换的报文脚本C:helomail.bjtu.edu.cnS:250OKC:AUTHLOGINS:334dXNlcm5hbWU6C:MTMyODEwNjlAYmp0dS5lZHUuY24=S:334UGFzc3dvcmQ6C:MTMyNDM1S:235AuthenticationsuccessfulC:MAILFROM:13281069@bjtu.edu.cnS:250MailOKC:RCPTTO:519399762@qq.comS:250MailOKC:DATAS:354EnddatawithCRLF.CRLFC:Subject:用SMTP实现EMAIL客户端实验C:From:13281069@bjtu.edu.cnC:To:519399762@qq.comC:C:测试文本内容:用SMTP实现EMAIL客户端实验C:.S:250MailOKqueuedasMp5wygBHKAUiDj9WHvDBAA--.16623S2C:QUITS:221Bye分析:从上面客户机与服务器交换报文脚本信息中可以看出,客户机程序从邮件服务器bjtu.edu.cn向邮件服务器qq.com发送了一个报文,报文的首部为:Subject:用SMTP实现EMAIL客户端实验From:13281069@bjtu.edu.cnTo:519399762@qq.com在报文首部之后,紧接着是一个空白行,然后是报文的主体。该客户机发送的命令:HELO(是HELLO的缩写)、MAILFROM、RCPTTO、DATA以及QUIT完成了客户机与服务器的握手、指明发送方和接收方的邮件地址、告诉服务器将要传送邮件内容以及结束等。客户机通过发送一个包含一个句点的行,告诉服务器该报文结束了。(按照ASCII码的表示方法,每个报文以CRLF.CRLF结束,其中的CR和LF分别表示回车和换行。)服务器对每条指令做出回答,其中每个回答含有一个回答码和一些英文解释。4.实验总结通过本实验,我对网络编程有进一步的理解和掌握,并能够理解smtp协议的细节。通过实验中程序运行输出的SMTP客户机与SMTP服务器之间报文脚本的交换,我可以更清楚的看到在整个邮件发送的过程中服务器和客户机之间是怎么进行信息交换的,同时我还了解了邮件的报文格式,对报文的首部和报文的主体部分有了更加深刻的了解。5.SMTP实现EMAIL客户端功能程序代码User.java文件:packagemailClient;publicclassUser{privateStringbase64Name=;privateStringbase64Pass=;//用于用户登陆publicvoidsetNameAndPass(Stringname,Stringpass){this.base64Name=name;this.base64Pass=pass;}publicStringgetBase64Name(){returnbase64Name;}publicStringgetBase64Pass(){returnbase64Pass;}}SendMail.java文件:packagemailClient;importjava.awt.BorderLayout;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.IOException;importjava.io.PrintWriter;importjava.net.InetAddress;importjava.net.Socket;importjava.util.Scanner;importorg.apache.commons.codec.binary.Base64;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JPasswordField;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;importsun.misc.*;publicclassSendMailextendsJFrame{privatestaticfinallongserialVersionUID=1L;privateinttestNum=0;//测试18k的文件经过加密后循环次数privateJTextFieldfrom;privateJTextFieldto;privateJTextFieldsubject;privateJTextFieldserver;privateJTextAreamessage;privateJTextAreacomm;privateScannerin;privatePrintWriterout;privateJTextFielduserName;privateJPasswordFielduserPass;privateStringcurrReponse=;//辅助性显示当前从服务器传回来的指令privateUseruser=newUser();publicSendMail(){//设置framesetSize(600,400);setTitle(MySMTPClient);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setLocationRelativeTo(null);//addtoframeJPanelp1=newJPanel(newGridLayout(3,4));p1.add(newJLabel(from:));from=newJTextField(20);p1.add(from);p1.add(newJLabel(userPass:));userName=from;userPass=newJPasswordField(20);Stringname=userName.getText().toString().trim();Stringpass=newString(userPass.getPassword());if(name!=null&&pass!=null&&!name.equalsIgnoreCase()&&!pass.equalsIgnoreCase()){name=newString(Base64.encodeBase64(name.getBytes()));pass=newString(Base64.encodeBase64(pass.getBytes()));user.setNameAndPass(name,pass);}p1.add(userPass);p1.add(newJLabel(to:));to=newJTextField(20);p1.add(to);p1.add(newJLabel(SMTPserver:));server=newJTextField(20);p1.add(server);subject=newJTextField(20);p1.add(newJLabel(Subject:));p1.add(subject);add(p1,BorderLayout.NORTH);JPanelp2=newJPanel(newGridLayout(2,1));message=newJTextArea();p2.add(newJScrollPane(message));comm=newJTextArea();comm.setEditable(false);comm.setText(Waiting...);p2.add(newJScrollPane(comm));add(p2,BorderLayout.CENTER);JPanelp3=newJPanel();JButtonsendButton=newJButton(send);p3.add(sendButton);add(p3,BorderLayout.SOUTH);sendButton.addActionListener(newActionListener(){@SuppressWarnings(deprecation)@OverridepublicvoidactionPerformed(ActionEvente){comm.setText();sendMail(server.getText().trim(),from.getText().trim(),to.getText().trim(),message.getText(),subject.getText(),userName.getText(),userPass.getText());}});setVisible(true);}@SuppressWarnings(restriction)privatevoidsendMail(Stringserver,Stringfrom,Stringto,Stringmessage,Stringsub,Stringuser_name,Stringkey){try{Sockets=newSocket(server,25);try{in=newScanner(s.getInputStream());out=newPrintWriter(s.getOutputStream());StringhostName=InetAddress.getLocalHost().getHostAddress();currReponse=in.nextLine();if(currReponse.substring(0,3).compareToIgnoreCase(220)==0){send(helo+server);//握手,成功返回220表示服务就位,或者可以使用ehlo命令receive();}if(currReponse.substring(0,3).compareToIgnoreCase(250)==0){send(AUTHLOGIN);//发送登陆命令receive();BASE64Encodercoder=newBASE64Encoder();send(coder.encode(user_name.getBytes()));receive();send(coder.encode(ke
本文标题:北交计算机网络13281069_谢洁_用SMTP实现EMAIL客户端
链接地址:https://www.777doc.com/doc-2621523 .html