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目錄下