java發送郵件和帶附件郵件


 

 

java發送普通郵件

寫在前面

做網站項目時,有時需要實現發送郵件功能,比如用戶注冊后需要在郵箱里點擊驗證,或者像qq音樂等到期續費時會發送郵件。因此我們需要學習如何利用代碼來自動發送郵件。
本篇講的是javaweb項目里,用原生的技術實現郵件發送,需要手動導包。發送郵件有很多種方式,導的包也都不一樣,這里我不深究那么多,因為到了框架階段,我們可以利用框架更加方便的發送郵件,更簡單。所以在java原生發郵件這里,你會復制代碼會發送就行了,不需要了解太多。

 


 

 

咳咳,不要在意細節,接下來進入正題。其實網上有很多博客講發送郵件,有的講的很復雜。我自己整理一個,方便大家白嫖

白嫖部分

第一步,導包

需要自行下載這兩個包,並導入到項目中,當然,你會maven的話更方便,不會的話就老老實實去百度搜索這兩個jar包並下載。。。這倆jar包,我發到附件里了,下載地址:點擊下載

  • mail.jar
  • activation.jar

第二步,到你的郵箱里申請一個登錄口令

以163郵箱為例,登錄進去后,單擊如下菜單

 


 

 

 


 

然后就進入了這個界面,因為我已經有了一個口令了,所以我下面顯示的是新增授權碼。如果你還沒有口令,那你的界面應該長這個樣子

 

 


 

點擊重啟服務,就會彈出這個框,然后點擊確定。這個時候會彈出一個二維碼,讓你掃描,或者你用手機驗證碼也行,反正就是驗證一下,然后就生成驗證碼了。

 

 


 

 

得到之后,趕緊復制一下或者截圖,防止之后找不見。這個碼,一會通過代碼登錄郵箱的時候要用到。以前用代碼登錄的時候直接輸入用戶名密碼就行了,后來大概是嫌不安全吧,就必須用這個授權碼才能登錄。

第三步,把下面的代碼復制到你項目里

import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message.RecipientType;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailDemo {
	public static void main(String[] args) throws Exception {
		sendEmail();
	}
	
	public static void sendEmail() throws Exception {
		/* * 1. 得到session */
		Properties props = new Properties(); //創建配置對象
		props.setProperty("mail.host", "smtp.163.com"); // 配置郵箱服務,也就是郵箱地址,這里我用的163郵箱,所以地址就是smtp.163.com。你用哪個郵箱,你就百度搜一下它的服務地址,寫在這就行
		props.setProperty("mail.smtp.auth", "true"); //這里的true表示需要驗證才能登錄
		
		Authenticator auth = new Authenticator() {
			@Override
			protected PasswordAuthentication getPasswordAuthentication() {
				return new PasswordAuthentication("136******93@163.com", "HSRF*******NPCD");
			} // 這一步是創建認證對象,並配置上自己的用戶名和密碼。前者就寫自己郵箱的全稱,后者就是你剛才生成的那個口令
		};
		Session session = Session.getInstance(props, auth);// 這一步是把配置信息和認證信息傳給了郵箱服務,並拿到了連接對象
		
		/* * 2. 創建MimeMessage */
		MimeMessage msg = new MimeMessage(session);// 創建一封郵件
		msg.setFrom(new InternetAddress("136******93@163.com"));//設置發件人
		msg.setRecipients(RecipientType.TO, "62*****95@qq.com");//設置收件人,自己做測試,發件人用我的163郵箱,收件人用我的qq郵箱。。。RecipientType.TO表示發送給對方,RecipientType.CC表示抄送
		msg.setSubject("測試郵件");//設置郵件主題
		msg.setContent("哈哈哈哈", "text/html;charset=utf-8");//前者為郵件內容,想寫啥寫啥,后者為固定參數,不要改(設置了頁面格式和編碼)
		
		/* * 3. 發送 */
		Transport.send(msg);//調用方法完成發送
		System.out.println("發送完成");
	}
}

java發送帶附件的郵件

Properties props = new Properties();
props.setProperty("mail.host", "smtp.163.com");
props.setProperty("mail.smtp.auth", "true");
Authenticator auth = new Authenticator() {
	@Override
	protected PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication("130*****92@163.com", "ETLW******JKFA");
	}
};
Session session = Session.getInstance(props, auth);
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("130*****692@163.com"));
msg.setRecipients(RecipientType.TO, "62*****95@qq.com");
msg.setSubject("呵呵");

//上面的代碼都一樣

MimeMultipart list = new MimeMultipart();//創建內容列表

MimeBodyPart part1 = new MimeBodyPart();//創建內容對象
part1.setContent("文字內容", "text/html;charset=utf-8");//添加文本內容
list.addBodyPart(part1);//把上面有文本內容的部分添加到列表

MimeBodyPart part2 = new MimeBodyPart();//創建內容對象2
part2.attachFile(new File("d://image/aaa.png"));//要添加文件的絕對路徑
list.addBodyPart(part2);//把這一部分添加到列表中

msg.setContent(list);//設置郵件內容,內容就是剛才創建的列表

Transport.send(msg);

帶附件的發送,除了添加內容部分不一樣,其余都一樣。添加內容部分的思路是這樣的,首先創建內容列表,然后創建內容對象,可通過內容對象去設置文字內容或者附件,內容對象可以有多個,把這多個內容對象放進內容列表,最后還是通過郵件對象本身去設置內容,這個內容就是剛才的那個列表。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM