版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Java网络程序设计第8章 电子邮件的发送和接收 “跨越长城,我们可以达到世界的任何角落。”这是1987年9月20日从8北京向海外发出的中国第一封电子邮件发。 至今,电子邮件在我们日常生活中的作用越来越重要。电子邮件有诸多优点,不同的电子邮件服务商之间互联互通,可以减少会议和电话的数量,能留下决策的书面记录,还能让处于不同时区的人更加方便地联系。例如,美国和中国之间的通信用电子邮件就很方便,如果用即时通信因为时差颠倒的问题,很难同时在线。 现在,人们大量地使用电子邮件,因为它发送起来十分容易。 本章介绍电子邮件的发送与接收。8.1 E-mail协议简介 邮件服务器按照提供的服务类型,可以分为发
2、送邮件服务器(简称发送服务器)和接收邮件服务器(简称接收服务器)。 发送邮件服务器使用邮件发送协议,现在常用的是SMTP,所以通常发送邮件服务器也称为SMTP服务器; 接收邮件服务器使用接收邮件协议,常用的有POP3协议和IMAP协议,所以通常接收邮件服务器也称为POP3服务器或IMAP服务器。8.1 E-mail协议简介8.1.1 SMTP简单邮件传输协议 SMTP(Simple Mail Transfer Protocol),即简单邮件传输协议,是Internet传送E-mail的基本协议,也是TCP/IP协议组的成员。 SMTP协议解决邮件系统如何通过一条链路,把邮件从一台机器传送到另一
3、台机器上的问题。 SMTP协议的特点是具有良好的可伸缩性,这也是它成功的关键。它既适用于广域网,也适用于局域网。8.1.1 SMTP简单邮件传输协议 SMTP工作在两种情况下,一种是电子邮件从客户机传输到服务器;另一种是从一个服务器传输到另一个服务器 SMTP是个请求/响应协议,它监听25号端口,用于接收用户的Mail请求,并与远端Mail服务器建立SMTP连接。 SMTP通常有发送SMTP和接收SMTP两种工作模式。 它的具体工作方式为: 当发送SMTP接收到用户的邮件请求后,首先判断此邮件是否为本地邮件,若是,则直接投送到用户的邮箱; 否则:8.1.1 SMTP简单邮件传输协议 向DNS查
4、询远端邮件服务器的记录,并建立与远端接收SMTP之间的一个双向传送通道,此后, SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反向传送。如下图所示8.1.1 SMTP简单邮件传输协议 一旦传送通道建立, SMTP发送者发送MAIL命令指明邮件发送者 如果SMTP接收者可以接收邮件,则返回OK应答。 SMTP发送者再发出RCPT命令确认是否接收到。 如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件操作) 双方将如此操作多次。 当接收者收到全部邮件后,会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答8.1.1 SMTP简单邮件传
5、输协议 SMTP协议由于非常简单,使得它得到了广泛的运用,在Internet上能够发送邮件的服务器几乎都支持SMTP协议。8.1.2 POP3邮局协议 POP(POP,Post Office Protocol)用于电子邮件的接收,它使用TCP的110端口。 POP3(Post Office Protocol 3),即邮局协议第3版,是 Internet接收邮件的基本协议,也是TCP/IP协议组的成员。 RFC1939描述了POP3协议,网址为“/rfc/rfc1939.txt”。 POP3既允许接收服务器向邮件用户发送邮件,也可以接收来自SMTP服务器的邮件
6、。 邮件客户端软件会与POP3服务器交互,下载由POP3服务器接收到的邮件。8.1.2 POP3邮局协议 POP3协议有三种状态,认可状态,处理状态,和更新状态。 当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。如下图 。8.1.2 POP3邮局协议 基于POP3协议的邮件系统能提供快速、经济和方便的邮件接收服务,深受用户的青睐。8.1.3 接收邮件的新协议IMAP IMAP(Internet Message Access Protocol),即互联网消息访问协议,是一
7、种功能比POP3更强大的新的接收邮件协议。 目前最新的IMAP协议版本为IMAP4,RFC2060描述了IMAP4,网址为“/rfc/rfc2060.txt”。 IMAP4与POP3协议一样提供了方便的下载邮件服务,允许用户在脱机状态下阅读已经下载到本地硬盘的邮件。但IMAP4的功能远远不只这些,它还具有以下功能:8.1.3 接收邮件的新协议IMAP 摘要浏览邮件的功能; 选择性下载附件的功能; 鼓励用户把邮件一直存储在邮件服务器上; 允许用户把远程邮件服务器上的邮箱作为信息存储工具。 IMAP的监听端口143。8.1.4 MIME简介 MIME(Multi
8、purpose Internet Mail Extensions,多用途Internet邮件扩充标准)不是邮件传输协议,而是对邮件格式所作的规范。 RFC2045、RFC2046和RFC2047对MIME作了描述。 MIME是对RFC822的扩充,RFC822规定了内容只包括采用ASCII编码的纯文本的邮件的格式,而MIME允许在邮件中包含附件。8.2 JavaMail API简介 SUN公司制定了JavaMail API,它封装了按照各种邮件通信协议,如IMAP、POP3和SMTP,与邮件服务器通信的细节,为Java应用程序提供了收发电子邮件的公共接口,参见图8.2 JavaMail API
9、简介 JavaMail API主要位于javax.mail包和ernet中,下图为其中主要类的类框图。表示邮件会表示邮件会话话表示接收表示接收邮件服务邮件服务器上的注器上的注册用户的册用户的存储空间存储空间,通过,通过getFolder()方法,方法,可以访问可以访问用户的特用户的特定邮件夹定邮件夹表示邮件表示邮件夹夹通过指定的通过指定的邮件发送服邮件发送服务器来发送务器来发送邮件邮件电子邮件电子邮件邮件地址邮件地址8.3 发送电子邮件发送电子邮件8.3.1 电子邮件的工作原理电子邮件的工作原理 电子邮件与普通邮件有类似的地方,发信者要注明收件人的姓名与地址,发送方
10、服务器把邮件传送到收件方服务器,收件方服务器再把邮件发送到收件人的邮箱中,如图所示: 使用过桌面邮件客户端的人都知道,关联一个邮件账户,需要设置它的SMTP邮件发送服务器和POP3邮件接收服务器,如下图所示:8.3 发送电子邮件发送电子邮件8.3.2 发送电子邮件例 1.发送邮件基本信息类8.3 发送电子邮件发送电子邮件 import java.util.Properties; public class MailSenderInfo /发送邮件服务器的IP地址和端口private String mailServerHost;private String mailServerPort;/邮件发送
11、者的地址private String fromAddress;/邮件接收者的地址private String toAddress;8.3 发送电子邮件发送电子邮件/邮件发送服务器的用户名和密码private String userName;private String password;/是否需要身份验证private boolean validate = false;/邮件主题private String subject;/邮件的文本内容private String content;/邮件附件的文件名private String attachFileName;8.3 发送电子邮件发送电子邮件
12、 public Properties getProperties()Properties p = new Properties();p.put(mail.smtp.host, this.mailServerHost);p.put(mail.smtp.port, this.mailServerPort);p.put(mail.smtp.auth, validate?true:false);return p; 8.3 发送电子邮件发送电子邮件public String getMailServerHost() return mailServerHost;public void setMailServ
13、erHost(String mailServerHost) this.mailServerHost = mailServerHost;public String getMailServerPort() return mailServerPort;8.3 发送电子邮件发送电子邮件 public void setMailServerPort(String mailServerPort) this.mailServerPort = mailServerPort; public String getFromAddress() return fromAddress; public void setFro
14、mAddress(String fromAddress) this.fromAddress = fromAddress; 8.3 发送电子邮件发送电子邮件public String getToAddress() return toAddress;public void setToAddress(String toAddress) this.toAddress = toAddress;public String getUserName() return userName;8.3 发送电子邮件发送电子邮件public void setUserName(String userName) this.u
15、serName = userName;public String getPassword() return password;public void setPassword(String password) this.password = password;8.3 发送电子邮件发送电子邮件public boolean isValidate() return validate;public void setValidate(boolean validate) this.validate = validate;public String getSubject() return subject;8.
16、3 发送电子邮件发送电子邮件public void setSubject(String subject) this.subject = subject;public String getContent() return content;public void setContent(String content) this.content = content;8.3 发送电子邮件发送电子邮件public String getAttachFileName() return attachFileName;public void setAttachFileName(String attachFileN
17、ame) this.attachFileName = attachFileName;8.3 发送电子邮件发送电子邮件 2. 对电子邮件的认证类: import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; public class MyAuthenticator extends Authenticator String userName = null;String password = null;8.3 发送电子邮件发送电子邮件 public MyAuthenticator(String username
18、,String password)this.userName = username;this.password = password; protected PasswordAuthentication getPasswordAuthentication()return new PasswordAuthentication (userName,password); 8.3 发送电子邮件发送电子邮件 3. 电子邮件发送者的类: import java.util.Date; import java.util.Properties; import javax.mail.Address; import
19、javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import ernet.InternetAddress; import ernet.MimeMessage;8.3 发送电子邮件发送电子邮件 public class SimpleMailSender /* * 以文本格式发送邮件 * param mailInfo 待发送的邮件的信息 */public boole
20、an sendTextMail(MailSenderInfo mailInfo)/MyAuthenticator authenticator = null;Properties pro = mailInfo.getProperties();8.3 发送电子邮件发送电子邮件if(mailInfo.isValidate()/如果需要身份验证,则创建一个密码验证器authenticator = new MyAuthenticator (mailInfo.getUserName(),mailInfo.getPassword(); /根据邮件会话属性和密码验证器构造一个发送邮件的sessionSessi
21、on sendMailSession = Session.getDefaultInstance(pro, authenticator);8.3 发送电子邮件发送电子邮件 try/根据session创建一个邮件消息Message mailMessage = new MimeMessage (sendMailSession);Address from = new InternetAddress (mailInfo.getFromAddress();/设置邮件发送者的地址mailMessage.setFrom(from);/创建邮件接收者地址,并设置到邮件消息中Address to = new InternetAddress (mailInfo.getToAddress();8.3 发送电子邮件发送电子邮件mailMessage.setRecipient(Message.RecipientType.TO, to);/设置邮件消息的主题mailMessage.setSubject(mailInfo.getSubject();/设置邮件消息发送时间mailMessage.setSentDate(new Date();/设置邮件消息的主要内容String mailContent
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版大型商业综合体消防报警系统安装合同
- 2025年度木材销售代理合同范本4篇
- 2025版牧业冷链物流配送与承包服务合同4篇
- 2025版小区消防应急照明与疏散指示系统维护合同3篇
- 《婚姻制度篇案例》课件
- 二零二五年度食品原料采购合同规范2篇
- 2025版塔吊租赁合同样板(智能监控)3篇
- 乳品市场分析与营销策略考核试卷
- 《经皮肾镜碎石》课件
- 二零二五年高速公路交通协管员职责规范合同范本3篇
- 慈溪高一期末数学试卷
- 天津市武清区2024-2025学年八年级(上)期末物理试卷(含解析)
- 《徐霞客传正版》课件
- 江西硅博化工有限公司年产5000吨硅树脂项目环境影响评价
- 高端民用航空复材智能制造交付中心项目环评资料环境影响
- 量子医学成像学行业研究报告
- DB22T 3268-2021 粮食收储企业安全生产标准化评定规范
- 办事居间协议合同范例
- 正念减压疗法详解课件
- GB 30254-2024高压三相笼型异步电动机能效限定值及能效等级
- 重大事故隐患判定标准与相关事故案例培训课件
评论
0/150
提交评论