通過Java傳送Email ,簡單入門。

悠悠隱於市發表於2011-02-18

最近沒事做,寫了一個簡單的郵件傳送例項..

 

首先做好, 準備工作..如果是JDK1.5則要準備如下兩個包.

mail.jar

activation.jar

 

把這這兩個包,新增到專案的依賴中..

 

接下來就是寫Email 程式碼的部分:

具體程式碼如下:

 

/**
 * 郵件的基本配置資訊;
 * @author Administrator
 *
 */
public class MailSenderInfo  {
	//傳送郵件伺服器;
	private String emailServiceHost;
	//傳送伺服器埠;
	private String emailServicePort;
	//郵件傳送者地址;
	private String fromAddress;
	//郵件接收地址;
	private String toAddress;
	//登陸郵件伺服器的使用者名稱;
	private String userName;
	//登陸郵件伺服器的密碼;
	private String password;
	//是否需要驗證;
	private boolean validate;
	//郵件主題;
	private String subject;
	//郵件內容;
	private String content;
	//附件檔名;
	private String[] attachFileNames;
	
	//***getter 和 setter方法省略***
}

 

 

接下來封裝傳送郵件的方法.

public class SimpleMailSender {
	/**
	 * 以文字的格式傳送郵件;
	 * @return boolean;
	 */
	public boolean sendTextMail(MailSenderInfo mailSenderInfo){
		//是否身份驗證;
		MyAuthenticator authenticator = null;

		//獲取郵件的配置資訊;
		Properties properties = new Properties();
		properties.put("mail.smtp.host",mailSenderInfo.getEmailServiceHost()); 
		properties.put("mail.smtp.auth", "true");
		
		//判斷是否身份驗證;
		if(mailSenderInfo.isValidate()){
			//如果是需要身份驗證,這建立一個密碼驗證器;
			authenticator = new MyAuthenticator(mailSenderInfo.getUserName(), mailSenderInfo.getPassword()); 
		}

		//根據郵件 的使用者名稱和密碼建立一個發郵件的Session;
		Session senderMailSession = Session.getDefaultInstance(properties,authenticator);

		//根據session建立一個郵件訊息;
		Message mailMessage = new MimeMessage(senderMailSession);
		try {
			try {
				//建立郵件傳送者地址;
				mailMessage.setFrom(new InternetAddress(mailSenderInfo.getFromAddress()));

				//建立郵件接收者地址;
				Address toAddress = new InternetAddress(mailSenderInfo.getToAddress());	
				mailMessage.setRecipient(Message.RecipientType.TO,toAddress);
			} catch (AddressException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

			//設定郵件主題;
			mailMessage.setSubject(mailSenderInfo.getSubject());

			//設定郵件傳送時間:
			mailMessage.setSentDate(new Date());

			//設定郵件內容;設定這個. "text/html;charset=utf-8"  解決內容亂碼問題..
			 mailMessage.setContent(mailSenderInfo.getContent(),"text/html;charset=utf-8");

			//傳送郵件;
			Transport.send(mailMessage);
			return true;
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return false;
		}
	}
}

 

 

最後就是測試郵件傳送:

public class EmailTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MailSenderInfo mailSenderInfo = new MailSenderInfo();
		mailSenderInfo.setUserName("myfirstemail@163.com");
		mailSenderInfo.setPassword("88888");
		mailSenderInfo.setEmailServiceHost("smtp.163.com");
		mailSenderInfo.setValidate(true);
		mailSenderInfo.setFromAddress("myfirstemail@163.com");
		mailSenderInfo.setToAddress("1127290783@126.com");
		mailSenderInfo.setSubject("第一封郵件");
		mailSenderInfo.setContent("first Email!");
		SimpleMailSender sender = new SimpleMailSender();
		boolean sendresult= sender.sendTextMail(mailSenderInfo);
		
		if(sendresult){
			System.out.println("郵件傳送成功!");
		}else{
			System.out.println("郵件傳送失敗!");
		}
	}
}

 

 

 

 

 在測試時, 郵箱一定要設定開通smtp服務的, 像 126,163這些網易郵箱,是預設不開通..所以需要在設定->POP3/SMTP裡面->把smtp服務勾選上..才可以。

 

還有一個就是,你的郵箱 使用者名稱和 mail.smpt.host.地址要一致,.否則發不出去..

我整了好幾個小時..才測試通過。所以今天特意寫出來.. 希望大家不要遇到我同樣的錯誤...少走彎路。

 

 

 

相關文章