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

Java實(shí)現(xiàn)郵件發(fā)送遇到的問題

 更新時(shí)間:2016年09月11日 15:36:53   投稿:hebedich  
本文給大家分享的是個(gè)人在項(xiàng)目過程中,使用Java實(shí)現(xiàn)郵件發(fā)送的時(shí)候所遇到的幾個(gè)問題以及解決方法,有需要的小伙伴可以參考下

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

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

異常信息如下:

復(fù)制代碼 代碼如下:

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è):

  1. 依賴容器的jar重新寫代碼;
  2. 更新容器的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();
    }
  }
  
}

相關(guān)文章

  • Java基于socket服務(wù)實(shí)現(xiàn)UDP協(xié)議的方法

    Java基于socket服務(wù)實(shí)現(xiàn)UDP協(xié)議的方法

    這篇文章主要介紹了Java基于socket服務(wù)實(shí)現(xiàn)UDP協(xié)議的方法,通過兩個(gè)簡單實(shí)例分析了java通過socket實(shí)現(xiàn)UDP發(fā)送與接收的技巧,需要的朋友可以參考下
    2015-05-05
  • 解決eclipse中console控制選項(xiàng)不見了的方法

    解決eclipse中console控制選項(xiàng)不見了的方法

    eclipse是一款用于編譯java語言的程序,利用這款軟件我們可以制作很多有趣的小程序,也可以制作一些大型的軟件項(xiàng)目,有的用戶在使用eclipse的時(shí)候會(huì)遇到console消失的情況,所以本文給大家介紹了解決eclipse中console控制選項(xiàng)不見了的方法,需要的朋友可以參考下
    2024-03-03
  • spring security登錄認(rèn)證授權(quán)的項(xiàng)目實(shí)踐

    spring security登錄認(rèn)證授權(quán)的項(xiàng)目實(shí)踐

    SpringSecurity主要實(shí)現(xiàn)了認(rèn)證(Authentication)和授權(quán)(AccessControl),本文就來介紹一下spring security登錄認(rèn)證授權(quán)的項(xiàng)目實(shí)踐,感興趣的可以了解一下
    2025-01-01
  • java內(nèi)部測(cè)試類代碼詳解

    java內(nèi)部測(cè)試類代碼詳解

    這篇文章主要介紹了java內(nèi)部測(cè)試類代碼詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • mybatis新手快速入門以及一些錯(cuò)誤匯總

    mybatis新手快速入門以及一些錯(cuò)誤匯總

    這篇文章主要給大家介紹了關(guān)于mybatis新手快速入門以及一些錯(cuò)誤的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java截取字符串的方法

    Java截取字符串的方法

    這篇文章主要介紹了Java截取字符串的方法,實(shí)例分析了java中substring方法的使用技巧,需要的朋友可以參考下
    2015-05-05
  • Java編寫的24點(diǎn)紙牌游戲

    Java編寫的24點(diǎn)紙牌游戲

    這篇文章主要介紹了Java編寫的24點(diǎn)紙牌游戲的相關(guān)資料,需要的朋友可以參考下
    2015-03-03
  • 使用@JsonFormat和@DateTimeFormat對(duì)Date格式化操作

    使用@JsonFormat和@DateTimeFormat對(duì)Date格式化操作

    這篇文章主要介紹了使用@JsonFormat和@DateTimeFormat對(duì)Date格式化操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 一文精通Java中的volatile關(guān)鍵字

    一文精通Java中的volatile關(guān)鍵字

    volatile是java中的關(guān)鍵詞之一,這篇文章主要給大家介紹了關(guān)于Java中volatile關(guān)鍵字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 一篇文章弄懂Java8中的時(shí)間處理

    一篇文章弄懂Java8中的時(shí)間處理

    Java8以前Java處理日期、日歷和時(shí)間的方式一直為社區(qū)所詬病,將 java.util.Date設(shè)定為可變類型,以及SimpleDateFormat的非線程安全使其應(yīng)用非常受限,下面這篇文章主要給大家介紹了關(guān)于Java8中時(shí)間處理的相關(guān)資料,需要的朋友可以參考下
    2022-01-01

最新評(píng)論

资中县| 安阳市| 繁昌县| 新建县| 崇文区| 新乐市| 长顺县| 泰兴市| 水富县| 洛宁县| 谢通门县| 洞口县| 安新县| 桃园市| 普宁市| 九台市| 铅山县| 砚山县| 天镇县| 田林县| 靖西县| 城固县| 榆社县| 平湖市| 巩义市| 北京市| 抚宁县| 枣强县| 新绛县| 商都县| 太仆寺旗| 马尔康县| 临洮县| 武山县| 新宾| 根河市| 卢湾区| 五指山市| 姚安县| 酒泉市| 岐山县|