最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

談?wù)勗贘ava發(fā)送郵件中遇到的的問題

 更新時(shí)間:2016年08月22日 09:33:02   投稿:daisy  
本文介紹了在利用Java發(fā)送郵件過程中遇到的的兩個(gè)問題,以及如何解決這兩個(gè)問題。如果大家也遇到了這些問題,可以來參考借鑒。

前言

發(fā)送郵件的代碼是我從以前的一個(gè)應(yīng)用上直接拷貝過來的。以前使用的騰訊的郵件服務(wù),程序執(zhí)行起來沒有任何問題。后來修改為微軟office365郵件服務(wù)后,卻遇到了兩個(gè)問題。

問題一,tls加密設(shè)置

異常信息如下:

Exception in thread "main" com.sun.mail.smtp.SMTPSendFailedException: 530 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM

這個(gè)解決起來比較容易。找了些資料,添加如下配置即可:

mail.smtp.starttls.enable = true

問題二,提示協(xié)議為null:

異常信息如下:

Exception in thread "main" javax.mail.NoSuchProviderException: Invalid protocol: null
 at javax.mail.Session.getProvider(Session.java:449)
 at javax.mail.Session.getTransport(Session.java:667)
 at javax.mail.Session.getTransport(Session.java:648)
 at javax.mail.Session.getTransport(Session.java:634)

這個(gè)問題是在將應(yīng)用部署到生產(chǎn)環(huán)境后才遇到的。經(jīng)檢查后發(fā)現(xiàn)調(diào)用的jar包不是我在maven中指定的版本。后來確認(rèn)是應(yīng)用使用的jar包和容器(就是jetty)使用的jar包沖突了。容器使用的jar版本較舊,不過默認(rèn)優(yōu)先加載容器的jar。這樣問題解決思路有兩個(gè):

依賴容器的jar重新寫代碼;

更新容器的jar。

第二個(gè)選擇多少有些危險(xiǎn),就采用第一個(gè)選項(xiàng)好了,只需要修改一行即可:

Transport transport = session.getTransport("smtp");

這個(gè)問題在javax.mail 1.4版本中會(huì)出現(xiàn)。之后較高的版本會(huì)默認(rèn)采用SMTP協(xié)議發(fā)送郵件。

修改后的程序:

package com.zhyea.zytools;

