2022年邮件客户机smtp编程计算机网络作业宣贯 .pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《2022年邮件客户机smtp编程计算机网络作业宣贯 .pdf》由会员分享,可在线阅读,更多相关《2022年邮件客户机smtp编程计算机网络作业宣贯 .pdf(15页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、作业 2:邮件客户机作业名:邮件客户机编程环境:Elicpse 3.5,jdk1.7 报告分为 4 部分,分别是界面布局,发送邮件的具体处理,其他监听事件,相关类的注意事项。(一)界面布局:主 界 面 使 用 BorderLayout 布 局 界 面 管 理 器 进 行 布 局,把 子 容 器 分 别 用BorderLayout.NORTH,BorderLayout.CENTER,BorderLayout.SOUTH加入。getContentPane().setLayout(new BorderLayout();getContentPane().add(pp1,BorderLayout.NOR
2、TH);getContentPane().add(pp3,BorderLayout.CENTER);getContentPane().add(pp2,BorderLayout.SOUTH);3 个子容器为 pp1,pp2,pp3,依次对三个子容器进行空间布局。在 pp1中,主要包括用户账号(Username),密码(Password),发送方邮箱地址(From,接收方邮箱地址(To),邮件主题(Subject)以及文本框标识(Message)。From=new JLabel(From);To=new JLabel(To);Subject=new JLabel(Subject);Message=
3、new JLabel(Message);Username=new JLabel(Username);Password=new JLabel(Password);对控件初始化后,为了让布局空间美观,可以把每行另设一子容器进行布局。JPanel p1=new JPanel();/邮件发送方 From 的容器J Panel p2=new JPanel();/邮件接收方 To的容器J Panel p3=new JPanel();/邮件主题 Subject的容器J Panel p4=new JPanel();/正文标识 Message的容器J Panel p5_1=new JPanel();/用户账号
4、Username的容器J Panel p5_2=new JPanel();/用户密码 Password的容器J Panel p5=new JPanel();/承载 p5_1,P5_2 的容器然后就是往这些子容器中添加控件,完成位于主容器 BorderLayout.NORTH 的子容器们的布局p1.add(From,BorderLayout.WEST);p1.add(Text_from,BorderLayout.CENTER);p2.add(To,BorderLayout.WEST);p2.add(Text_to,BorderLayout.CENTER);p3.add(Subject,Borde
5、rLayout.WEST);p3.add(Text_subject,BorderLayout.CENTER);p4.add(Message,BorderLayout.WEST);名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 15 页 -p5_1.add(Username,BorderLayout.WEST);p5_1.add(Text_username,BorderLayout.CENTER);p5_2.add(Password,BorderLayout.WEST);p5_2.add(psw,BorderLayout.CENTER);p5.add(p5_1);p5.add(p5
6、_2);最后,把它们添加到 pp1中,pp1.setLayout(new GridLayout(5,1);/在主容 BorderLayout.NORTH的布局子容器中,按表格序添加控件pp1.add(p5);pp1.add(p1);pp1.add(p2);pp1.add(p3);pp1.add(p4);在 pp2 中,主要处理主容器位于BorderLayout.SOUTH的布局,其中就是3 个按钮,发送(Send),清屏(Clear),退出(Quit),pp2.setLayout(new GridLayout(1,3);/在主容器BorderLayout.SOUTH的布局子容器中,按表格序添加
7、控件pp2.add(Send);pp2.add(Clear);pp2.add(Quit);在 pp3 中,只有 1 个控件,就是正文区,位于主容器的 BorderLayout.CENTER 中。此控件为 TextField型,为了避免当输入文字超出文本框的现实范围的情况,因此设置了可拉动的滚动条于此TextField控件中,Text_message.setLineWrap(true);/设置文本控件属性为可以线性滚动Text_message.setWrapStyleWord(true);/设置文本控件属性为可以拖动查看文字Text_message.setEditable(true);/设置文本
8、内容可见s croll=new JScrollPane(Text_message);/当文本内容超过文本控件控件大小时,用JScrollPane可通过滚动条拉动/文本框,查阅文本全部内容pp3.add(scroll,BorderLayout.CENTER);/把文本添加进位于主布局的 BorderLayout.CENTER位置中子控件pp3pp3.add(newJScrollBar(JScrollBar.HORIZONTAL),BorderLayout.SOUTH);/添加水平滚动条pp3.add(newJScrollBar(JScrollBar.VERTICAL),BorderLayout.
9、EAST);/添加垂直滚动条最后,弄完 pp13 了,仅需放入继承了 Frame 的主布局中,并设置好主布局的一些属性名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 15 页 -getContentPane().setLayout(new BorderLayout();/把3个子控件添加进主布局的三个位置中getContentPane().add(pp1,BorderLayout.NORTH);getContentPane().add(pp3,BorderLayout.CENTER);getContentPane().add(pp2,BorderLayout.SOUTH);最终结
10、果如下图:(二)发送邮件的具体处理在本程序中,此部分也是作为按钮Send的监听响应处理事件的,目的是按下按钮后,即可完成邮件的发送用 tcp 实现邮件的发送,则必须用套接字在smtp 协议下传送一些特殊的“交流”字段,具体流程如下图:名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 15 页 -在套接口的连接上,首先要解决的是ip,port。我以 163 邮箱为例子来说明。作为用户的邮件代理,我们的套接口要与163 的 smtp 服务器沟通,把邮件发送方,邮件接收方,及其标题、正文等信息发送给服务器,完成如上面那张图的流程即可。剩下具体如何识别邮件地址、如何发送正文这些事就交给服务
11、器来做了。因此,查了下其实各个邮箱的smtp 服务器都是字符串“smtp”加上邮箱域名,如163 就是 。然后就是 port,为 25。因此,套接口的ip,port 即可解决,只要提取发送方之后的域名,做个连接即可。port=25;/SMTP协议端口号i nt i=String_from.indexOf();/从 From 中提取 后边的字符串,即邮箱域名,如 String s=String_from.substring(i+1);Socket socket=new Socket(host.concat(s),port);/host为 smtp,连接上域名之后,即smtp服务器,如DNS的事
12、Java已为我们做好了。可是,还有一个问题,那就是对于smtp 服务器来说,需要对用户名及密码的验证通过了才能对代理的邮件进行转发。因此,要把发送方邮箱的用户名、密码发送过去。而且,在发送之前,必须进过base64的编码才可以这里有两种办法,一种是引用系统的 sun 里边的 Base64的类的 encode 方法,我选择的是自己写个Base64_Encode类,用类的 encode方法实现编码(此类详细代码见后边的源码)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 15 页 -准备事宜做好了,接下来只需按流程图向smtp 服务器进行“交流”了先创建套接字的输入、输出流Buffe
13、redReader in=new BufferedReader(newInputStreamReader(socket.getInputStream();/套接字输出流PrintStream out=new PrintStream(socket.getOutputStream();/套接字输入流接着,用输入流向 smtp服务器输送字符串,这些字符串包含了 smtp协议的命令:HELO,MAIL,FROM,RCPT TO,DATA,QUIT String from_server=in.readLine();/返回 220,读取建立连接后smtp 服务器的返回信息System.out.printl
14、n(HELO +String_from);out.print(HELO +String_from+rn);/发送 HELO给服务器from_server=in.readLine();/返回 250 System.out.println(from_server);out.print(RSET+rn);from_server=in.readLine();/返回 250,验证账号前的重置 System.out.println(from_server);out.print(AUTH LOGIN+rn);from_server=in.readLine();/返回 334,告诉服务器接下来发送的是账号,密
15、码信息 System.out.println(Login+from_server);out.print(enc.encode(username.getBytes()+rn);/必须用base64进行编码后发送给服务器 from_server=in.readLine();/返回 334 System.out.println(username+from_server);out.print(enc.encode(password.getBytes()+rn);/必须用 base64进行编码后发送给服务器 from_server=in.readLine();System.out.println(pas
16、sword+from_server);/返回 250 System.out.println(Mail From:);out.print(MAIL From:+rn);/发送邮件发送方的邮箱 from_server=in.readLine();System.out.println(from_server);/返回 250名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 15 页 -System.out.println(RCPT TO:);out.print(RCPT TO:+rn);/发送邮件接收方邮箱 from_server=in.readLine();/返回 250 System
17、.out.println(from_server);System.out.println(DATA);out.print(DATA+rn);/告诉服务器,接下来要发送正文内容了 from_server=in.readLine();System.out.println(from_server);/返回 354 System.out.println(.);out.print(Text_message+rn);out.print(.+rn);/发送“.”,表示正文发送结束 from_server=in.readLine();/返回 250 System.out.println(from_server
18、);System.out.println(QUIT);out.print(QUIT+rn);/告诉服务器,要退出了 from_server=in.readLine();System.out.println(from_server);/返回 221(三)其他监听事件清屏(Clear)按钮的监听响应事件,Clear.addActionListener(new ActionListener()publicvoid actionPerformed(ActionEvent e)Text_from.setText();Text_to.setText();Text_subject.setText();Tex
19、t_message.setText();Text_username.setText();Text_password.setText(););这要把相关文本置为空字符串(“”)即可实现清屏退出(Quit)按钮的监听响应事件:Quit.addActionListener(new ActionListener()publicvoid actionPerformed(ActionEvent e)System.exit(0);名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 15 页 -);调用系统函数完成程序正常运行时,截图如下这是 cs 双方“对话”过程(四)相关类的注意事项首先,可能在
20、 JDK中不支持 mail 类,所以要自己去下载mail 类包后,导入项目,然后 import javax.mail.*才可以。名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 15 页 -如果编完代码,调试无误却始终无法发送邮件,那么,有可能是邮箱未开启smtp服务,应该先进入邮箱开启此项服务若依旧无法成功发送,那么稍等几小时再试一试,可能是网络或是邮箱服务代理有点问题验证发送方的用户名及密码,一定要编码之后发送才可验证成功,还有就是用户名是完整邮箱用户名,如 以下为源代码:import java.awt.*;import java.io.*;import .*;import j
21、ava.awt.event.*;import java.util.Properties;import javax.mail.*;import javax.swing.*;publicclass MailClient public MailClient()new Frame();publicstaticvoid main(String args)new MailClient();class Frame extends JFrame privatestaticfinallongserialVersionUID=1L;private JButton Send;private JButton Clea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年邮件客户机smtp编程计算机网络作业宣贯 2022 邮件 客户机 smtp 编程 计算机网络 作业
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内