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

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

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

前言

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

問(wèn)題一,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è)解決起來(lái)比較容易。找了些資料,添加如下配置即可:

mail.smtp.starttls.enable = true

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

依賴容器的jar重新寫(xiě)代碼;

更新容器的jar。

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

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

這個(gè)問(wèn)題在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è)置其接收類(lèi)型為T(mén)O
   //設(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è)置其接收類(lèi)型為T(mén)O
   //設(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();
  }
 }
 
}

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

相關(guān)文章

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

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

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

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

    在SpringBoot應(yīng)用開(kāi)發(fā)中,我們常常需要在不同的環(huán)境(如開(kāi)發(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ì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    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和組件,目的是簡(jiǎn)化開(kāi)發(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掃描不到公共類(lèi)的實(shí)體問(wèn)題

    解決SpringBoot掃描不到公共類(lèi)的實(shí)體問(wèn)題

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

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

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

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

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

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

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

最新評(píng)論

关岭| 大化| 泸水县| 哈巴河县| 阳春市| 南京市| 登封市| 崇左市| 万山特区| 丹阳市| 浮梁县| 新泰市| 阳谷县| 潢川县| 龙川县| 喀喇沁旗| 建湖县| 公主岭市| 偏关县| 手机| 改则县| 昭觉县| 宁远县| 大余县| 静乐县| 华宁县| 华安县| 神池县| 东安县| 陇南市| 邵阳县| 盐山县| 佛山市| 台中县| 内黄县| 安国市| 昭平县| 桦川县| 曲水县| 乐平市| 鹤壁市|