Java mail 实现发送电子邮件

java mail api提供了一个独自的平台和协议去构建你的电子邮件应用。java mail api 提供了一系列的抽象类定义了一个构成邮件系统的对象,api 中定义的类如Message,Store,Transport,你可以继承这些类来实现你所需要的功能和协议。

除此之外,api提供了一套具体的实例化的类,这些实例化的类包括:MimeMessage,MimeBodyPart等,他们实现了广泛使用的internet电子邮件协议,而且符合RFC822和RFC2045规范。

下载java mail 

JavaMail API 1.4.3 Release :http://www.oracle.com/technetwork/java/index-jsp-139225.html

JavaBeans Activation Framework 1.1(JAF): http://www.oracle.com/technetwork/java/jaf11-139815.html

如果你使用了J2EE 1.4 Libraries 就不用再下载这两个jar包了,因为它里面有这两两个包。

 

名词解释

JAF:JavaBeans Activation Framework的缩写,JavaMail API 的所有版本都需要 JavaBeans Activation Framework 来支持任意数据块的输入及相应处理。功能似乎不多,但目前许多浏览器和邮件工具中都能找到这种基本的 MIME 型支持。activation.jar 文件就是JAF的框架jar包。

 

smtp:简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议族,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,整个过程只要几分钟。SMTP服务器则是遵循SMTP协议的发送邮件服务器,用来发送或中转发出的电子邮件。

 

POP3:邮局协议的第3个版本,它是规定个人计算机如何连接到互联网上的邮件服务器进行收发邮件的协议。它是因特网电子邮件的第一个离线协议标准,POP3协议允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时根据客户端的操作删除或保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。POP3协议是TCP/IP协议族中的一员,,由RFC 1939 定义。本协议主要用于支持使用客户端远程管理在服务器上的电子邮件

 

MIME:MIME的英文全称是"Multipurpose Internet Mail Extensions" 多功能Internet 邮件扩充服务,它是一种多用途网际邮件扩充协议,在1992年最早应用于电子邮件系统,但后来也应用到浏览器。服务器会将它们发送的多媒体数据的类型告诉浏览器,而通知手段就是说明该多媒体数据的MIME类型,从而让浏览器知道接收到的信息哪些是MP3文件,哪些是Shockwave文件等等。服务器将MIME标志符放入传送的数据中来告诉浏览器使用哪种插件读取相关文件。

 

主要的java mail api 组件

Message Class:Message class定义了一系列的属性和邮件内容,他的属性制定了邮件的地址信息和内容的结构,包括content type.Message的子类可以实现多种邮件格式的标准,例如,java mail api提供了MimeMessage class,他继承自Message并且实现了RFC822 和MIME 标准,它可以从字节流中构造自己的对象也可以产生字节流进行传播。一个实例化的Message子类持有该信息的内容,也包含收件人和发件人的地址信息,次信息的结构以及信息体的content type.

 

Address class : 是一个抽象类,代表了邮件的地址

 

BodyPart class :是一个抽象类而且继承了Part接口,他定义了Part所声明的属性和内容体,他并不想Message对象那样,他的属性集合中不包括from ,to ,subject,replyTo等字段信息。BodyPart是需要被添加到Multipart中的。而一个BodyPart既可以包含一个新的Multipart对象也可以包含一个DataHandler对象。

 

Multipart class :Multipart class实现了复杂信息,一个Multipart message他的content type 被定义为multipart.这个Multipart 是一个容器类他包含了若干的饿BodyPart,

 

各对象结构关系图如下

 

Java mail session

一个Java mail session 管理者配置选项和用户认证信息来和信息系统进行交互,他是用java.util.Properties类来构造,Properties里中含有smtp主机名,用户名密码和其他一些共享的信息。

他有两种创建方式

To create a Session using a static factory method: Session session = Session.getInstance(props, authenticator); To create the default shared session, or to access the default shared session: Session defaultSession =Session.getDefaultInstance(props, authenticator);

Authenticator对象控制着Session的安全方面,当一个邮件系统需要密码登陆的时候通过回调的方式和用户关联,获得此Authenticator中的用户名密码,因此他间接的控制着对默认session的访问。

 

Using the JavaMail API

1.一个邮件客户端通常通过创建一个session开始邮件处理任务 Session session = Session.getInstance(props, authenticator); 2. 设置传输协议 javax.mail.Transport transport = mailSession.getTransport("smtp"); 3. 创建MimeMessage,并设置from ,to以及设置主题 MimeMessage msg new javax.mail.internet.MimeMessage(session);

InternetAddress sendFrom = new InternetAddress(from); msg.setFrom(sendFrom); // 设置发送人地址

InternetAddress sendTo = new InternetAddress(to); msg.setRecipient(MimeMessage.RecipientType.TO, sendTo);

msg.setSubject(subject, "gb2312");

4.创建Multipart Multipart multipart = new MimeMultipart();

5.创建MimeBodyPart(不带附件,邮件内容为html格式)

MimeBodyPart part1= new MimeBodyPart();

part.setContent("<meta http-equiv=Content-Type content=text/html;charset=gb2312>"+text,"text/html;charset=GB2312");

6.创建MimeBodyPart(带附件)

MimeBodyPart part2 = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(file); part.setDataHandler(new DataHandler(fileds)); 

part.setFileName(MimeUtility.encodeWord(fileName, "gb2312", null));

7.将MimeBodyPart添加进Multipart,并将Multipart添加进Message

multipart.addBodyPart(part1);

multipart.addBodyPart(part2);

msg.setContent(multipart);

8.发送邮件

msg.setSentDate(new Date());// 设置信件头的发送日期 mMsg.saveChanges(); transport.connect(host, userName, pwd);//访问邮件服务器 transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients());//发送信息 transport.close();

 

java mail api 例子

 

SendMail.java

 

 

MyAuthenticator.java

 

 

 

Test.java

 

 

 

这两天需要写一个邮件服务的应用,看了有关的资料,所以写了此文记录一下自己的学习,但是还是有很多不足的,如有错误请各位指点,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值