1. 程式人生 > >Javamail配置阿里雲郵箱傳送郵件

Javamail配置阿里雲郵箱傳送郵件

前言:

前面已經介紹過使用163郵箱傳送郵件啟用賬號的例子了,本來想著應該千篇一律的,但是這裡使用阿里郵箱傳送郵件略有不同,更改配置之後總是報錯,所以這裡記錄一下,為以後再次搭建方便,同時如果遇到同樣問題的你看到這篇部落格解決了,那就更好了。

先了解一下基本的配置元素的概念:

什麼是POP3、SMTP?

1、什麼是POP3:

POP3是Post Office Protocol3的簡稱,即郵局協議的第3個版本,它規定怎樣將個人計算機連線到Internet的郵件伺服器和下載電子郵件的電子協議。它是因特網電子郵件的第一個離線協議標準,POP3允許使用者從伺服器上把郵件儲存到本地主機(即自己的計算機)上,同時刪除儲存在郵件伺服器上的郵件,而POP3伺服器則是遵循 POP3協議的接收郵件伺服器,用來接收電子郵件的。

2、什麼是SMTP:

SMTP 的全稱是“Simple MailTransfer Protocol”,即簡單郵件傳輸協議。它是一組用於從源地址到目的地址傳輸郵件的規範,通過它來控制郵件的中轉方式。SMTP 協議屬於 TCP/IP 協議簇,它幫助每臺計算機在傳送或中轉信件時找到下一個目的地。SMTP 伺服器就是遵循 SMTP 協議的傳送郵件伺服器。

(SMTP 認證,簡單地說就是要求必須在提供了賬戶名和密碼之後才可以登入 SMTP 伺服器,這就使得那些垃圾郵件的散播者無可乘之機。增加 SMTP 認證的目的是為了使使用者避免受到垃圾郵件的侵擾。)

程式碼實現流程:

1,引入的包:

<dependency>
	<groupId>javax.mail</groupId>
	<artifactId>mail</artifactId>
	<version>1.4.7</version>
</dependency>

2,郵箱資訊在Properties中的相關配置:

smtpServer=smtp.aliyun.com
port=465
fromUserName=你的阿里郵箱賬號
fromUserPassword=你的郵箱密碼

這裡注意了,很容易出錯,網上一搜基本的教程都是這樣的:smtpServer=smtp.aliyun.com

也就是properties.put("mail.smtp.host", smtp.aliyun.com);

但如果你使用的是阿里的企業郵箱,這樣把郵箱的配置伺服器地址照搬過來的做法是有問題的。

這裡應該使用自己企業的域名地址,比如我的域名是amuxia.com(當然這個也是假的,舉個例子,哈哈),這裡就應該配置smtp.amuxia.com。否則報錯:

javax.mail.AuthenticationFailedException:526Authentication failure[0]


這裡應該注意一下。

3,郵箱實體類(設定郵箱、郵件的相關資訊)

public class EmailInfo {
	private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
	private String smtpServer; 
// SMTP伺服器地址
	private String port; // 埠
	private String fromUserName; 
// 登入SMTP伺服器的使用者名稱,傳送人郵箱地址
	private String fromUserPassword; 
// 登入SMTP伺服器的密碼
	private String toUser;   // 收件人
	private String subject; // 郵件主題
	private String content; // 郵件正文
	public EmailInfo() {

	}
	public EmailInfo(String toUser, String subject, String content) {
		this.toUser = toUser;
		this.subject = subject;
		this.content = content;
		this.smtpServer = Global.getConfig("smtpServer");
		this.port = Global.getConfig("port");
		this.fromUserName = Global.getConfig("fromUserName");
		this.fromUserPassword = Global.getConfig("fromUserPassword");
	}
//get、set方法略
}

4,傳送郵件的實現類(工具類):

public class EmailUtil {
	/**
	 * 進行base64加密,防止中文亂碼
	 */
	private static String changeEncode(String str) {
		try {
			str = MimeUtility.encodeText(new String(str.getBytes(), "UTF-8"), "UTF-8", "B"); // "B"代表Base64
		} catch (UnsupportedEncodingException e) {
			e.printStackTrace();
		}
		return str;
	}

	public static boolean sendHtmlMail(EmailInfo emailInfo) {
		Properties properties = new Properties();
		properties.put("mail.smtp.host", emailInfo.getSmtpServer());
		properties.put("mail.transport.protocol", "smtp");
		properties.put("mail.smtp.auth", "true");
		properties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); // 使用JSSE的SSL
		properties.put("mail.smtp.socketFactory.fallback", "false"); // 只處理SSL的連線,對於非SSL的連線不做處理
		properties.put("mail.smtp.port", emailInfo.getPort());
		properties.put("mail.smtp.socketFactory.port",emailInfo.getPort());
		Session session = Session.getInstance(properties);
		session.setDebug(true);
		MimeMessage message = new MimeMessage(session);

