JavaMail的體系結構及發送複雜郵件

一 . 電子郵件傳輸的全過程:html

二 . JavaMail 的體系結構與API分類java

JavaMail API按其功能劃分一般可分爲以下三大類:服務器

建立和解析郵件內容的API :Message類是建立和解析郵件的核心API,它的實例對象表明一封電子郵件。 
發送郵件的API:Transport類是發送郵件的核心API類,它的實例對象表明實現了某個郵件發送協議的郵件發送對象,例如SMTP協議。 
接收郵件的API:Store類是接收郵件的核心API類,它的實例對象表明實現了某個郵件接收協議的郵件接收對象,例如POP3協議。
Session類 
Session類用於定義整個應用程序所需的環境信息,以及收集客戶端與郵件服務器創建網絡鏈接的會話信息,如郵件服務器的主機名、端口號、採用的郵件發送和接收協議等。Session對象根據這些信息構建用於郵件收發的Transport和Store對象,以及爲客戶端建立Message對象時提供信息支持。
網絡

三. 郵件發送的過程:session


四.使用JavaMail發送一封帶圖片和附件的複雜郵件:ide

 

郵件組織結構相關的API:spa

MimeMessage類表示整封郵件。
MimeBodyPart類表示郵件的一個MIME消息。
MimeMultipart類表示一個由多個MIME消息組合成的組合MIME消息。調試

 

複雜郵件的結構圖:code

發送郵件步驟;orm

  1. 搭建開發環境:準備發送郵件相關jar包:

 mail.jar
 activation.jar(JAF):(可選的,若是JDK6.0+,則不須要此包)

 2. 編寫代碼實現,以下:

package com.itheima;

import java.io.FileOutputStream;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
//實現本身向本身發送一封複雜郵件
public class SendMessage {

	public static void main(String[] args) throws Exception{
		Properties props = new Properties();//環境變量
		props.setProperty("mail.host", "smtp.163.com");
		props.setProperty("mail.transport.protocol", "smtp");
		props.setProperty("mail.smtp.auth", "true");
		Session session = Session.getInstance(props,new Authenticator() {
			@Override
			public PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("laotian", "123");
			}
		});
		session.setDebug(true);//開始調試:監控smtp協議
		Transport ts = session.getTransport();
		ts.connect("smtp.163.com", "laotian", "123");//鏈接郵件發送服務器
		//建立表明郵件的對象MimeMessage
		MimeMessage message = new MimeMessage(session);
		message.setSubject("tttttttt");
		message.setFrom(new InternetAddress("laotian@163.com"));
		message.setRecipient(Message.RecipientType.TO, new InternetAddress("laotian@163.com"));
		//分別建立郵件的每部份內容,設置類型,有id的設置id。MimeBodyPart
		MimeBodyPart part1 = new MimeBodyPart();
		part1.setContent("aaa<img src='cid:mm'/>aaa", "text/html");
		
		MimeBodyPart part2 = new MimeBodyPart();
		//jaf:DataHandler能自動感知文件的類型 images/jpeg
		DataHandler dh = new DataHandler(new FileDataSource("d:/2.jpg"));
		part2.setDataHandler(dh);
		part2.setContentID("mm");
		//描述各部分之間的關係MimeMultiPart
		MimeMultipart multi = new MimeMultipart();
		multi.addBodyPart(part1);
		multi.addBodyPart(part2);
		multi.setSubType("related");//描述關係
		//加到MimeMessage中
		message.setContent(multi);
		message.saveChanges();
		
		ts.send(message,message.getAllRecipients());
	}

}
相關文章
相關標籤/搜索