javamail使用總結

javamail使用總結

1、概述

    1.1 簡介

        javamail主要是經過STMP、POP協議和郵件服務器交換數據,從而達到發送、接受郵件的。javamail的核心由兩大類:一、發送:鏈接會話、服務器驗證、發送地址、郵件信息、發送類。二、接受:服務器鏈接、消息。html

    1.2 STMP和POP3

        a)STMP和POP3是網絡協議中應用層部分,和HTTP是同層。java

        b)SMTP 的全稱是「Simple Mail Transfer Protocol」,即簡單郵件傳輸協議。它是一組用於從源地址到目的地址傳輸郵件的規範,經過它來控制郵件的中轉方式。SMTP 協議屬於 TCP/IP 協議簇,它幫助每臺計算機在發送或中轉信件時找到下一個目的地。SMTP 服務器就是遵循 SMTP 協議的發送郵件服務器。SMTP 認證,簡單地說就是要求必須在提供了帳戶名和密碼以後才能夠登陸 SMTP 服務器,這就使得那些垃圾郵件的散播者無可乘之機。增長 SMTP 認證的目的是爲了使用戶避免受到垃圾郵件的侵擾服務器

        c)POP3,全名爲「Post Office Protocol - Version 3」,即「郵局協議版本3」。是TCP/IP協議族中的一員,由RFC1939 定義。本協議主要用於支持使用客戶端遠程管理在服務器上的電子郵件。提供了SSL加密的POP3協議被稱爲POP3S。POP 協議支持「離線」郵件處理。其具體過程是:郵件發送到服務器上,電子郵件客戶端調用郵件客戶機程序以鏈接服務器,並下載全部未閱讀的電子郵件。這種離線訪問模式是一種存儲轉發服務,將郵件從郵件服務器端送到我的終端機器上,通常是PC機或 MAC。一旦郵件發送到 PC 機或MAC上,郵件服務器上的郵件將會被刪除。但目前的POP3郵件服務器大均可以「只下載郵件,服務器端並不刪除」,也就是改進的POP3協議。網絡

    1.3 模塊

        a)通用類session

            javax.mail.Session:會話類是JavaMail API的主要類,它不建立子類。 Session 對象充當鏈接工廠的JavaMail API,它能夠同時處理配置設置和身份驗證。會話類是JavaMail API的主要類,它不建立子類。 Session 對象充當鏈接工廠的JavaMail API,它能夠同時處理配置設置和身份驗證。有點像socket,不管是發送仍是接受都須要這個類socket

            java.util.Properties:設置通訊協議、主機地址、端口、身份認證等.this

            javax.mail.Authenticator:郵件服務器分配的帳戶信息。是抽象了,須要繼承實現getPasswordAuthentication()得到PasswordAuthentication。加密

        a)發送相關類spa

            javax.mail.Address:發送地址(郵件服務器帳戶)、接受者地址。.net

            javax.mail.internet.MimeMessage:郵件內容、包括郵件的全部信息.

            javax.mail.Transport:發送器

        b)接受相關類

            javax.mail.Store:pop3對象,至關於郵箱。

            javax.mail.Folder:郵箱裏面的文件夾對象。

            javax.mail.Message:郵件。

2、實例

        2.1 發送