		try {
			// 發件人
			Address address = new InternetAddress(emailInfo.getFromUserName());
			message.setFrom(address);
			// 收件人
			Address toAddress = new InternetAddress(emailInfo.getToUser());
			message.setRecipient(MimeMessage.RecipientType.TO, toAddress); // 設定收件人,並設定其接收型別為TO

			// 主題message.setSubject(changeEncode(emailInfo.getSubject()));
			message.setSubject(emailInfo.getSubject());
			// 時間
			message.setSentDate(new Date());

			Multipart multipart = new MimeMultipart();

			// 建立一個包含HTML內容的MimeBodyPart
			BodyPart html = new MimeBodyPart();
			// 設定HTML內容
			html.setContent(emailInfo.getContent(), "text/html; charset=utf-8");
			multipart.addBodyPart(html);
			// 將MiniMultipart物件設定為郵件內容
			message.setContent(multipart);
			message.saveChanges();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}

		try {
			Transport transport = session.getTransport("smtp");
			transport.connect(emailInfo.getSmtpServer(), emailInfo.getFromUserName(), emailInfo.getFromUserPassword());
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}

		return true;
	}
}

5,測試一下:
public static void main(String[] args) {
	 EmailUtil util = new EmailUtil();
		String content =Global.getConfig("email_user_add_content");
		content =  content.format(content, "111","222");
		System.out.println(content);
		EmailInfo info = new EmailInfo("[email protected]", Global.getConfig("email_user_add_subject"), "<p>這是一個測試郵件</p>");
		util.sendHtmlMail(info);
	}

這下就妥妥的了,這些程式碼執行沒有問題,但是用到了其他的一些輔助類,如Global.getConfig()獲取配置檔案中的資訊,用時替換掉就行。

應用中配置使用郵箱接收發送郵件,經常會因為各個郵箱配置的細微差異出現錯誤,多半是認證不通過,而認證不通過的原因無非是:

1、伺服器錯誤

2、使用者名稱錯誤

3、使用者名稱密碼不匹配。

遇到錯誤從這幾方面下手就可以了,在程式碼中使用郵箱傳送郵件時要先在客戶端試一次,確保郵箱在客戶端是可接可收的。

這裡順便說一下怎麼在outlook客戶端新增阿里雲郵箱。

1,點選檔案——》新增賬戶

2,選擇配置方式

3,填寫賬戶資訊:

4,點選“其他設定”

最後就完成了配置,傳送一封郵件測試一下就妥妥的了。

相關推薦

Javamail配置阿里郵箱傳送郵件

前言:前面已經介紹過使用163郵箱傳送郵件啟用賬號的例子了,本來想著應該千篇一律的,但是這裡使用阿里郵箱傳送郵件略有不同,更改配置之後總是報錯,所以這裡記錄一下,為以後再次搭建方便,同時如果遇到同樣問題的你看到這篇部落格解決了,那就更好了。先了解一下基本的配置元素的概念:什麼

使用阿里郵箱傳送郵件

