JavaMail介紹
JavaMail是SUN提供給開發人員在應用程序中實現郵件發送和接收功能而提供的一套標准開發類庫,支持常用的郵件協議,如SMTP、POP3、IMAP,開發人員使用JavaMail編寫郵件程序時,無需考慮底層的通信細節(Socket),JavaMail也提供了能夠創建出各種復雜MIME格式的郵件內容的API。使用JavaMail,我們可以實現類似OutLook、FoxMail的軟件。雖然JavaMail(僅支持JDK4及以上)也是Java的API之一,但是卻沒有直接加入到JDK中,所以我們需要另行下載。另外,JavaMail依賴JAF(JavaBeans Activation Framework),JAF在Java6之后已經合並到JDK中,而JDK5之前需要另外下載JAF的類庫。
JavaMail下載地址:http://www.oracle.com/technetwork/java/javamail/index.html
JavaMail發送郵件
郵件的方發送過程可以參照:【Mail】telnet收發郵件過程;本例中主要流程是:先創建一個Message(郵件對象),然后使用Transport(郵件傳輸對象)發郵件發送到郵件服務器。
- 先新建一個javaweb的maven項目。參照:【Maven】Eclipse 使用Maven創建Java Web項目;
- 在pom文件中,引入javamail.jar包
- 新建一個Demo1類,使用Transport 非靜態方法 發送郵件
1 package com.hd.javamail; 2 3 import java.util.Properties; 4 5 import javax.mail.Address; 6 import javax.mail.Message; 7 import javax.mail.Session; 8 import javax.mail.Transport; 9 import javax.mail.internet.InternetAddress; 10 import javax.mail.internet.MimeMessage; 11 12 /** 13 * 14 * @author H__D 15 * @date 2016年12月6日 下午7:01:27 16 * 17 */ 18 public class Demo1 { 19 20 /** 21 * 使用Transport 非靜態方法 發送郵件 22 * 連接163服務,給QQ郵箱發郵件 23 */ 24 public static void main(String[] args) throws Exception { 25 26 // 屬性 27 Properties properties = new Properties(); 28 // 設置認證屬性 29 properties.setProperty("mail.smtp.auth", "true"); 30 // 設置通信協議 31 properties.setProperty("mail.transport.protocol", "smtp"); 32 // 郵件環境信息 33 Session session = Session.getInstance(properties); 34 // 調試,打印信息 35 session.setDebug(true); 36 37 // 郵件 38 Message message = new MimeMessage(session); 39 // 主題 40 message.setSubject("test message"); 41 // 發送人 42 message.setFrom(new InternetAddress("xxxx@163.com")); 43 // 內容 44 message.setText("this is content"); 45 46 // 郵件傳輸對象 47 Transport transport = session.getTransport(); 48 // 傳輸連接:host,port,user,pass/主機,端口,用戶名,密碼 49 transport.connect("smtp.163.com", 25, "xxxx@163.com", "xxxxxx"); 50 // 發送郵件 51 transport.sendMessage(message, new Address[] { new InternetAddress("123456@qq.com") }); 52 53 // 關閉連接 54 transport.close(); 55 } 56 }
- 新建一個Demo2類,使用Transport 非靜態方法 發送郵件
1 package com.hd.javamail; 2 3 import java.util.Properties; 4 5 import javax.mail.Authenticator; 6 import javax.mail.Message; 7 import javax.mail.Message.RecipientType; 8 import javax.mail.PasswordAuthentication; 9 import javax.mail.Session; 10 import javax.mail.Transport; 11 import javax.mail.internet.InternetAddress; 12 import javax.mail.internet.MimeMessage; 13 14 /** 15 * 16 * @author H__D 17 * @date 2016年12月6日 下午7:05:07 18 * 19 */ 20 public class Demo2 { 21 22 /** 23 * 使用Transport 靜態方法 發送郵件 24 * 連接163服務,給多個QQ郵箱發郵件 25 * @param args 26 * @throws Exception 27 */ 28 public static void main(String[] args) throws Exception { 29 // 屬性對象 30 Properties properties = new Properties(); 31 // 開啟debug調試 ,打印信息 32 properties.setProperty("mail.debug", "true"); 33 // 發送服務器需要身份驗證 34 properties.setProperty("mail.smtp.auth", "true"); 35 // 發送服務器端口,可以不設置,默認是25 36 properties.setProperty("mail.smtp.port", "25"); 37 // 發送郵件協議名稱 38 properties.setProperty("mail.transport.protocol", "smtp"); 39 // 設置郵件服務器主機名 40 properties.setProperty("mail.host", "smtp.163.com"); 41 // 環境信息 42 Session session = Session.getInstance(properties, new Authenticator() { 43 @Override 44 protected PasswordAuthentication getPasswordAuthentication() { 45 // 在session中設置賬戶信息,Transport發送郵件時會使用 46 return new PasswordAuthentication( "xxxx@163.com", "xxxxx"); 47 } 48 }); 49 50 // 創建郵件對象 51 Message message = new MimeMessage(session); 52 //設置主題 53 message.setSubject("中文主題"); 54 // 發件人 55 message.setFrom(new InternetAddress("xxxx@163.com")); 56 // 多個收件人 57 message.setRecipients(RecipientType.TO, InternetAddress.parse("654321@qq.com,123456@qq.com")); 58 // 抄送人 59 message.setRecipient(RecipientType.CC, new InternetAddress("aaaaaa@163.com")); 60 // 暗送人 61 message.setRecipient(RecipientType.BCC, new InternetAddress("bbbbbbb@163.com")); 62 // HTML內容 63 message.setContent("<span style='color:red'>中文呵呵</span>","text/html;charset=utf-8"); 64 65 // 連接郵件服務器、發送郵件、關閉連接,全做了 66 Transport.send(message); 67 68 } 69 }
- 使用 465端口 發送郵件,且使用ssl認證 發送郵件
1 package com.hd.javamail; 2 3 import java.util.Properties; 4 5 import javax.mail.Authenticator; 6 import javax.mail.Message; 7 import javax.mail.Message.RecipientType; 8 import javax.mail.PasswordAuthentication; 9 import javax.mail.Session; 10 import javax.mail.Transport; 11 import javax.mail.internet.InternetAddress; 12 import javax.mail.internet.MimeMessage; 13 14 /** 15 * 16 * @author H__D 17 * @date 2019年11月28日 下午7:05:07 18 * 19 */ 20 public class Demo3 { 21 22 /** 23 * 由於國際與國內均對垃圾郵件進行嚴格管控,很如服務器的25端口被禁用了 24 * 下面介紹使用465端口發送郵件 25 * 使用Transport 靜態方法 發送郵件 26 * 連接163服務,給多個QQ郵箱發郵件 27 * @param args 28 * @throws Exception 29 */ 30 public static void main(String[] args) throws Exception { 31 // 屬性對象 32 Properties properties = new Properties(); 33 // 開啟debug調試 ,打印信息 34 properties.setProperty("mail.debug", "true"); 35 // 發送服務器需要身份驗證 36 properties.setProperty("mail.smtp.auth", "true"); 37 // 使用ssl認證 38 properties.setProperty("mail.smtp.ssl.enable", "true"); 39 // 發送服務器端口,可以不設置,默認是25 40 properties.setProperty("mail.smtp.port", "465"); 41 // 發送郵件協議名稱 42 properties.setProperty("mail.transport.protocol", "smtp"); 43 // 設置郵件服務器主機名 44 properties.setProperty("mail.host", "smtp.163.com"); 45 // 環境信息 46 Session session = Session.getInstance(properties, new Authenticator() { 47 @Override 48 protected PasswordAuthentication getPasswordAuthentication() { 49 // 在session中設置賬戶信息,Transport發送郵件時會使用 50 return new PasswordAuthentication( "xxxx@163.com", "xxxxx"); 51 } 52 }); 53 54 // 創建郵件對象 55 Message message = new MimeMessage(session); 56 //設置主題 57 message.setSubject("中文主題"); 58 // 發件人 59 message.setFrom(new InternetAddress("xxxx@163.com")); 60 // 多個收件人 61 message.setRecipients(RecipientType.TO, InternetAddress.parse("654321@qq.com,123456@qq.com")); 62 // 抄送人 63 message.setRecipient(RecipientType.CC, new InternetAddress("aaaaaa@163.com")); 64 // 暗送人 65 message.setRecipient(RecipientType.BCC, new InternetAddress("bbbbbbb@163.com")); 66 // HTML內容 67 message.setContent("<span style='color:red'>中文呵呵</span>","text/html;charset=utf-8"); 68 69 // 連接郵件服務器、發送郵件、關閉連接,全做了 70 Transport.send(message); 71 72 } 73 }