引言:
JavaMail 是一種可選的、能用于讀取、編寫和發(fā)送電子消息的包
JavaMail jar包下載地址:http://java.sun.com/PRoducts/javamail/downloads/index.html
JavaMail API中包含了多種郵件傳輸協(xié)議: SMTP POP(最新為pop3) IMAP MIME 四大類 (本章主要講解常用的 SMTP)
該API的幾大核心類:會話(session)、消息(message)、地址(address)、驗證程序(Authentication)、傳輸(Transport),存儲和文件夾
廢話不多說,跟著例子一步步解釋每個類的主要功能 —.—
實例代碼演示:
**********************此例可直接復制粘帖至編譯器進行測試哦**********************
package com.cplatform.movie.back.test;import java.io.UnsupportedEncodingException;import java.util.Properties;import javax.mail.Address;import javax.mail.Authenticator;import javax.mail.Message;import javax.mail.MessagingException;import javax.mail.PassWordAuthentication;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.AddressException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;/** * javaMail API 模擬郵箱發(fā)送電子郵件 * @author liuyt * @date 2014-10-24 上午10:10:51 */public class EmailFunction { /** * 發(fā)送郵件的props文件 (可使用自建priperty文件) * 用于初始化一個session實例,配置了一個session會話的一些基本信息 */ private final transient Properties props = new Properties(); /** * 郵件發(fā)送者的用戶名和密碼 */ private transient String username = "15138577682@163.com"; private transient String password = "郵箱密碼"; /** * session為一個基本的郵件會話,通過該會話可執(zhí)行其他郵件工作 * 如:之后的初始化一個MimeMessage實例 */ private transient Session session; /** * MIME類型郵件MimeMessage類(抽象消息類Message的一個子類) * 可以通過將Session對象傳遞給MimeMessage構造器的方法來創(chuàng)建 */ private transient MimeMessage message; /** * 郵件內容類型 (這里演示一個html格式的消息格式) */ private final static String CONTENT_TYPE_HTML = "text/html;charset=utf-8"; /** * 端口號 */ private final static int MAIL_PORT = 25; /** * 郵件內容 */ private String content = "點擊進入» <a href='http://m.survivalescaperooms.com/liuyitian'>劉一天的博客</a>"; /** * 繼承Authenticator子類用于用戶認證 (這里指郵件服務器對用戶的認證) * 也可外部創(chuàng)建一個單獨的郵件實體類(包涵用戶名/密碼即可),繼承Authenticator類來重寫PasswordAuthentication方法 */ static class MyAuthenricator extends Authenticator{ private String user=null; private String pass=""; public MyAuthenricator(String user,String pass){ this.user=user; this.pass=pass; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(user,pass); } } /** * 初始化 session 實例方法 * @param username 發(fā)送郵件的用戶名(地址) * @param password 密碼 * @param smtpHostName SMTP郵件服務器地址 */ private void initSession(String username, String password, String smtpHostName) { // 初始化props文件 props.setProperty("mail.transport.protocol", "smtp");//發(fā)送郵件協(xié)議 props.put("mail.smtp.auth", "true"); //需要驗證 props.put("mail.smtp.host", smtpHostName); //服務器地址 // 根據property文件創(chuàng)建session,并傳入Authenticator進行驗證 session = Session.getInstance(props, new MyAuthenricator(username, password)); // 是否控制臺打印消息列表 (可選) session.setDebug(true); } /** * 初始化郵箱message(消息實例)方法 * @param subject 郵件主題 * @param content 郵件內容 * @throws MessagingException * @throws AddressException * @throws UnsupportedEncodingException */ private void initMessage(String subject, Object content) throws AddressException, MessagingException, UnsupportedEncodingException { // 根據session創(chuàng)建一個消息對象 message = new MimeMessage(session); // 設置發(fā)件人地址 (第二個參數(shù)為顯示發(fā)件人名稱,目前還沒有測試成功) message.setFrom(new InternetAddress(username, "要顯示的發(fā)件人名稱")); // 設置郵件的主題 message.setSubject("主題:javamail測試郵件"); // 設置郵件的發(fā)送內容和內容的content-type(這里采用text/html格式) message.setContent(content.toString(),EmailFunction.CONTENT_TYPE_HTML); // 設置郵件的接收人地址--方法一 (選其一即可) // Address[] address = new Address[]{new InternetAddress("418874847@QQ.com"),"...更多列表..."}; // message.setReplyTo(addresses); // 設置郵件的接收人地址--方法二 (選其一即可) // 如果群發(fā)郵件,收件人較多,可另寫一個方法用于專門循環(huán)遍歷并設置接收人 message.addRecipient(Message.RecipientType.TO, new InternetAddress("418874847@qq.com")); message.addRecipient(Message.RecipientType.TO, new InternetAddress("12450374@qq.com")); } /** * 初始化郵件發(fā)送器方法 * @param username 發(fā)送郵件的用戶名(地址),并以此解析SMTP服務器地址 * @param password 發(fā)送郵件的密碼 * @throws MessagingException * @throws UnsupportedEncodingException * @throws AddressException * @return */ public void SimpleMailSender(final String username, final String password) throws AddressException, UnsupportedEncodingException, MessagingException { // 通過郵箱地址解析出smtp服務器,對大多數(shù)郵箱都管用 (還有IMAP和POP3) final String smtpHostName = "smtp." + username.split("@")[1]; // 調用初始化session方法 initSession(username, password, smtpHostName); // 調用初始化MimeMessage方法 (在初始化session完畢后) initMessage("郵件主題:測試郵件", content); } /** * 郵件發(fā)送 * @throws MessagingException * @throws UnsupportedEncodingException */ private void send() throws MessagingException, UnsupportedEncodingException { // 調用初始化郵件方法 SimpleMailSender(username, password); // 根據session來獲得一個Transport抽象類對象 Transport tran = session.getTransport(); // 打開鏈接 ,此時會去校驗用戶名和密碼 (參數(shù)列表:【 郵箱服務器地址】【端口號】【 發(fā)件箱用戶名】【發(fā)件箱密碼】) tran.connect(props.getProperty("mail.smtp.host"), EmailFunction.MAIL_PORT, username, password); // 發(fā)送郵件 (第二個參數(shù)null指收件人地址,因為在初始化message時已經設置好了收件人地址,此處便省略) tran.sendMessage(message, null); // 關閉通道 tran.close(); } /** * main方法測試 * @param args * @throws AddressException * @throws MessagingException * @throws UnsupportedEncodingException */ public static void main(String[] args) throws AddressException, MessagingException, UnsupportedEncodingException { //直接調用發(fā)送方法 new EmailFunction().send(); } }
小結簡單流程:
根據實例代碼,來總結下用javamail來發(fā)送一封簡單郵件的流程
上述流程是依據本章的實例代碼來羅列的,只是讓大家對流程有個簡單的認識,代碼本身可能并不精簡,還請哆哆指正。
javamail API 系列篇:
寫作不易,難免有疏漏和錯誤,還請慷慨指正,覺得有幫助還請推薦哦。
轉載請注明出處:http://m.survivalescaperooms.com/liuyitian/p/4048006.html
每天多學一點點 代碼少敲一點點
新聞熱點
疑難解答