JAVA MAIL发送邮件

JAVA MAIL API
一、Java Mail API本质上是基于SMTP协议、POP协议、IMAP协议和MIME协议
1、SMTP协议
   简单邮件传输协议是用于传送电子邮件的机制。在Java Mail API环境中,基于JavaMail的应用程序将于与Internet服务提供商的SMTP服务器通信,SMTP服务器把消息转发给用做接收消息的SMTP服务

器。
2、POP协议
   邮局协议是Internet上大多数人用来接收邮件的机制。
3、IMAP协议
   Internet消息访问协议是用于接收消息的更加高级的协议。
4、MIME协议
   多用途的国际邮件扩充协议定义传输的内容。
二、Java Mail开发包
Java Mail API的核心类包括会话、消息、地址、身份验证、传输、存储和文件夹。
1、会话类(Session)
   Session类定义了一个基本的邮件会话。Session对象利用java.util.Properties对象获取邮件服务器、用户名和密码等信息,以及其他可在整个应用程序中共享的信息。
   创建默认会话
Properties props = new Properties();
        …//填充Properties对象
        Session session = Session.getDefaultInstance(props,null);
   创建独特会话
        Properties props = new Properties();
        …//填充Properties对象
        Session session = Session.getInstance(props,null);
   Null参数是一种Authenticator(认证)对象
2、消息类(MimeMessage)
   一个MimeMessage对象是一种MIME类型和报头的消息。
   可以通过将Session对象传递给MimeMessage构造器的方法来创建消息:
   MimeMessage message = new MimeMessage(session);
   一旦创建了消息,就可以设置消息的各个部分
设置内容的基本机制是setContent()方法,它带有表示内容和MIME类型的参数。
   message.setContent("hello","text/plain");
如果消息是纯文本
   message.setText("hello");
设置主题
   message.setSubject("subject");
3、地址类
   用Address类为信件标上地址。
   要创建只带有电子邮件地址的地址,可以把电子邮件地址传递给Address类的构造器:
Address address = new InternetAddress("");
   如果想要一个名字出现在电子邮件地址后,也可以将其传递给构造器:
Address address = new InternetAddress("");
   地址与消息连接:setFrom()和setReplyTo()
4、身份验证类
   在创建时,必须用会话记录Authentication类。其后,当需要进行身份验证时,通知Authentication,将会弹出一个窗口,或从一个配置文件中读取用户名和密码,并把他们作为一个

PasswordAuthentication对象返回给调用程序。
Properties props = new Properties();
…//填充Properties对象
Authentication auth = new MyAuthenticator();
        Session session = Session.getDefaultInstance(props,auth);
5、传输类
   默认版本
   Transport.send(message);
   从用于协议的会话中获取一个特定的实例,然后传递用户名和密码并发送消息,最后关闭连接
   message.saveChanges();
        Transport transport = session.getTransport("smtp");
   transport.contect(host,username,password);
transport.sendMessage(message,message.getAllRecipients());
transport.close();
6、存储类和文件夹类
   Store store = session.getStore("pop3");
   store.connect(host,username,password);
   Folder folder = store.getFolder("INBOX");
   folder.open(Folder.READ_ONLY);
   Message message[] = folder.getMessages();
   对于POP3协议,唯一可用的文件夹是INBOX。如果使用的是IMAP协议,则可以使用其他的文件夹。
   一旦读取消息,可以用getContent()方法获取其内容,或使用writeTo()方法将其内容写到一个流中。getContent()方法只获取消息内容,而writeTo()方法则还会输出报头。
   System.out.println(((MimeMessage)message).getContent());
   读取完邮件后,就可以关闭对文件夹和存储的连接
   folder.close(aBoolean);
   store.close();
三、实例
package com.email;
/**
* @author star
* SendMail.java
*/
import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.activation.URLDataSource;
import javax.mail.BodyPart;
import javax.mail.Multipart;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;

//import javax.mail.internet.MailDateFormat;

public class SendMail {
        public static String TEXT = "text/plain;charset=gb2312";
        public static String HTML = "text/html;charset=gb2312";
        private String host; //邮件服务器
        private String user; //用户名
        private String pass;//用户密码
        private String from;//发信人
        private String to;//收信人
        private String cc;//Carbon Copy, 抄送邮件给某人
        private String bc;//bcc Blind Carbon Copy,隐蔽副本 隐蔽抄送给某人
        private String subject;//邮件主题
        private BodyPart body;//邮件内容
        private boolean needAuth; //是否需要认证
        private List attaches;//邮件附件
/**
* 构造方法
*
*/
        public SendMail() {
            &nb