2022年邮件客户机smtp编程计算机网络 .pdf





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

限制150内