使用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();
		}
	}
}
相關文章
相關標籤/搜索