程式碼部分 /** * 傳送郵件 (阿里雲郵箱企業版) * * @param fromEmail * 傳送郵箱 * @param toEmail * 接收郵箱 * @pa

Python用 smtplib在阿里伺服器傳送郵件(1ni)

差點被這個郵件搞哭了,坑真的太多了!!!1.要記得開啟163郵箱的服務具體方法 設定=》左下角的客戶端授權密碼(那時候就要開啟了,會讓你輸入密碼,這個密碼不能和登入的密碼相同程式碼裡也是這個客戶端密碼,不是登入密碼)2.你的IP可能被禁了!!!一開始試了很多的程式碼,都是報錯

阿里傳送郵件

手動安裝在解壓的檔案中可以找到 aliyun-java-sdk-dm-3.0.0-rc1.jar 和 aliyun-java-sdk-core-3.0.0.jar 包。以 Eclipse 匯入 JAR

Java 基於JavaMail實現向QQ郵箱傳送郵件

需求 最近專案在做新聞爬蟲,想實現這個功能:爬蟲某個頁面失敗後,把這個頁面的 url 發到筆者的郵箱。最終實現的效果圖如下,後期可以加上過濾標籤、失敗狀態碼等,方便分類搜尋異常。 開發人員可以根據郵件裡的 url 和堆疊資訊,分析爬蟲失敗的原因。 是

使用阿里伺服器傳送郵件

今天在線上配置資料庫服務,在本機測試的時候寫了一個當檢測到MySQL宕機的時候會發送一封郵件到指定的賬戶提醒,部署到阿里雲之後其他一切正常,就是郵件傳送不成功,折騰了我一天 原來是因為國家政策,為了防止瘋狂傳送垃圾郵件,阿里雲關閉了25埠(安全組無法開啟25埠),而我在本機

阿里伺服器傳送郵件(一)

一、設定mailx及sendmail軟體 sendmail 進行傳送郵件的應用服務; mailx採用指令mail進行傳送郵件的編輯,通過sendmail進行傳送; 1、 檢查服務狀況 service sendmail status 問題:沒有結果的話,則重新安裝

Ubuntu 16.04使用阿里郵箱命令列傳送郵件配置(完整親測版)

1.安裝mailutils和heirloom-mailx,如果非root使用者請使用sudo許可權apt-get install mailutils apt-get install heirloom-m

阿里Centos7中GitLab使用smtp 163郵箱傳送郵件的注意事宜

1.修改gitlab.rb配置項目錄:/etc/gitlab/gitlab.rb修改:gitlab_rails['smtp_enable'] = truegitlab_rails['smtp_address'] = "smtp.163.com"gitlab_rails['sm

阿里上的使用QQ郵箱傳送郵件

直接上程式碼了 由於阿里雲禁用了25埠所以替換成465埠並修改協議為ssl才能傳送郵件 參考我的另一篇部落格 http://blog.csdn.net/u013412790/article/details/54912506 public class Se

Centos7 下配置mail使用163郵箱傳送郵件

編輯/etc/mail.rc配置檔案 # shift + g 直接到最後一行編輯 sudo vim /etc/mail.rc # 在檔案末尾加入以下配置 set [email prot

Linux配置root登陸時傳送郵件到指定郵箱

出於安全考慮,需要監控部分敏感主機的root賬號訪問情況,於是實現root登入時傳送郵件到指定郵箱。 提前明確: 發件箱、發件箱授權碼、發件箱smtp地址、收件箱 第一步 申請郵箱授權碼 選擇騰訊企業郵箱,登入發件箱賬號後,繫結微信,啟用安全登入,選擇“客戶端專用

JAVAMAIL試用google郵箱傳送郵件

這裡的Demo簡單來,希望給第一次試用的你幫助。 . 1,試用網易郵箱傳送郵件: //網易 public static Session getNetEasySession() {

linux下通過配置mailx和第三方郵箱 傳送郵件

        使用mailx+postfix 通過伺服器傳送的郵件經常會被歸為垃圾郵件,甚至會被拒收,所以需要利用第三方郵箱賬戶作為發件人來發送郵件。部署系統為Centos7。確認postfix是否執行:systemctl status postfix如果沒有啟動需要先啟

javamail實現用普通QQ郵箱傳送郵件

本人最近在寫一個Android專案,使用者註冊的時候想用郵箱驗證的方式,於是就需要在伺服器端傳送電子郵件給新註冊使用者,郵件內容中包含一個 連結, 當用戶點選這個連結將 登入到伺服器 的驗證邏輯。本人在網上找了很多程式碼,可能由於是很久以前的了,各大郵箱的規範

java連線163郵箱傳送郵件

一:jar包:下載連結:連結: http://pan.baidu.com/s/1dDhIDLv 密碼: ibg5二:程式碼 1---------------------------------------------------------------------------------- packag

在CentOS 7 1804 中 安裝 Apache HTTP Server 並 配置 阿里 SSL

相關連結: 在CentOS 7 1804 中 安裝 Apache HTTP Server 並 配置 騰訊雲 SSL 在CentOS 1804 中的 Tomcat 9 設定 SSL( https ) 加密 (多域名加密,阿里雲 SSL+ 騰訊雲 SSL) 在CentOS 1804 中設定

阿里 azkaban 發郵件的坑

azkaban : 是一個 任務排程平臺 安裝文件:   https://azkaban.readthedocs.io/en/latest/getStarted.html   因為阿里雲是禁止掉是STMP 25埠 ,只能用smtps協議,也就是ssl  465

pip配置阿里

Windows: 開啟計算機,在位址列輸入%appdata%,回車,進入使用者資料夾,新建資料夾,命名為pip 在pip下新建pip.ini,輸入以下內容 [global] index-url = http://mirrors.aliyun.com/pypi/simple trus

springboot專案配置阿里ssl證書,http轉https

環境:springboot專案 版本:1.5.8.realse 證書型別: .pfx 伺服器:阿里雲centos主機 申請阿里雲ssl證書,免費和貴的都有(或者自己用工具生成的證書用法一致) 開放伺服器443埠 下載證書,將證書放到resource目錄下