public void TestSend() throws Exception {
		// 一.郵件服務器網絡設置
		Properties props = new Properties();
		this.setPropertis(props);

		// 二.鏈接session
		Session session = Session.getInstance(props, new Authenticator() {
			// 三.因爲authenticator是抽象了
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("123@163.com", "123");
			}
		});

		// 4、地址:
		// 4.1.發送地址:這裏是郵件服務器地址
		// Address addressfrom = new InternetAddress("xxxx@163.com");
		// Address addressFrom=new InternetAddress("xxxx@qq.com","sender");//名字和郵件顯示在一塊兒
		Address addressFrom = new InternetAddress("xxxx@qq.com", MimeUtility.encodeText("發送者"));// 格式化中文信息
		// 4.2.接受者
		Address addressToOne = new InternetAddress("xxxx1@qq.com", MimeUtility.encodeText("發送者1"));
		Address[] addressToCopy = { new InternetAddress("xxxx2@qq.com", MimeUtility.encodeText("發送者2")),
				new InternetAddress("xxxx3@qq.com", MimeUtility.encodeText("發送者3")),
				new InternetAddress("xxxx4@qq.com", MimeUtility.encodeText("發送者4")) };

		// 5、消息:<郵件消息格式>
		Message message = new MimeMessage(session);// 建立消息
		// 5.1發送者
		message.setFrom(addressFrom);
		// 5.2 接受者
		/**
		 * @See 發送設置 Message.RecipientType.TO:收信人 Message.RecipientType.CC:抄送人
		 *      <複製一份> Message.RecipientType.BCC:暗發人<複製一份>
		 */
		message.setRecipient(Message.RecipientType.TO, addressToOne);
		// message.setRecipients(Message.RecipientType.CC, addressToCopy);//重複發送
		message.setSubject("你好啊");// 主題
		// 內容
		this.setMessageContent(message);
		// 發送:
		Transport.send(message);
	}

	/**
	 * @see 設置網絡信息
	 * @param props
	 */
	private void setPropertis(Properties props) {
		props.put("mail.stmp.host", "smtp.163.com");// 郵件地址
		props.put("mail.smtp.port", 25); // 郵件端口
		props.put("mail.stmp.auth", true);// 開啓認證(須要服務器帳戶密碼)
		props.put("mail.smtp.starttls.enable", true);// 開啓ssl認證
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");// 啓用ssl的socket服務
		props.put("mail.smtp.socketFactory.fallback", true);// 開啓回滾
		props.put("mail.stmp.timeout", 0);// 超時設置
	}

	public void setMessageContent(Message message) throws MessagingException {
		// 1.普通
		// message.setText("我是普通內容內容");

		// 2.帶html內容
		//message.setContent("<h1>我是html<h2>", "text/html");

		// 3.帶附件:若是帶附件、則正文和附件都降以 MimeBodyPart形式存在
		MimeMultipart mmt = new MimeMultipart();// 附件
		// 普通附件
		MimeBodyPart mbp1 = new MimeBodyPart();
		mbp1.setText("我是正文");
		mmt.addBodyPart(mbp1);
		
		// 文本附件<文件、圖片>
		MimeBodyPart mbp2 = new MimeBodyPart();
		String filename = "/home/manisha/file.txt";
		FileDataSource fds = new FileDataSource(filename);//附件的數據源
		mbp2.setDataHandler(new DataHandler(fds));//將附件添加到bodypart
		mbp2.setFileName(filename);//設置附件名稱
		
		mmt.addBodyPart(mbp2);//將附件內容添加到附件
		message.setContent(mmt);
	}

    2.2 接受者    

public void TestSend() throws Exception {
		// 一.郵件服務器網絡設置
		Properties props = new Properties();
		this.setPropertis(props);

		// 二.鏈接session
		Session session = Session.getInstance(props, new Authenticator() {
			// 三.因爲authenticator是抽象了
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("123@163.com", "123");
			}
		});

		//  4、 接受者
		Store store = session.getStore("pop3s");
		store.connect();//鏈接
		
		// 5、郵件消息文件夾
		Folder emailFolder = store.getFolder("INBOX");
		/**
		 * @see 文件夾的處理方式
		 * Folder.READ_ONLY:只讀
		 * Folder.READ_WRITE:讀寫
		 * Folder.HOLDS_FOLDERS:包涵其它的文件夾
		 * Folder.HOLDS_MESSAGES:包涵其它的郵件
		 */
		emailFolder.open(Folder.HOLDS_MESSAGES);

		// 6、郵件消息
		Message[] messages = emailFolder.getMessages();
		System.out.println("messages.length---" + messages.length);
		for (int i = 0, n = messages.length; i < n; i++) {
			Message message = messages[i];
			System.out.println("---------------------------------");
			System.out.println("Email Number " + (i + 1));
			System.out.println("Subject: " + message.getSubject());
			System.out.println("From: " + message.getFrom()[0]);
			System.out.println("Text: " + message.getContent().toString());
		}
		// 關閉文件夾
		emailFolder.close(false);
		//關閉鏈接
		store.close();
	}

	/**
	 * @see 設置網絡信息
	 * @param props
	 */
	private void setPropertis(Properties props) {
		props.put("mail.stmp.host", "smtp.163.com");// 郵件地址
		props.put("mail.smtp.port", 25); // 郵件端口
		props.put("mail.stmp.auth", true);// 開啓認證(須要服務器帳戶密碼)
		props.put("mail.smtp.starttls.enable", true);// 開啓ssl認證
		props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");// 啓用ssl的socket服務
		props.put("mail.smtp.socketFactory.fallback", true);// 開啓回滾
		props.put("mail.stmp.timeout", 0);// 超時設置
	}
相關文章
相關標籤/搜索