首先在官网下载相应的java-mail.jar包。
在系统的配置文件中配置CLASSPATH,地址指向java-maril.jar。
javaMail API的分类和体系结构
1.创建和解析邮件内容的AIP
2.发送邮件AIP
3.接收邮件AIP
关键的几个类:
1.Message,该类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。客户端程序邮件时,首先使用创建邮件的javaMail API创建出封装了邮件数据的Message对象,然后把这个对象传递给邮件发送API发送。客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message类的实例对象中,客户端程序再使用邮件解析API从这个对象中解析出接收到的邮件数据。
2.Transport,该类是发送邮件的核心API类,它的实例对象代表实现了一个邮件发送协议的邮件发送对象,例如SMTP协议。客户端程序创建好Message对象后,只需要使用邮件发送API得到Transport对象,然后把Message对象传递给Transport对象,并调用它的发送方法,就可以把邮件发送给指定的SMTP服务器。
3.Store:该类是接收邮件的核心API类,它的实例代表实现了一个邮件接收协议的邮件接收对象,例如POP3协议。客户端程序接收邮件时,只需要使用邮件接收API得到Store对象的接收方法,就可以从指定的POP3服务器获得邮件数据,并把这些邮件数据封装到表示邮件的Message对象中。
4.Session:该类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器的主机名,端口号,采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的Transport和Store对象,以及为客户端创建Message对象时提供信息支持。
JAF(Java Bean Actication Framework, Java Bean激活框架)
该框架是专用的数据处框架,它用于专封装数据,并为应用程序提供访问和操作数据接口。JavaMail API可以利用JAF从一个数据源中读取数据和获知数据的MIME类型,并用这些数据生成MIME消息中的消息体和消息类型。
JAF的主要作用在于让JAVA应用程序知道如何对一个数据源进行查看,编辑和打印等操作。大家知道,在MS Word程序中可以打开一谝Word文档中嵌Visio图片,JAF就是要让Java程序能够完成类似的技术应用,让应用程序知道数据源支持哪些操作,每个操作分别调用哪个处理模块。对于通过JAF封装的数据,应用程序通过JAF提供的接口可以完成如下功能:
1,访问数据源中的数据。
2,获知数据源的数据类型。
3,获知可对数据进行的各种操作。
4,用户对数据执行操作时,自动创建执行该操作的软件部件的实例对象。
例如,如果使用JAF处理一个图片文件,那么应用程序通过JAF提供的接口就可以得到对图片文件进行操作的输入输出流,图片文件的MIME类型,JAF为图片文件提供的操作方法(如查看,编辑或打印图片等等),应用程序调用这些操作时,JAF就会调用相应的处理模块对数据进行处理。
使用JAF需要下载activation.jar包。可从SUN公司官网下载。
创建邮件内容
JavaMail API使用javax.mail.Message类来表示一封邮件Message类是一个抽象类,应用程序需要使用其实现子类javax.mail.internet.MimeMessage来创建Message类的实例对象。如果要创建一封只包含文本内容的简单邮件,那么只需要使用到MimeMessage类就可以了。但如果要创建一封包含内内嵌资源或多个附件的复杂邮件,那么则需要同时使用到JavaMail API中的MimeMessage,javax.mail.internet.MimeBodyPart和java.mail.internet.MimeMultipart等类。
1.MimeMessage类表示整封邮件。
2.MimeBodyPart类表示邮件的一个MIME消息。
3.MimeMultipart类表示一个由多个MIME消息组合成的MIME消息。
规则:
1.复杂邮件和简单邮件一样,都是使用MimeMessage对象来表示整封邮件的。
2.对于复杂邮件和邮件体,不能再简单地调用MimeMessage.setText方法生成,而是要用一个MimeMultipart对象表示,并通过MimeMessage.setContent(Multipart mp)方法设置到MimeMessage对象中。
3.MimeMultipart对象用来组合多个MIME消息,其中每个MIME消息分别用一个MimeBodyPart对象来表示,并通过MimeMultipart.addBodyPart(BodyPart part)方法加入到MimeMultipart对象中。
4.如果MimeBodyPart对象表示的MIME消息又是一个MIME组合消息,那么它的内容又需要使用一个MimeMultipart对象来表示,并通过MimeBodyPart.setContent(Multipart mp)方法设置到MimeBodyPart对象中。与代表整封邮件的MimeMultipart对象一样,这个MimeMultipart对象中的每一个组成单元也分别由一个MimeBodyPart对象表示。
简单纯文件邮件发送例子:
该例子只是发送到本地的邮件例子!
package com.yyc.mail;
import java.io.FileOutputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class TestMessage {
public static void main(String args[]){
String from = "doodiv@sina.com";
String to = "doodiv@sina.com";
String subject = "test";
String body = "test!!!";
//创建Session实例对象
Session session = Session.getDefaultInstance(new Properties());
//创建MimeMessage实例对象
MimeMessage msg = new MimeMessage(session);
try {
//设置发件人地址
msg.setFrom(new InternetAddress(from));
//设置收件人地址
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
//设置发送日期
msg.setSentDate(new Date());
//设置邮件主题
msg.setSubject(subject);
//设置纯文本内容的邮件正文
msg.setText(body);
//保存并生成最终的邮件内容
msg.saveChanges();
msg.writeTo(new FileOutputStream("c:\\test.eml"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}