邮件发送接收课程设计报告Word文档下载推荐.docx
《邮件发送接收课程设计报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《邮件发送接收课程设计报告Word文档下载推荐.docx(9页珍藏版)》请在冰豆网上搜索。
(1)邮件发送
程序以命令行方式运行:
smtpsend,其中smtpsend为程序名。
在文件user.txt中,每行记录一个接收邮件的用户的Email地址以及用户的类型代码(用户类型为整数,Email地址和用户类型之间用空格分隔);
在文件info.txt中记录用户类型代码及相应的邮件正文内容(类型代码和正文之间用空格分隔)。
程序运行时首先提示输入发送方的SMTP服务器地址,以及用户名和口令。
与服务器建立连接成功后,依次读取文件user.txt中接收方的Email地址,然后根据用户类型从文件中读取相应的正文内容,以电子邮件形式发送给用户。
(2)邮件接收
popreceive,其中popreceive为程序名。
程序运行时首先提示输入接收方的POP服务器地址,以及用户名和口令。
然后程序访问邮箱,从中读取新邮件的内容,并将发件人地址和邮件正文记录在文件rec_info.txt中。
二、设计思路
邮件接收端思路:
1,创建一个连接到POP3服务程序的套接字,使用户可以连接到邮件的服务器端。
同时用户可以自主的选择具体输入是哪个邮件服务器。
2,使用java中的socket进行网络编程,建立了连接后,用户可以通过使用pop服务器定义的指令来与服务器进行交互。
首先是user:
输入邮件的名称,然后是pass:
输入登录的密码。
成功登录邮箱后,就可以读取自己邮箱的中的邮件了。
Stat:
显示邮箱中所有的收到的邮件,并同时显示出它的大小。
List:
是分别显示每封邮件的大小。
Retr:
显示具体的一封邮件的所有信息。
Delete:
在pop服务器中删除掉所选的邮件,但是后来我发现,它并没有在自己的邮箱中删除,就是说还是可以在自己的邮箱里看到这封邮件。
3,因为要求要将所收到的邮件的内容写入到re_info.txt。
所以我编写了读写程序,对socket中服务器发送过来的每一行的内容进行的筛选,将邮件的发件人和邮件的内容写入到了E盘下的re_info.txt中。
三、分工
●唐琪玲负责邮件发送;
●朱涛负责邮件接收;
四、具体程序和主要代码
packagemail;
importjava.io.BufferedReader;
importjava.io.BufferedWriter;
importjava.io.FileWriter;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStream;
importjava.io.PrintWriter;
import.Socket;
publicclasspopreceive{
privatestaticStringPOPServer="
"
;
//pop3服务器地址
privatestaticStrings="
voidsetServer(Stringpopserver){
POPServer=popserver;
}//设置pop服务器的地址
publicstaticvoidmain(String[]args)throwsIOException{
Stringomd=null;
StringLINEFEED="
\r\n"
//回车换行字符
popreceivep=newpopreceive();
BufferedReaderstdin;
stdin=newBufferedReader(newInputStreamReader(System.in));
//创建一个BufferedReader对象来读取用户输入。
System.out.println("
输入pop3服务器地址"
);
omd=stdin.readLine();
p.setServer(omd);
//上面就是根据输入的不同确定不同的服务器
//用户代理和服务器建立连接
intPOP3Port=110;
Socketsocket=null;
//服务器端套接字
try{
//创建一个连接到POP3服务程序的套接字。
socket=newSocket(POPServer,POP3Port);
System.out.println("
成功建立连接"
//创建一个BufferedReader对象,以便从套接字读取输出。
InputStreamis=socket.getInputStream();
BufferedReadersockin;
sockin=newBufferedReader(newInputStreamReader(is));
//输入流
//创建一个PrintWriter对象,以便向套接字写入内容。
OutputStreamos=socket.getOutputStream();
PrintWritersockout;
sockout=newPrintWriter(os,true);
//trueforauto-flush,自动刷新,输出流
//显示POP3握手信息。
//一旦连接,服务器就会向客户端发送信息?
S:
+sockin.readLine());
随后输入用户名和密码及相应的命令"
+LINEFEED);
while(true){
System.out.print("
C:
//读取用户输入。
omd=stdin.readLine();
//将命令发送到POP3服务程序。
sockout.println(omd);
//读取POP3服务程序的回应消息。
StringreplyLine=sockin.readLine();
System.out.println("
+replyLine);
//如果输入了RETR命令并且返回了成功的回应码,持续从套接字读取输出,
//直到遇到<
CRLF>
.<
。
这时从套接字读出的输出就是邮件的内容。
if(omd.toLowerCase().startsWith("
list"
)
&
&
replyLine.charAt(0)=='
+'
){
do{
replyLine=sockin.readLine();
System.out.println("
if(replyLine!
=null&
replyLine.length()>
0){
if(replyLine.charAt(0)=='
.'
break;
}
}
}while(true);
}
retr"
//toLowerCase(),返回一个字符串,把字符串中的字符转换成小写字母
//写程序,将邮件中的内容写入到re.info.txt中。
if(replyLine.startsWith("
From:
)||(replyLine.contains("
_"
)&
replyLine.contains("
is"
))){
s=replyLine;
System.out.println("
写入成功"
FileWriterfr=newFileWriter("
E:
\\rec_info.txt"
true);
BufferedWriterbf=newBufferedWriter(fr);
bf.newLine();
bf.write(s);
bf.flush();
fr.close();
}
0)
//如果用户输入了QUIT命令,退出邮件传输过程。
if(omd.toLowerCase().startsWith("
quit"
)){
退出系统"
break;
}
}
}catch(IOExceptione){
System.out.println(e.toString());
}finally{
try{
if(socket!
=null)
socket.close();
}catch(IOExceptione){
}
}
}
五、调试与最终运行结果
分别接收两个邮箱的收件内容,以及它们的发送者。
并将其写入到rec_info.txt中
邮箱:
net_user01@
这个是执行的全部过程,包括从与服务器的连接,和登录的输入用户名和密码,和服务器返回来的内容This_is_about_Information_System
这是写文件,re_info.txt。
将邮箱:
net_user01@收到的邮件的内容写到这个txt中。
这个是运行后的结果。
net_user02@
上面的截图是打开第一封邮件执行的指令是retr1
上面的截图是打开第二封邮件执行的指令是retr2,此截图和上面的截图是同一个窗口,为了显示方便才分成了2个截图。
这是写程序。
re_info.txt。
net_user02@收到的邮件的内容写到这个txt中。
六、个人总结
这次的课程设计,我和在假期中选择了邮件收发,一方面因为我们对这个问题比较感兴趣,还有就是在这个课题上老师给的参考资料也多,所以我们就做了这个邮件收发这个题目。
在上学期里我们刚好学了java这个课程,了解了socket的基本用法,理解邮件收发这个问题上并没又出现很多的困难。
我做的是邮件的接收这方面的,老师给了一个参考的代码,当我把代码放到eclipse中执行时,发现了很多的问题,包括word中的代码转到eclipse中出现的问题,还有一个很重要的问题就是,在与服务器连接上了以后,执行retr指令的时候,pop服务器并没有发送邮件中的内容,就是说看不到邮件中的内容,后来就一直都卡在这里,有好多天找不到原因,后来才发现是代码中缺少了list指令,输入retr后,执行的是list指令,原因在于list指令要先于retr编写,后来又加上了retr中的代码,最终成功了,可以看到接收邮件的内容。
在课程设计中第二个困难点在如何将邮件接收到的内容写入re_info.txt中。
由于java功底的薄弱,该开始我并没有理解这个读写程序怎么实现,后来通过网络上的视频教程,我才明白了文件流的相关问题。
最终我遍历了服务器发送过来的每一行的内容,根据筛选条件,成功将其写入了re_info.txt中。
整个过程从查找资料、可行性研究、总体设计、开发到完成优化,我认真完成自己的各项任务,从理论到实践都学到了很多东西,感想和认识也比较深刻。
在这次课程设计中,团队的分工和合作也很重要,虽然我们是两个人,但是我们也进行了详细的分工。