算机网络13281069_谢洁_用SMTP实现EMAIL客户端Word格式.docx
《算机网络13281069_谢洁_用SMTP实现EMAIL客户端Word格式.docx》由会员分享,可在线阅读,更多相关《算机网络13281069_谢洁_用SMTP实现EMAIL客户端Word格式.docx(7页珍藏版)》请在冰豆网上搜索。
helo
S:
2500K
AUTHLOGIN
334dXNIcm5hbWU6
MTMyODEwNjlAYmpOdS5IZHUuY24=
334UGFzc3dvcmQ6
MTMyNDMl
235Authenticationsuccessful
MAILFROM:
<
13281069@>
250MailOK
RCPTTO:
519399762@>
DATA
354Enddatawith<
CRxLF>
.<
CR>
LF>
Subject:
用SMTP实现EMAIL客户端实验
From:
"
To:
测试文本内容:
.
250MailOKqueuedasMp5wygBHKAUiDj9WHvDBAA-.16623S2
QUIT
221Bye
分析:
从上面客户机与服务器交换报文脚本信息中可以看出,客户机程序从邮件服务器向邮件服务器发送了一个报文,报文的首部为:
Subject:
From:
13281069@>
To:
,,,<
在报文首部之后,紧接着是一个空白行,然后是报文的主体。
该客户机发送的命令:
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文件:
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);
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);
to:
to=newJTextField(20);
pl.add(to);
SMTPserver:
server=new3TextField(20);
pl.add(server);
subject=newJTextField(20);
pl.add(newJLabel("
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)(
sendMail(server.getText().trim(),from.getText().trim(),to.getText().trim(),message.getText(),subject.getText(),userName.getText(),userPass.getText());
});
setVisible(true);
^SuDDressWarninRs("
restriction"
privatevoidsendMa