欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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中的fail-fast機(jī)制

    老生常談java中的fail-fast機(jī)制

    下面小編就為大家?guī)硪黄仙U刯ava中的fail-fast機(jī)制。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • java導(dǎo)出json格式文件的示例代碼

    java導(dǎo)出json格式文件的示例代碼

    本篇文章主要介紹了java導(dǎo)出json格式文件的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • Java基礎(chǔ)之文件和目錄操作

    Java基礎(chǔ)之文件和目錄操作

    這篇文章主要介紹了Java基礎(chǔ)之文件和目錄操作,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java基礎(chǔ)的小伙伴們有很好地幫助,需要的朋友可以參考下
    2021-05-05
  • Java中泛型的示例詳解

    Java中泛型的示例詳解

    泛型機(jī)制在項(xiàng)目中一直都在使用,不僅如此,很多源碼中都用到了泛型機(jī)制。本文將通過一些示例帶大家深入了解一下Java的泛型機(jī)制,需要的可以了解一下
    2022-10-10
  • Java中FilterInputStream和FilterOutputStream的用法詳解

    Java中FilterInputStream和FilterOutputStream的用法詳解

    這篇文章主要介紹了Java中FilterInputStream和FilterOutputStream的用法詳解,這兩個(gè)類分別用于封裝輸入和輸出流,需要的朋友可以參考下
    2016-06-06
  • Java線程池7個(gè)參數(shù)的詳細(xì)含義

    Java線程池7個(gè)參數(shù)的詳細(xì)含義

    java多線程開發(fā)時(shí),常常用到線程池技術(shù),這篇文章是對(duì)創(chuàng)建java線程池時(shí)的七個(gè)參數(shù)的詳細(xì)解釋,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 解決java web應(yīng)用線上系統(tǒng)偶發(fā)宕機(jī)的情況

    解決java web應(yīng)用線上系統(tǒng)偶發(fā)宕機(jī)的情況

    這篇文章主要介紹了解決java web應(yīng)用線上系統(tǒng)偶發(fā)宕機(jī)的情況,具有好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • springboot如何使用yml文件方式配置shardingsphere

    springboot如何使用yml文件方式配置shardingsphere

    這篇文章主要介紹了springboot如何使用yml文件方式配置shardingsphere問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java?List排序4種寫法整理

    Java?List排序4種寫法整理

    這篇文章主要給大家介紹了關(guān)于Java?List排序4種寫法整理的相關(guān)資料,在有的時(shí)候我們會(huì)需要對(duì)List進(jìn)行排序,在Java中如何實(shí)現(xiàn)呢,本文記錄一下Java中對(duì)List的幾種排序方式,需要的朋友可以參考下
    2023-08-08
  • Spring Data JPA+kkpager實(shí)現(xiàn)分頁功能實(shí)例

    Spring Data JPA+kkpager實(shí)現(xiàn)分頁功能實(shí)例

    本篇文章主要介紹了Spring Data JPA+kkpager實(shí)現(xiàn)分頁功能實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-06-06

最新評(píng)論