算机网络13281069_谢洁_用SMTP实现EMAIL客户端.docx
- 文档编号:132228
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:7
- 大小:236.05KB
算机网络13281069_谢洁_用SMTP实现EMAIL客户端.docx
《算机网络13281069_谢洁_用SMTP实现EMAIL客户端.docx》由会员分享,可在线阅读,更多相关《算机网络13281069_谢洁_用SMTP实现EMAIL客户端.docx(7页珍藏版)》请在冰豆网上搜索。
用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:
helo
S:
2500K
C:
AUTHLOGIN
S:
334dXNIcm5hbWU6
C:
MTMyODEwNjlAYmpOdS5IZHUuY24=
S:
334UGFzc3dvcmQ6
C:
MTMyNDMl
S:
235Authenticationsuccessful
C:
MAILFROM:
<13281069@>
S:
250MailOK
C:
RCPTTO:
<519399762@>
S:
250MailOK
C:
DATA
S:
354Enddatawith
C:
Subject:
用SMTP实现EMAIL客户端实验
C:
From:
""<13281069@>
C:
To:
""<519399762@>
C:
C:
测试文本内容:
用SMTP实现EMAIL客户端实验
C:
.
S:
250MailOKqueuedasMp5wygBHKAUiDj9WHvDBAA-.16623S2
C:
QUIT
S:
221Bye
分析:
从上面客户机与服务器交换报文脚本信息中可以看出,客户机程序从邮件服务器向邮件服务器发送了一个报文,报文的首部为:
Subject:
用SMTP实现EMAIL客户端实验
From:
""<13281069@>
To:
,,,<519399762@>
在报文首部之后,紧接着是一个空白行,然后是报文的主体。
该客户机发送的命令:
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;
import.InetAddress;
import.Socket;
importjava.util.Scanner;
importmons.codec.binary.Base64;
importjavax.swing.3Button;
importjavax.swing.3Frame;
importjavax.swing.3Label;
importjavax.swing.30ptionPane;
importjavax.swing.3Panel;
importjavax.swing.3PasswordField;
importjavax.swing.3ScrollPane;
importjavax.swing.JTextArea;
importjavax.swing.3TextField;
importsun.misc.*;
publicclassSendMailextendsJFrame{
privatestaticfinallongseriaLUersionL/ID=lL;
privateinttestNum=0;〃测试18如勺文件经过加密后循环次数
private3TextFieldfrom;
private3TextFieldto;
private3TextFieldsubject;
private3TextFieldserver;
private3TextAreamessage;
private3TextAreacomm;
privateScannerin;
privatePrintWriterout;
private3TextFielduserName;
private3PasswordFielduserPass;
privateStringcurrReponse="";//辅助性显示当前从服务器传回来的指令
privateUseruser=newUser();
publicSendMail()(
〃设置frame
setSize(600,400);
setTitle("MySMTPClient");
setDefaultCloseOperation(3Frame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
//addtoframe
3Panelpl=new3Panel(newGridLayout(3,4));
pl.add(new3Label("from:
"));
from=new3TextField(20);
pl.add(from);
pl.add(new3Label("userPass:
"));
userName=from;
userPass=new3PasswordField(20);
Stringname=userName.getText().toString().trim();
Stringpass=newString(userPass.getPassword());
if(name!
=nullSXpass!
=nullSS!
name.equalsIgnoreCase("")&&!
pass.equalsIgnoreCase(""))(name=newString(Base64.encodeBase64(name.getBytes()));
pass=newString(Base64.encodeBose64(pass.getBytes()));
user.setNameAndPass(name,pass);
}
pl.add(userPass);
pl.add(new3Label("to:
"));
to=newJTextField(20);
pl.add(to);
pl.add(new3Label("SMTPserver:
"));
server=new3TextField(20);
pl.add(server);
subject=newJTextField(20);
pl.add(newJLabel("Subject:
"));
pl.add(subject);
add(pljBorderLayout.A/ORTH);
3Panelp2=new3Panel(newGridLayout(2jl));
message=new3TextArea();
p2.add(new3ScrollPane(message));
comm=newJTextArea();
comm.setEditable(false);
comm.setText("Waiting...");
p2.add(new3ScrollPane(comm));
add(p2jBorderLayout.CFA/7FR);
3Panelp3=new3Panel();
3ButtonsendButton=new3Button("send");
p3.add(sendButton);
add(p3jBorderLayout.SOUTH);
sendButton.addActionListener(newActionListener()(
^SuppressWarnings("deprecation")
^Override
publicvoidactionPerformed(ActionEvente)(
comm.setText("");
sendMail(server.getText().trim(),from.getText().trim(),to.getText().trim(),message.getText(),subject.getText(),userName.getText(),userPass.getText());
}
});
setVisible(true);
}
^SuDDressWarninRs("restriction")
privatevoidsendMa
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 13281069 谢洁 SMTP 实现 EMAIL 客户端
![提示](https://static.bdocx.com/images/bang_tan.gif)