1. 程式人生 > >Java---發郵件

Java---發郵件

E-Mail協議簡介

  • 郵件伺服器,按照提供的服務型別,可以分為傳送郵件的伺服器我接收郵件的伺服器。
  • 傳送郵件的伺服器使用傳送協議,現在常用的是SMTP協議。所以,通常發郵件的伺服器也稱為SMTP伺服器。
  • 接收郵件的伺服器使用接收協議,現在常用的是POP3協議或IMAP協議,所以通常也被稱為POP3IMAP伺服器。
  • 目前經常見到的伺服器為SMTPPOP3伺服器。如大家在註冊了126的郵箱之後,它的發郵件伺服器為smtp.126.com:25,而收郵件伺服器則為pop3.126.com:110.(冒號後面的為埠號)
  • 當然,發郵件伺服器和收郵件伺服器也可能是同一臺主機,但埠號一定不相同。預設發郵件伺服器的埠為
    25,收郵件的埠為110.

郵件傳送的工作圖

Java程式發郵件

JavaMail-API簡介

  • 郵件客戶端的主要任務是向郵件伺服器傳送郵件,以及接收來自郵件伺服器的郵件。
  • Sun公司制定了一套API,它封裝了郵件通訊的各種協議。為Java開發者提供了收發電子郵件的公共介面。

技術入口:Javax.mail.Session

  • Session -用於設定伺服器,協議型別和密碼等

表示會話,是JavaMailApi的最高層入口類。Session對像從Properties中獲取資訊,如IP、協議、使用者名稱密碼等。

  • Javax.mail.Message類,它的一個重要子類為MimeMessage
    .

Message類表示電子郵件的正文部分。

一封電子郵件包含以下內容:

地址資訊、標題、日期、正文。

  • Java.mail.Address:收件人地址

表示郵件的地址。常用的子類為:javax.mail.internet.InternetAddress.

  • Javax.mail.Transport:負責傳送郵件

指定郵件傳送的協議。通常為SMTP.

它的靜態方法send(Message)負責傳送郵件。

準備

mail.jar,activation.jar.兩個jar包,找不到可以下載本例完整程式碼,專案中lib目錄中有。

程式碼演示

傳送純文字郵件

	@Test
	public void demo1() throws Exception {
		Properties p = new Properties();
		p.setProperty("mail.transport.protocol", "SMTP"); //設定郵件傳送協議
		p.setProperty("mail.smtp.host", "smtp.163.com"); //設定郵件伺服器
		p.setProperty("mail.smtp.port", "25"); //設定傳送郵件的埠號,預設 25
		p.setProperty("mail.smtp.auth", "true"); // 登入認證為true
		p.setProperty("mail.smtp.timeout","1000"); //設定超時時間
		//技術入口:
		Session mailSession = Session.getDefaultInstance(p, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				String username = "
[email protected]
"; //郵箱賬號 [email protected] String password = "xxx"; //密碼 return new PasswordAuthentication( username, password ); } }); mailSession.setDebug(true); //開啟debug模式 //////////////下面開始進行郵件資訊的封裝////////////// //1 建立郵件物件,並且設定 由 mailSession 使用者進行傳送郵件 Message message = new MimeMessage(mailSession); //2 設定郵件傳送者 message.setFrom( new InternetAddress("[email protected]") ); //3 設定郵件接收者 message.setRecipient( RecipientType.TO, new InternetAddress("[email protected]")); //4 設定郵件主題 message.setSubject("測試一下"); //5 設定郵件內容 message.setContent("Hello world! 你好!","text/html;charset=utf-8"); //傳送!!! Transport.send(message); }

傳送帶附件的郵件

	@Test
	public void demo2() throws Exception {
		Properties p = new Properties();
		p.setProperty("mail.transport.protocol", "SMTP"); //設定郵件傳送協議
		p.setProperty("mail.smtp.host", "smtp.163.com"); //設定郵件伺服器
		p.setProperty("mail.smtp.port", "25"); //設定傳送郵件的埠號,預設 25
		p.setProperty("mail.smtp.auth", "true"); // 登入認證為true
		p.setProperty("mail.smtp.timeout","1000"); //設定超時時間
		//技術入口:
		Session mailSession = Session.getDefaultInstance(p, new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				String username = "[email protected]"; //郵箱賬號 [email protected]
				String password = "xxx"; //密碼
				return new PasswordAuthentication( username, password );
			}
		});
		mailSession.setDebug(true); //開啟debug模式
		
		//////////////下面開始進行郵件資訊的封裝//////////////
		//1 建立郵件物件,並且設定 由 mailSession 使用者進行傳送郵件
		Message message = new MimeMessage(mailSession); 
		//2 設定郵件傳送者
		message.setFrom( new InternetAddress("[email protected]") );
		//3 設定郵件接收者
		message.setRecipient( RecipientType.TO, new InternetAddress("[email protected]"));
		//4 設定郵件主題
		message.setSubject("福利");
		///////////////////下面是開始變化的部分///////////////////////
//		//5 設定郵件內容
//		message.setContent("Hello world! 你好!","text/html;charset=utf-8");
		
		//第一部分
		MimeBodyPart bodyPart1 = new MimeBodyPart();
		bodyPart1.setContent("<h1>福利</h1>","text/html;charset=utf-8");
		
		//第二部分
		MimeBodyPart bodyPart2 = new MimeBodyPart();
		bodyPart2.setDataHandler( new DataHandler( new FileDataSource("./imgs/1.jpg" ) ) );
		bodyPart2.setFileName(MimeUtility.encodeText("美女1.gif"));
		
		//第三部分
		MimeBodyPart bodyPart3 = new MimeBodyPart();
		bodyPart3.setDataHandler( new DataHandler( new FileDataSource("./imgs/2.jpg" ) ) );
		bodyPart3.setFileName(MimeUtility.encodeText("美女2.gif"));
		
		//按順序加入到  Multipart 中  
		Multipart mp = new MimeMultipart();
		mp.addBodyPart(bodyPart1);
		mp.addBodyPart(bodyPart2);
		mp.addBodyPart(bodyPart3);
		
		//把mp設定為 message 的內容
		message.setContent(mp); //技術入口
		
		/////////////////////////////////////////////////////
		//傳送!!!
		Transport.send(message);
	}