使用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包含的目录。 html


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

1.  Javax.mail.Session类 服务器

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


Properties props = new Properties() ; ide

…… 函数

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

或者,能够经过getInstance()方法来建立一个唯一的Session,如: 开发工具

Properties props = new Properties() ; spa

…… code

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(“test@company.com”);

若是但愿在出现邮件地址的地方显示一个名称,那么只须要再多传递一个参数。

Address address = new InternetAddress(“test@company.com”, “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(“manager@company.com”);

Address[] ccAddress = {new  InternetAddress(“colleague1@company.com”),

new  InternetAddress(“colleague2@company.com”)} ;

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<kylen@163.com>";   //发送者
	static String user = "kylen@163.com";    //发送者地址
	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();
		}
	}
}
相关文章
相关标签/搜索