使用JavaMail发送邮件

      JavaMail是Sun发布的用来处理E-mail的API,它可以方便地执行一些常用的邮件传输。虽然JavaMail是Sun的API之一,但它没有被加在标准的Java开发工具包(JDK)中,这就意味着使用之前必须另外下载JavaMail文件(http://www.sun.com),除此之外,要使用JavaMail,还需要有Sun的JavaBeans Activation Framework(JAF)支持,因此需要下载一个叫activation.jar的文件,将他们同时放在应用的lib目录下或其他Classpath包含的目录。


发送邮件过程中主要使用到的几个类:

1.  Javax.mail.Session类

Session定义了一个基本的邮件会话,任何工作都是基于这个Session的。Session对象需要一个java.util.Properties对象得到类似邮件服务器、用户名、密码这样的信息。Session的构造函数是私有的,可以通过getDefaultInstance()方法取得一个单一的可以被共享的默认Session,如:


Properties props = new Properties() ;

……

Session  session = Session.getDefaultInstance(props, null) ;

或者,可以通过getInstance()方法来创建一个惟一的Session,如:

Properties props = new Properties() ;

……

Session session = Session.getInstance(props, null) ;


2.  Javax.mail.Message类

创建了Session对象后,就要创建Message来发送Session。Message是一个抽象类,在大部分应用中可以使用它的子类Javax.mail.internet.MimeMessage。

创建Message的方法如下:

MimeMessage  message = new MimeMessage(session) ;

设置内容(content)的基本机制是使用setContent()方法:message.setContent(“Email Content.” , “text/plain”)。

如果能够明确地使用MimeMessage来创建Message,并且只是使用普通的文本(plain text),那么也可以使用setText(“Email Content.”)。

如果要创建其他类型的Message,如HTML类型的Message,那么还是使用前者message.setContent(“Email Content.” , “text/html”)。

设置主题(subject),使用setSubject()方法:message.setSubject(“Subject”)。

3.  Javax.mail.Address类

Address是一个抽象类,可以使用它的子类javax.mail.internet.InternetAddress。

创建一个Address语句如下:

Address address = new InternetAddress(“[email protected]”);

如果希望在出现邮件地址的地方显示一个名称,那么只需要再多传递一个参数。

Address address = new InternetAddress(“[email protected]”, “Kylen”);

除此,需要为Message的from以及to字段创建address对象。为了识别发送者,使用setFrom()和setReplyTo()方法。

message.setFrom(address) ;

如果需要显示多个from地址,可以使用addFrom()方法:

Address address[] = {……};

message.addFrom(address) ;

为了辨识Message的收件人,需要使用setRecipient()方法。

message.addRecipient(type, address) ;

Message.RecipientType 有几个预先定义好的类型:

Message.RecipientType.To     收件人  

Message.RecipientType.CC    抄送

Message.RecipientType.BCC   暗送

同时发给多个人:

Address  toAddress = new InternetAddress(“[email protected]”);

Address[] ccAddress = {new  InternetAddress(“[email protected]”),

new  InternetAddress(“[email protected]”)} ;

message.addRecipient(Message.RecipientType.To , toAddress) ;

message.addRecipient(Message.RecipientType.CC , ccAddress) ;


4.  Javax.mail.Transport类

最后,需要使用一个Transport类来完成邮件发送,可以通过两种方法发送邮件。Transport是一个抽象类,可以调用它的静态的send()方法来发送:

Transport.send(message) ;

或者,可以从Session中为所使用的协议取得一个指定的实例:

Transport  transport = session.getTransport(“smtp”) ;

transport.sendMessage(message , message.getAllRecipients()) ;

transport.close() ;


       经过以上的介绍,要用JavaMail发送一封普通的邮件就变得相当容易了。本实例编写了一个专门用于邮件处理的类MailUtil.java,其源代码如下:

package common.util.mail;

import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailUtil {

	static int port = 25;   //smtp端口
	static String server = "smtp.163.com";   //smtp服务器地址
	static String from = "Webmaster<[email protected]>";   //发送者
	static String user = "[email protected]";    //发送者地址
	static String password = "1141940938";   //密码

	public static void sendEmail(String email, String subject, String body) {
		try {
			Properties props = new Properties();
			props.put("mail.smtp.host", server);
			props.put("mail.smtp.port", String.valueOf(port));
			props.put("mail.smtp.auth", "true");
			Transport transport = null;
			Session session = Session.getDefaultInstance(props, null);
			transport = session.getTransport("smtp");
			transport.connect(server, user, password);
			MimeMessage msg = new MimeMessage(session);
			msg.setSentDate(new Date());
			InternetAddress fromAddress = new InternetAddress(from);
			msg.setFrom(fromAddress);
			InternetAddress[] toAddress = new InternetAddress[1];
			toAddress[0] = new InternetAddress(email);
			msg.setRecipients(Message.RecipientType.TO, toAddress);
			msg.setSubject(subject, "UTF-8");	
			msg.setText(body, "UTF-8");
			msg.saveChanges();
			transport.sendMessage(msg, msg.getAllRecipients());
		} catch (NoSuchProviderException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
}

你可能感兴趣的:(使用JavaMail发送邮件)