1. 程式人生 > >JavaMail實現郵件傳送功能

JavaMail實現郵件傳送功能

最近的專案要使用javamail進行郵件傳送,寫這篇部落格總結下

傳送簡單的郵件

在進行郵件傳送之前要引入javamail的Maven依賴

dependency>
			<groupId>javamail</groupId>
			<artifactId>mail</artifactId>
			<version>1.3.2</version>
		</dependency>

編寫測試程式碼

//設定網易雲郵箱賬號
	public static String emailAccout =
"傳送方的郵箱賬號@163.com"; //設定網易雲smtp授權碼 public static String emailPassword = "傳送方的授權碼"; //設定163郵箱的smtp伺服器地址 //郵件協議有smtp pop3 imap4 一般的傳送郵件使用smtp協議,要先等於網易郵箱開啟smtp、pop3/imap4協議授權 public static String emailSmptHost = "smtp.163.com"; //傳送簡單的郵件 content為郵件內容 To接收方 public static void setMail(String content,String To)
{ //設定郵件屬性 Properties pro = new Properties(); //配置郵件傳輸協議 pro.setProperty("mail.transport.protocol", "smtp"); //設定發件人的smtpd地址 pro.setProperty("mail.smtp.host", emailSmptHost); //設定需要進行認證 pro.setProperty("mail.smtp.auth", "true"); //建立會話物件,使用者和郵件伺服器互動 Session session = Session.getInstance(pro)
; //設定為Debug模式 可以看到執行情況 sesssion.setDebug(true); Transport transport = null; try { //建立一封郵件 MimeMessage message = new MimeMessage(session); //設定發件人 message.setFrom(new InternetAddress(emailAccout)); //設定收件人 可以通過addRecipient新增多個收件人 message.setRecipient(RecipientType.TO, new InternetAddress(To)); //設定內容 message.setContent(content,"text/html;charset=utf-8"); //設定主題 message.setSubject("測試郵件"); //獲取郵件傳輸物件 transport = session.getTransport(); //設定賬號密碼進行連結 transport.connect(emailSmptHost,emailAccout,emailPassword); //傳送郵件,傳送到全部地址 transport.sendMessage(message, message.getAllRecipients()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }

測試傳送

		setMail("測試","你要傳送的郵箱@163.com");

結果
在這裡插入圖片描述

傳送複雜的郵件 帶圖片與附件

public static void complexMail(String contend,String to) throws AddressException, MessagingException, UnsupportedEncodingException{
		Properties pro = new Properties();
		pro.setProperty("mail.transport.protocol", "smtp");
		pro.setProperty("mail.smtp.host",emailSmptHost);
		pro.setProperty("mail.smtp.auth", "true");
		Session session = Session.getInstance(pro);
/*		session.setDebug(true);
*/		MimeMessage message = new MimeMessage(session);
		message.setFrom(new InternetAddress(emailAccout));
		message.setRecipient(RecipientType.TO, new InternetAddress(to));
		message.setSubject("測試");
		//建立圖片"節點"
		MimeBodyPart image = new MimeBodyPart();
		//讀取本地檔案 
		DataHandler dh = new DataHandler(new FileDataSource("D://44//1.jpg"));
		//將圖片資料新增到節點
		image.setDataHandler(dh);
		//為圖片節點設定唯一編號
		image.setContentID("image_tail");
		//建立文字"節點"
		MimeBodyPart text = new MimeBodyPart();
		//將整合圖片包含到郵件內容中
		text.setContent("這是一張圖片<br/><img src='cid:image_tail'/>", "text/html;charset=UTF-8");
		//設定文字和圖片的節點關係,變成混合節點
		MimeMultipart text_image = new MimeMultipart();
		text_image.addBodyPart(text);
		text_image.addBodyPart(image);
		text_image.setSubType("related");
		//將檔案+圖片封裝成普通的節點
		MimeBodyPart tIm = new MimeBodyPart();
		tIm.setContent(text_image);
		//建立附件
		MimeBodyPart attachment = new MimeBodyPart();
		//讀取本地檔案
		DataHandler dh2 = new DataHandler(new FileDataSource("D://44//shop.sql"));
		attachment.setDataHandler(dh2);
		//設定附件名字
		attachment.setFileName(MimeUtility.encodeText(dh2.getName()));
		//設定文字加圖片加附件 最大的節點
		MimeMultipart mm = new MimeMultipart();
		mm.addBodyPart(tIm);
		mm.addBodyPart(attachment);
		mm.setSubType("mixed");
		//將節點新增到正文
		message.setContent(mm);

		Transport transport = session.getTransport();
		transport.connect(emailSmptHost, emailAccout, emailPassword);
		transport.sendMessage(message, message.getAllRecipients());
	}

結果
在這裡插入圖片描述

注意
圖片大小可調,在img可以設定寬度與高度

總結

javamail傳送郵件先建立properties物件設定郵件屬性,通過session構建與郵件伺服器進行互動,再建立一封郵件物件MineMail,設定郵件內容與發件人,通過session構建郵件傳輸物件transport 進行連線郵件伺服器與傳送郵件