Javamail配置阿里云郵箱發(fā)送郵件

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

成都創(chuàng)新互聯(lián)公司專注于水磨溝網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供水磨溝營銷型網(wǎng)站建設(shè),水磨溝網(wǎng)站制作、水磨溝網(wǎng)頁設(shè)計、水磨溝網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)服務(wù),打造水磨溝網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供水磨溝網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

什么是POP3、SMTP?

1、什么是POP3:

POP3是Post Office Protocol3的簡稱,即郵局協(xié)議的第3個版本,它規(guī)定怎樣將個人計算機(jī)連接到Internet的郵件服務(wù)器和下載電子郵件的電子協(xié)議。它是因特網(wǎng)電子郵件的第一個離線協(xié)議標(biāo)準(zhǔn),POP3允許用戶從服務(wù)器上把郵件存儲到本地主機(jī)(即自己的計算機(jī))上,同時刪除保存在郵件服務(wù)器上的郵件,而POP3服務(wù)器則是遵循 POP3協(xié)議的接收郵件服務(wù)器,用來接收電子郵件的。

2、什么是SMTP:

SMTP 的全稱是“Simple MailTransfer Protocol”,即簡單郵件傳輸協(xié)議。它是一組用于從源地址到目的地址傳輸郵件的規(guī)范,通過它來控制郵件的中轉(zhuǎn)方式。SMTP 協(xié)議屬于 TCP/IP 協(xié)議簇,它幫助每臺計算機(jī)在發(fā)送或中轉(zhuǎn)信件時找到下一個目的地。SMTP 服務(wù)器就是遵循 SMTP 協(xié)議的發(fā)送郵件服務(wù)器。

(SMTP 認(rèn)證,簡單地說就是要求必須在提供了賬戶名和密碼之后才可以登錄 SMTP 服務(wù)器,這就使得那些垃圾郵件的散播者無可乘之機(jī)。增加 SMTP 認(rèn)證的目的是為了使用戶避免受到垃圾郵件的侵?jǐn)_。)

代碼實現(xiàn)流程:

1,引入的包:

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

2,郵箱信息在Properties中的相關(guān)配置:

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

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

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

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

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

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


這里應(yīng)該注意一下。

3,郵箱實體類(設(shè)置郵箱、郵件的相關(guān)信息)


public class EmailInfo { private final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; private String smtpServer; // SMTP服務(wù)器地址 private String port; // 端口 private String fromUserName; // 登錄SMTP服務(wù)器的用戶名,發(fā)送人郵箱地址 private String fromUserPassword; // 登錄SMTP服務(wù)器的密碼 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,發(fā)送郵件的實現(xiàn)類(工具類):

public class EmailUtil { /** * 進(jìn)行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 { // 發(fā)件人 Address address = new InternetAddress(emailInfo.getFromUserName()); message.setFrom(address); // 收件人 Address toAddress = new InternetAddress(emailInfo.getToUser()); message.setRecipient(MimeMessage.RecipientType.TO, toAddress); // 設(shè)置收件人,并設(shè)置其接收類型為TO // 主題message.setSubject(changeEncode(emailInfo.getSubject())); message.setSubject(emailInfo.getSubject()); // 時間 message.setSentDate(new Date()); Multipart multipart = new MimeMultipart(); // 創(chuàng)建一個包含HTML內(nèi)容的MimeBodyPart BodyPart html = new MimeBodyPart(); // 設(shè)置HTML內(nèi)容 html.setContent(emailInfo.getContent(), "text/html; charset=utf-8"); multipart.addBodyPart(html); // 將MiniMultipart對象設(shè)置為郵件內(nèi)容 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("amuxia@163.com", Global.getConfig("email_user_add_subject"), "<p>這是一個測試郵件</p>"); util.sendHtmlMail(info); }
這下就妥妥的了,這些代碼運行沒有問題,但是用到了其他的一些輔助類,如Global.getConfig()獲取配置文件中的信息,用時替換掉就行。

應(yīng)用中配置使用郵箱接收發(fā)送郵件,經(jīng)常會因為各個郵箱配置的細(xì)微差異出現(xiàn)錯誤,多半是認(rèn)證不通過,而認(rèn)證不通過的原因無非是:

1、服務(wù)器錯誤

2、用戶名錯誤

3、用戶名密碼不匹配。

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

這里順便說一下怎么在outlook客戶端添加阿里云郵箱。

1,點擊文件——》添加賬戶

2,選擇配置方式

3,填寫賬戶信息:

4,點擊“其他設(shè)置”

最后就完成了配置,發(fā)送一封郵件測試一下就妥妥的了。

標(biāo)題名稱:Javamail配置阿里云郵箱發(fā)送郵件
標(biāo)題網(wǎng)址:http://www.muchs.cn/article4/cjpooe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、網(wǎng)站設(shè)計、商城網(wǎng)站全網(wǎng)營銷推廣、營銷型網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)