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(); } } }