Java發送電子郵件(使用mail.jar和activation.jar)

本文參考使用技術Java+JSP+Servlet

本次源代碼可在本人網盤下載:http://pan.baidu.com/s/1jIdV7r4

循序漸進介紹如何使用Java發送電子郵件

一、J2EE+前臺Bootstrap實現發送郵件

二、Java代碼發送郵件

三、SpringMVC架構+前臺layUI改造郵件發送項目

 

J2EE+前臺Bootstrap實現發送郵件

1)需求場景描述

1、在網站註冊成功後,會發送郵件到註冊者郵箱,提示使用郵箱激活賬號。

2、訪問某網站用戶賬號鎖定時,會發送一個連接到郵箱來解鎖賬號,或者找回密碼等。

(2)運行截圖

 

 

 (3)代碼實現

 1.新建Dynamic Web Project工程

 2.引入mail.jar和activation.jar

 3.項目目錄結構如圖

 4.配置發件人163郵箱的SMTP服務器、賬戶以及密碼等參數

 

配置mail.properties文件之後即可運行,若運行報錯,檢測Jre和Tomcat環境(替換成本機的),本次用的是JDK1.8和Tomcat8如下圖所示

 

Java代碼發送郵件

爲了更清晰的理解代碼,現用Java工程描述

Java Project忽略界面層,web服務器,用控制檯打印的形式,是架構師構建測試項目的首選,本例使用大家都能懂的main主方法,正規來說應該使用JUnit單元測試。

 

下載並加載JavaMail API
JavaMail API目前的版本爲JavaMail API 1.4.3。可以從如下地址下載:
http://java.sun.com/products/javamail/downloads/index.html
下載後,建立jarFile文件夾,貼入mail.jar和activation.jar文件並且Add to Build Path

編寫郵件身份驗證類

用來驗證SMTP服務器身份。程序繼承了Authenticator類,它主要用來實現登錄郵件服務器時的認證。它包含兩個屬性:username和password,分別用來存儲認證時所需的用戶名和密碼信息。程序重寫了Authenticator類的getPasswordAuthentication()方法,該方法返回PasswordAuthentication對象,此對象包含通過STMP服務器身份驗證所需的用戶名和密碼,供認證時session調用。

Auth類,它繼承了Authenticator類 

package com.zhi.mail;

import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

public class Auth extends Authenticator {

	private String username = "";
	private String password = "";

	public Auth(String username, String password) {
		this.username = username;
		this.password = password;
	}
	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(username, password);
	} 
}

編寫發送郵件類
代碼說明:該程序爲一個郵件發送通用類的程序,SendMail構造方法實現對發送郵件身份的認證,獲得Session對象。該方法中SMTPHost、Port、MailUsername、MailPassword分別表示所使用的SMTP服務器、服務器的smtp端口、用戶名和密碼。sendingMimeMail()方法爲發送郵件的方法,在該方法需要傳入的參數中,MailFrom爲發件人電子信箱,MailTo爲收件人電子信箱,MailCopyTo爲抄送人電子信箱,MailBCopyTo爲暗送人電子信箱,MailSubject爲發送郵件主題,MailBody爲發送郵件正文。sendingMimeMail()返回boolean類型,表示是否發送成功。發送郵件時先調用構造方法SendMail()創建郵件發送對象,然後調用sendingMimeMail()方法發送。

SendMail類

package com.zhi.mail;

import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class SendMail {

	private Properties props; //系統屬性
	private Session mailSession; //郵件會話對象
	private MimeMessage mimeMsg; //MIME郵件對象

	public SendMail(String SMTPHost, String Port, String MailUsername, String MailPassword) {
		Auth au = new Auth(MailUsername, MailPassword);
		//設置系統屬性
		props=java.lang.System.getProperties(); //獲得系統屬性對象
		props.put("mail.smtp.host", SMTPHost); //設置SMTP主機
		props.put("mail.smtp.port", Port); //設置服務端口號
		props.put("mail.smtp.auth", "true"); //同時通過驗證
		//獲得郵件會話對象 
		mailSession = Session.getInstance(props, au);
	}
  
	public boolean sendingMimeMail(String MailFrom, String MailTo,
			String MailCopyTo, String MailBCopyTo, String MailSubject,
			String MailBody) {
		try { 
			//創建MIME郵件對象
			mimeMsg=new MimeMessage(mailSession);
			//設置發信人
			mimeMsg.setFrom(new InternetAddress(MailFrom));
			//設置收信人
			if(MailTo!=null){
				mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(MailTo));
			} 
			//設置抄送人
			if(MailCopyTo!=null){
				mimeMsg.setRecipients(javax.mail.Message.RecipientType.CC,InternetAddress.parse(MailCopyTo));
			}
			//設置暗送人
			if(MailBCopyTo!=null){
				mimeMsg.setRecipients(javax.mail.Message.RecipientType.BCC,InternetAddress.parse(MailBCopyTo));
			}
			//設置郵件主題 
			mimeMsg.setSubject(MailSubject,"utf-8");
			//設置郵件內容,將郵件body部分轉化爲HTML格式
			mimeMsg.setContent(MailBody,"text/html;charset=utf-8");
			//發送郵件
			Transport.send(mimeMsg);
			return true;
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
}

編寫SendDemo類進行測試

package com.zhi.demo;

import com.zhi.mail.SendMail;

public class SendDemo {

	/**
	 * 若頻繁發送,騰訊服務器會將郵件自動識別爲垃圾郵件並且屏蔽
	 * @param args
	 */
	public static void main(String[] args) {
		String SMTPHost="";
		String Port="";
		String MailUsername="[email protected]"; //直接用我的郵件進行發送測試
		String MailPassword=""; //密碼請勿修改
		SendMail sendMail=new SendMail(SMTPHost,Port,MailUsername,MailPassword);
		
		String MailFrom=null; //發件人
		String MailTo=null; //收件人
		String MailCopyTo=null; //抄送人
		String MailBCopyTo=null; //暗送人
		String MailSubject="JavaSE發送郵件測試"; //郵件主題
		String MailBody="引用mail.jar和activation.jar實現郵件發送!"; //郵件內容
		
		//發送郵件
		boolean isSend=sendMail.sendingMimeMail(MailFrom, MailTo, MailCopyTo, MailBCopyTo, MailSubject, MailBody);
		if(isSend){
			System.out.println("郵件發送成功");
		}else{
			System.out.println("郵件發送失敗");
		}
	}

}

運行main主方法發送郵件

 

SpringMVC架構+前臺layUI改造郵件發送項目

待續...


其他
SMTP 
SMTP (Simple Mail Transfer Protocol,簡單郵件傳輸協議)由RFC 821定義。它定義了發送電子郵件的機制。
POP
POP(Post Office Protocol)代表郵局協議
IMAP
IMAP是更高級的用於接收消息的協議。在RFC 2060中被定義,IMAP代表Internet消息訪問協議(Internet Message Access Protocol),目前使用的是版本4,因此也稱IMAP4。
MIME
MIME代表多用途Internet郵件擴展標準(Multipurpose Internet Mail Extensions)。它不是郵件傳輸協議,但對傳輸內容的消息、附件及其他內容定義了格式。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章