import java.util.Date;
import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class MailSender {

 private static final String MAIL_SMTP_HOST = "smtp.exmail.qq.com";
 private static final Integer MAIL_SMTP_PORT = 587;
 private static final Boolean MAIL_SMTP_AUTH = true;
 private static final String MAIL_SMTP_USER = "robin@zhyea.com";
 private static final String MAIL_SMTP_PASSWORD = "robinzhyea";

 private static Properties props = new Properties();

 static {
  props.put("mail.smtp.host", MAIL_SMTP_HOST);
  props.put("mail.smtp.auth", MAIL_SMTP_AUTH);
  props.put("mail.smtp.user", MAIL_SMTP_USER);
  props.put("mail.smtp.password", MAIL_SMTP_PASSWORD);
  props.put("mail.smtp.starttls.enable", true);
 }


 /**
  * 發(fā)送郵件
  */
 public static void send(String to, String title, String content) {
  try {
   Session session = Session.getInstance(props);//創(chuàng)建郵件會(huì)話
   MimeMessage message = new MimeMessage(session);//由郵件會(huì)話新建一個(gè)消息對(duì)象

   message.setFrom(new InternetAddress(MAIL_SMTP_PASSWORD));//設(shè)置發(fā)件人的地址
   message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//設(shè)置收件人,并設(shè)置其接收類型為TO
   //設(shè)置信件內(nèi)容
   //message.setText(mailContent); //發(fā)送 純文本 郵件 TODO
   message.setSubject(title);//設(shè)置標(biāo)題
   message.setContent(content, "text/html;charset=gbk"); //發(fā)送HTML郵件,內(nèi)容樣式比較豐富
   message.setSentDate(new Date());//設(shè)置發(fā)信時(shí)間
   message.saveChanges();//存儲(chǔ)郵件信息

   //發(fā)送郵件
   Transport transport = session.getTransport("smtp");
   transport.connect(MAIL_SMTP_USER, MAIL_SMTP_PASSWORD);
   transport.sendMessage(message, message.getAllRecipients());//發(fā)送郵件,其中第二個(gè)參數(shù)是所有已設(shè)好的收件人地址
   transport.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
}
package com.zhyea.zytools;
 
import java.util.Date;
import java.util.Properties;
 
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
public class MailSender {
 
 private static final String MAIL_SMTP_HOST = "smtp.exmail.qq.com";
 private static final Integer MAIL_SMTP_PORT = 587;
 private static final Boolean MAIL_SMTP_AUTH = true;
 private static final String MAIL_SMTP_USER = "robin@zhyea.com";
 private static final String MAIL_SMTP_PASSWORD = "robinzhyea";
 
 private static Properties props = new Properties();
 
 static {
  props.put("mail.smtp.host", MAIL_SMTP_HOST);
  props.put("mail.smtp.auth", MAIL_SMTP_AUTH);
  props.put("mail.smtp.user", MAIL_SMTP_USER);
  props.put("mail.smtp.password", MAIL_SMTP_PASSWORD);
  props.put("mail.smtp.starttls.enable", true);
 }
 
 
 /**
  * 發(fā)送郵件
  */
 public static void send(String to, String title, String content) {
  try {
   Session session = Session.getInstance(props);//創(chuàng)建郵件會(huì)話
   MimeMessage message = new MimeMessage(session);//由郵件會(huì)話新建一個(gè)消息對(duì)象
 
   message.setFrom(new InternetAddress(MAIL_SMTP_PASSWORD));//設(shè)置發(fā)件人的地址
   message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));//設(shè)置收件人,并設(shè)置其接收類型為TO
   //設(shè)置信件內(nèi)容
   //message.setText(mailContent); //發(fā)送 純文本 郵件 TODO
   message.setSubject(title);//設(shè)置標(biāo)題
   message.setContent(content, "text/html;charset=gbk"); //發(fā)送HTML郵件,內(nèi)容樣式比較豐富
   message.setSentDate(new Date());//設(shè)置發(fā)信時(shí)間
   message.saveChanges();//存儲(chǔ)郵件信息
 
   //發(fā)送郵件
   Transport transport = session.getTransport("smtp");
   transport.connect(MAIL_SMTP_USER, MAIL_SMTP_PASSWORD);
   transport.sendMessage(message, message.getAllRecipients());//發(fā)送郵件,其中第二個(gè)參數(shù)是所有已設(shè)好的收件人地址
   transport.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
}

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)工作能有所幫助。

相關(guān)文章

  • Java 將一個(gè)字符重復(fù)n遍過程詳解

    Java 將一個(gè)字符重復(fù)n遍過程詳解

    這篇文章主要介紹了Java 將一個(gè)字符重復(fù)n遍過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot配置文件切換的全面指南

    SpringBoot配置文件切換的全面指南

    在SpringBoot應(yīng)用開發(fā)中,我們常常需要在不同的環(huán)境(如開發(fā)環(huán)境、測(cè)試環(huán)境、生產(chǎn)環(huán)境)中使用不同的配置,SpringBoot提供了強(qiáng)大且靈活的配置文件切換機(jī)制,使得我們能夠輕松應(yīng)對(duì)這種需求,本文將詳細(xì)介紹SpringBoot配置文件切換的相關(guān)知識(shí)與實(shí)踐,需要的朋友可以參考下
    2025-03-03
  • mybatis-plus 判斷isnull or的操作

    mybatis-plus 判斷isnull or的操作

    這篇文章主要介紹了mybatis-plus 判斷isnull or的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Springboot的自動(dòng)配置是什么及注意事項(xiàng)

    Springboot的自動(dòng)配置是什么及注意事項(xiàng)

    SpringBoot的自動(dòng)配置(Auto-configuration)是指框架根據(jù)項(xiàng)目的依賴和應(yīng)用程序的環(huán)境自動(dòng)配置Spring應(yīng)用上下文中的Bean和組件,目的是簡化開發(fā)者的配置工作,本文介紹Springboot的自動(dòng)配置是什么及注意事項(xiàng),感興趣的朋友一起看看吧
    2025-03-03
  • Springboot整合Redis的詳細(xì)教程分享

    Springboot整合Redis的詳細(xì)教程分享

    這篇文章主要為大家詳細(xì)介紹了如何利用SpringBoot整合Redis,文中的示例代碼講解詳細(xì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助
    2022-08-08
  • mybatis-plus?插入修改配置默認(rèn)值的實(shí)現(xiàn)方式

    mybatis-plus?插入修改配置默認(rèn)值的實(shí)現(xiàn)方式

    這篇文章主要介紹了mybatis-plus?插入修改配置默認(rèn)值的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • 解決SpringBoot掃描不到公共類的實(shí)體問題

    解決SpringBoot掃描不到公共類的實(shí)體問題

    這篇文章主要介紹了解決SpringBoot掃描不到公共類的實(shí)體問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java環(huán)境變量配置和adb的配置教程詳解

    java環(huán)境變量配置和adb的配置教程詳解

    這篇文章主要介紹了java環(huán)境變量配置和adb的配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Java?Spring的核心與設(shè)計(jì)思想你知道嗎

    Java?Spring的核心與設(shè)計(jì)思想你知道嗎

    這篇文章主要為大家詳細(xì)介紹了Java?Spring的核心與設(shè)計(jì)思想,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 深入理解Java原生的序列化機(jī)制

    深入理解Java原生的序列化機(jī)制

    Java 提供了一種對(duì)象序列化的機(jī)制,該機(jī)制中,一個(gè)對(duì)象可以被表示為一個(gè)字節(jié)序列,該字節(jié)序列包括該對(duì)象的數(shù)據(jù)、有關(guān)對(duì)象的類型的信息和存儲(chǔ)在對(duì)象中數(shù)據(jù)的類型。下面小編和大家來一起學(xué)習(xí)一下吧
    2019-06-06

最新評(píng)論

青神县| 柳江县| 永春县| 韶关市| 平罗县| 阿拉善左旗| 柳林县| 闸北区| 洞头县| 卢氏县| 冕宁县| 南漳县| 扶余县| 金秀| 文水县| 集贤县| 荃湾区| 宾阳县| 南安市| 科技| 靖西县| 重庆市| 井研县| 平阳县| 嘉黎县| 乐业县| 门源| 竹溪县| 正定县| 陆丰市| 玛纳斯县| 隆化县| 望江县| 彝良县| 普兰店市| 周口市| 金坛市| 泰安市| 营山县| 祥云县| 西乌珠穆沁旗|