17.JavaMail
1.电子邮件
电子邮件是目前网络上使用最多的服务,电子邮件的应用越来越广泛
正常的通信往来
账号注册时,找回密码时等
一般发送的邮件主要可以分解成2大部分
一部分是发信人、接信人、主题等邮件标头
另外一部分是邮件内容,有可能带附件
邮件传输协议:
SMTP
简单邮件传输协议(SimpleMailTransferProtocol,SMTP)由RFC821定义,是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议
SMTP服务器会中转消息给接收方SMTP服务器以便最终让用户经由POP或者IMAP获得邮件内容
POP
邮局协议(Post Office Protocol) ,目前的版本是3,故又称为POP3协议,是由RFC1939定义的
POP协议是允许电子邮件客户端下载服务器上的邮件的协议
IMAP
是更高级的用户接收邮件的协议,是由RFC2060定义的
IMAP全称是因特网消息访问协议(Internet Message Access Protocol),目前用的版本是4,故又称为IMAP4协议
MIME
多用途互联网邮件扩展类型(MultipurposeInternetMailExtensions),它不是邮件传输协议,但是对于传输的内容的消息、附件以及其他的内容定义了格式。可以理解成一个定义格式的标准。
2.JavaMail介绍
JavaMail是sun公司发布的,在Java程序中处理Email的API
JavaMail是开发人员在应用程序中实现邮件发送和接收功能的一套标准开发类库,支持常用的邮件协议,如SMTP、POP3、IMAP
所需Jar包
JavaMail目前没有被加在标准的JDK中,使用JavaMail必须另行下载,mail.jar
http://www.oracle.com/technetwork/java/javamail/javamail145-1904579.html
JAF框架,activation.jar
http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html
JavaMail主要组件
Session
Session 类定义了一个基本邮件会话(session),是Java Mail API最高层入口类。所有其它类都是经由这个session 才得以生效
Message
定义邮件信息,比如内容、标题等,Message是抽象类,更常用的是javax.mail.internet.MimeMessage类
Address
用于设置邮件的发件人和收件人地址,常用的是其子类javax.mail.internet.InternetAddress
Authenticator
授权者类,以用户名、密码的方式访问邮件服务器
Transport
Transport类实现了发送邮件的协议(通常为SMTP)
发送邮件:
使用JavaMail发送普通邮件
设定所使用的Mail服务器和所使用的传输协议
props.put("mail.transport.protocol", "smtp");
props.put("mail.smtp.host", smtphost);
props.put("mail.smtp.auth", "true");
创建新的Session服务
Session.getInstance(props, new Authenticator())
创建一个Message对象
New MimeMessage(session)
设定发、收件人地址,邮件标题、内容等
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject("Hello JavaMail");
message.setText("Welcome to JavaMail");
使用Transport将邮件发出
Transport.send(message);
某些网站有电子期刊的功能,通常会使用HTML格式来表现丰富的内容
发送HTML格式内容的邮件与普通邮件的不同点为:
使用MimeBodyPart类的setContent方法设定邮件的MIME类型(text/plain或text/html)
new MimeBodyPart().setContent( messageText,”text/html;charset=gb2312”);
new MimeMultipart().addBodyPart( mimeBodyPart);
message.setContent(mimeMultipart);
发送带附件的邮件
将邮件内容存入MimeBodyPart对象中
将附件文件存入另一个MimeBodyPart对象中
把两个MimeBodyPart对象添加到MimeMultipart对象中
合二为一地加入Message对象中送出
在C/S结构的程序里可以方便的增加附件
在B/S结构应用中需要实现文件上传功能
接收邮件:
使用JavaMail接收普通邮件
设定所使用的Mail服务器和所使用的传输协议
props.setProperty("mail.store.protocol", protocol);
props.setProperty("mail.pop3.host", pop3Server);
创建Session对象
Session session = Session.getDefaultInstance(props, null);
使用Session得到Store,并连接
Store store = session.getStore("pop3");
store.connect(pop3Server,username,password);
从Store中取得收件箱,并打开,获取邮件信息
Folder folder = store.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
Message message[] = folder.getMessages();
小结:
邮件传输的基本原理
邮件服务中常用的协议
SMTP协议
POP协议
IMAP协议
JavaMail进行邮件的收发
接收邮件
发送邮件
17.JavaMail的更多相关文章
- javaEE(17)_邮件原理与JavaMail开发
一.Java邮件开发介绍 为什么要学习javamail开发 •现在很多WEB应用在开发时都需要集成邮件发送功能,例如: •给新注册的用户自动发送一封包含其注册信息的欢迎E-Mail. •给过生日的注册 ...
- Spring JavaMail发送邮件
JavaMail的介绍 JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输. 虽然JavaMail是 ...
- 使用JavaMail发送邮件
一.邮件的相关概念 邮件协议.主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Prot ...
- JavaMail和James
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Micr ...
- JavaMail和James的秘密花园
JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口.它是Sun发布的用来处理email的API.它可以方便地执行一些常用的邮件传输.我们可以基于JavaMail开发出类似于Micros ...
- web应用中使用JavaMail发送邮件
现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件里面的内容可能包含了我们的注册的用户名和密码以及一个激活账户的超链接等信息.今天我们也来实现一个这样的功能 ...
- 使用JavaMail创建邮件发送邮件
一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔. 邮件头包含的内容有: from字段 ...
- (转载)JavaWeb学习总结(五十三)——Web应用中使用JavaMail发送邮件
博客源地址:http://www.cnblogs.com/xdp-gacl/p/4220190.html 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件.邮件 ...
- (转载)JavaWeb学习总结(五十二)——使用JavaMail创建邮件和发送邮件
博客源地址:http://www.cnblogs.com/xdp-gacl/p/4216311.html 一.RFC882文档简单说明 RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封 ...
随机推荐
- dubbo-admin打包和zookper安装
1 首选安装Zookper,下载zookeeper-3.5.3-beta版本,在这里我主要演示这个:下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/ ...
- NSSelectorFromString 使用示例
NSSelectorFromString 动态加载实例方法. SEL sel = NSSelectorFromString(@"yourMethod:")//有参数 if([obj ...
- 树莓派(Raspberry Pi 3) centos7 扩容内存卡
在使用Win32DiskImager为一张空白的SD卡刷入新的centos7系统后,发现卡上的可用剩余空间并不大,用df -h查看,根目录下的空间使用率居然是25%,而且总空间也就2G左右.网上查到的 ...
- 解决Visiual Studio2012 CLR20r3问题
解决办法: 步骤1:开始-->所有程序-->Microsoft Visual Studio 2012-->Visual Studio Tools-->VS2012 开发人员命令 ...
- WPF之MVVM模式(2)
我们都想追求完美 Every view in the app has an empty codebehind file, except for the standard boilerplate cod ...
- P与NP问题详解
P,NP,NPC问题,这或许是众多OIer最大的误区之一. 本文就为大家详细讲解如上三个问题. 前序: 你会经常看到网上出现“这怎么做,这不是NP问题吗”.“这个只有搜了,这已经被证明是NP问题了”之 ...
- Django之后台管理一
所有的网站都有一个管理后台来对所有的网站数据进行管理.那么Django的后台管理是如何进行的.在网页中输入http://127.0.0.1:8001/admin.得到如下的登录界面 在这里可以看到管理 ...
- UINavigationController + UIScrollView组合,视图尺寸的设置探秘(一)
UINavigationController和UIScrollView是iOS下几种主要的交互元素,但当我搭配二者在一起时,UIScrollView的滚动区域出现了很诡异的现象.我希望UIScroll ...
- iframe相关操作
内容摘要 父级获取iframe中的元素 父级触发iframe中的函数 iframe触发父级元素绑定的事件 iframe触发父级函数方法 iframe触发父级元素的值 parent.html <! ...
- (原创)BZOJ 2038 小Z的袜子(hose) 莫队入门题+分块
I - 小Z的袜子(hose) 作为一个生活散漫的人,小Z每天早上都要耗费很久从一堆五颜六色的袜子中找出一双来穿.终于有一天,小Z再也无法忍受这恼人的找袜子过程,于是他决定听天由命…… 具体来说,小Z ...