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

SpringBoot實(shí)現(xiàn)郵件發(fā)送功能的姿勢(shì)分享

 更新時(shí)間:2021年08月04日 09:40:14   作者:一灰灰  
我們?cè)谌粘i_發(fā)中,經(jīng)常會(huì)碰到email郵件發(fā)送的場(chǎng)景,如發(fā)送驗(yàn)證碼,向客戶發(fā)送郵件等等,這篇文章主要給大家介紹了關(guān)于SpringBoot實(shí)現(xiàn)郵件發(fā)送的相關(guān)資料,需要的朋友可以參考下

前言

郵件發(fā)送,在實(shí)際的項(xiàng)目開發(fā)中,可能用的不是特別多,如果沒有特定的需求,相信也沒有多少小伙伴會(huì)特意的去關(guān)注,那么如果現(xiàn)在我們希望針對(duì)項(xiàng)目做一個(gè)異常的報(bào)警系統(tǒng),當(dāng)出現(xiàn)異常的時(shí)候,可以向指定的小伙伴發(fā)送郵件提醒,那么讓我們來實(shí)現(xiàn)這個(gè)功能,可以怎么辦呢?

這里介紹一下如何使用SpringBoot封裝好的MailSender來實(shí)現(xiàn)郵件發(fā)送

I. 項(xiàng)目環(huán)境

1. 項(xiàng)目依賴

本項(xiàng)目借助SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA進(jìn)行開發(fā)

開一個(gè)web服務(wù)用于測(cè)試

<dependencies>
    <!-- 郵件發(fā)送的核心依賴 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <!-- 適用于html模板形式的郵件發(fā)送,借助freemarker來實(shí)現(xiàn)html模板渲染 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
</dependencies>

2. 配置

在開始之前,我們需要先準(zhǔn)備一個(gè)用于發(fā)送郵件的賬號(hào),比如我這里使用163的郵箱來發(fā)送郵件,需要先到郵箱提供商哪里獲取授權(quán)碼,具體如何獲取這個(gè)東西,不同的郵箱姿勢(shì)有些不同,各位小伙伴根據(jù)自己的實(shí)際情況,搜索一下,相信很快就能get到

這里簡(jiǎn)單介紹下網(wǎng)易郵箱的獲取方式

接下來設(shè)置發(fā)送郵件相關(guān)的配置信息,配置文件application.yml

spring:
  #郵箱配置
  mail:
    host: smtp.163.com
    from: xhhuiblog@163.com
    # 使用自己的發(fā)送方用戶名 + 授權(quán)碼填充
    username:
    password:
    default-encoding: UTF-8
    properties:
      mail:
        smtp:
          auth: true
          starttls:
            enable: true
            required: true

II. 郵件發(fā)送

接下來進(jìn)入正題,我們將從簡(jiǎn)單基礎(chǔ)的文本郵件發(fā)送開始,逐漸介紹如何添加附件,使用漂亮的html模板等

1. 簡(jiǎn)單文本郵件發(fā)送

我們這里直接使用JavaMailSender來發(fā)送一個(gè)基礎(chǔ)的文本郵件

@Service
public class MailDemo {
    @Autowired
    private JavaMailSender javaMailSender;

    @Value("${spring.mail.from:xhhuiblog@163.com}")
    private String from;

    private void basicSend() {
        SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
        //郵件發(fā)送人
        simpleMailMessage.setFrom(from);
        //郵件接收人,可以是多個(gè),參數(shù)為可變參數(shù)
        simpleMailMessage.setTo("bangzewu@126.com");
        //郵件主題,也就是標(biāo)題
        simpleMailMessage.setSubject("SpringBoot測(cè)試郵件發(fā)送");
        //郵件內(nèi)容
        simpleMailMessage.setText("簡(jiǎn)單的郵件正文");

        javaMailSender.send(simpleMailMessage);
    }
}
  • JavaMailSender: 直接作為一個(gè)Spring 的bean對(duì)象使用
  • SimpleMailMessage:簡(jiǎn)單的郵件對(duì)象,里面有一些郵件發(fā)送時(shí),關(guān)聯(lián)的基礎(chǔ)信息
    • from: 發(fā)送方
    • replyTo: 郵件回復(fù)的收件人
    • to: 收件人
    • cc: 抄送
    • bcc: 密送
    • subject: 主題,也就是郵件標(biāo)題
    • text: 郵件正文,文本格式
    • date: 郵件發(fā)送時(shí)間

2. html發(fā)送

對(duì)于簡(jiǎn)單的文本郵件發(fā)送,用上面的基本就夠了,如果我們希望郵件的內(nèi)容更美觀一點(diǎn)的話,可以借助HTML來實(shí)現(xiàn)排版
區(qū)別于上面的SimpleMailMessage, 這里使用的是MimeMessage,來實(shí)現(xiàn)html內(nèi)容發(fā)送

使用姿勢(shì)與上面相比差不多,無非就是正文變成了html文本罷了

/**
 * 發(fā)送html
 */
public void sendHtml() throws MessagingException {
    MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
    mimeMessageHelper.setFrom(from);
    mimeMessageHelper.setTo("bangzewu@126.com");
    mimeMessageHelper.setSubject("SpringBoot測(cè)試郵件發(fā)送");

    //郵件內(nèi)容
    mimeMessageHelper.setText("<h1>Hello World</h1> <br/> " +
            "<div> 歡迎點(diǎn)擊 <a href=\"https://blog.hhui.top\">一灰灰博文地址</a><br/>" +
            " <img width=\"200px\" height=\"200px\" src=\"https://blog.hhui.top/hexblog/imgs/info/wx.jpg\"/>" +
            "</div>", true);

    javaMailSender.send(mimeMailMessage);
}

重點(diǎn)注意

注意上面的setText方法的第二個(gè)參數(shù),必須有,且為true,否則會(huì)當(dāng)成文本內(nèi)容發(fā)送

3. 添加附件

郵件中添加附件,我們自己寫郵件的時(shí)候可以直接選擇附件上傳,那么代碼的實(shí)現(xiàn)方式又有什么區(qū)別呢?

/**
 * 發(fā)送附件
 */
public void sendWithFile() throws MessagingException, IOException {
    MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
    mimeMessageHelper.setFrom(from);
    mimeMessageHelper.setTo("bangzewu@126.com");
    mimeMessageHelper.setSubject("SpringBoot測(cè)試郵件發(fā)送");

    mimeMessageHelper.setText("<h1>Hello World</h1> <br/> " +
            "<div> 歡迎點(diǎn)擊 <a href=\"https://blog.hhui.top\">一灰灰博文地址</a><br/>" +
            " <img width=\"200px\" height=\"200px\" src=\"https://blog.hhui.top/hexblog/imgs/info/wx.jpg\"/>" +
            "</div>");

    String url = "https://blog.hhui.top/hexblog/imgs/info/wx.jpg";
    URL imgUrl = new URL(url);
    mimeMessageHelper.addAttachment("img.jpg", imgUrl::openStream);

    javaMailSender.send(mimeMailMessage);
}

注意上面的實(shí)現(xiàn),與前面差別不大,關(guān)鍵點(diǎn)在于attachment附件,上面的實(shí)現(xiàn)是在附件中添加一個(gè)圖片,為了簡(jiǎn)單起見,圖片是直接從網(wǎng)絡(luò)下載的,然后將Stream作為傳參

4. Freemaker模板

上面的html發(fā)送,會(huì)發(fā)現(xiàn)需要我們自己來組裝html正文,這個(gè)操作可能就不是很美好了,借助頁(yè)面渲染引擎來實(shí)現(xiàn)郵件模板支持,可以說是一個(gè)比較常見的方案了,這里簡(jiǎn)單介紹下Freemaker的實(shí)現(xiàn)姿勢(shì),至于themlaf, beef或者jsp啥的,都沒有太大的區(qū)別

首先寫一個(gè)郵件模板 resources/template/mail.ftl

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="SpringBoot thymeleaf"/>
    <meta name="author" content="YiHui"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <title>郵件模板</title>
</head>
<style>
    .title {
        color: #c00;
        font-weight: normal;
        font-size: 2em;
    }

    .content {
        color: darkblue;
        font-size: 1.2em;
    }

    .sign {
        color: lightgray;
        font-size: 0.8em;
        font-style: italic;
    }
</style>
<body>

<div>
    <div class="title">${title}</div>
    <div class="content">${content}</div>
</div>
</body>
</html>

上面的模板中,定義了兩個(gè)變量,一個(gè)title,一個(gè)content,這個(gè)就是我們需要替換的值

接下來是郵件發(fā)送實(shí)例

import freemarker.template.Configuration;

@Autowired
private Configuration configuration;

/**
 * freemarker 模板
 */
public void freeMakerTemplate() throws MessagingException, IOException, TemplateException {
    MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
    MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
    mimeMessageHelper.setFrom(from);
    mimeMessageHelper.setTo("bangzewu@126.com");
    mimeMessageHelper.setSubject("SpringBoot測(cè)試郵件發(fā)送");

    Map<String, Object> map = new HashMap<>();
    map.put("title", "郵件標(biāo)題");
    map.put("content", "郵件正文");
    String text = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate("mail.ftl"), map);
    mimeMessageHelper.setText(text, true);

    String url = "https://blog.hhui.top/hexblog/imgs/info/wx.jpg";
    URL imgUrl = new URL(url);
    mimeMessageHelper.addAttachment("img.jpg", imgUrl::openStream);

    javaMailSender.send(mimeMailMessage);
}

注意上面的實(shí)現(xiàn),關(guān)鍵點(diǎn)就利用FreeMarkerTemplateUtils來實(shí)現(xiàn)模板的渲染,輸出html正文,因此如果想使用其他的模板渲染引擎,就是改這里即可

5. 測(cè)試與小結(jié)

最后簡(jiǎn)單的調(diào)用一下上面的實(shí)現(xiàn),看下郵件是否可以發(fā)送成功

本篇博文介紹了一下如何發(fā)送郵件,并針對(duì)簡(jiǎn)單的文本郵件,html正文,附件等不同的給出了實(shí)例;整體看下來使用姿勢(shì)不難,不過郵件的幾個(gè)術(shù)語(yǔ)可以了解一下

  • to: 接收人,就是郵件發(fā)送的目標(biāo)群眾
  • cc: 抄送,一般來講抄送的名單,只是讓他感知到有這封郵件,屬于周知對(duì)象
  • bcc: 密送,與上面兩個(gè)不一樣,接收人和抄送人不知道密送給誰(shuí)了,這就是最大的區(qū)別,說實(shí)話這個(gè)玩意我從沒用過

接下來一篇博文,將介紹一下如何將log日志與郵件發(fā)送關(guān)聯(lián)起來,當(dāng)出現(xiàn)異常的時(shí)候,郵件發(fā)送給開發(fā)者

III. 不能錯(cuò)過的源碼和相關(guān)知識(shí)點(diǎn)

0. 項(xiàng)目

工程:github.com/liuyueyi/sp
源碼:github.com/liuyueyi/sp

總結(jié)

到此這篇關(guān)于SpringBoot實(shí)現(xiàn)郵件發(fā)送功能的文章就介紹到這了,更多相關(guān)SpringBoot郵件發(fā)送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java8新特性之新日期時(shí)間庫(kù)的使用教程

    Java8新特性之新日期時(shí)間庫(kù)的使用教程

    這篇文章主要給大家介紹了關(guān)于Java8新特性之新日期時(shí)間庫(kù)使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java非官方常用類MessageInfo消息接口示例

    java非官方常用類MessageInfo消息接口示例

    這篇文章主要為大家介紹了java非官方常用類MessageInfo消息接口使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Spring中的ImportSelector接口原理解析

    Spring中的ImportSelector接口原理解析

    這篇文章主要介紹了Spring中的ImportSelector接口原理解析,ImportSelector接口是spring中導(dǎo)入外部配置的核心接口,根據(jù)給定的條件(通常是一個(gè)或多個(gè)注釋屬性)判定要導(dǎo)入那個(gè)配置類,需要的朋友可以參考下
    2024-01-01
  • ElasticSearch查詢文檔基本操作實(shí)例

    ElasticSearch查詢文檔基本操作實(shí)例

    這篇文章主要為大家介紹了ElasticSearch查詢文檔基本操作實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 詳解JAVA 常量池

    詳解JAVA 常量池

    這篇文章主要介紹了JAVA 常量池的相關(guān)資料,文中講解非常詳細(xì),示例代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Netty分布式ByteBuf緩沖區(qū)分配器源碼解析

    Netty分布式ByteBuf緩沖區(qū)分配器源碼解析

    這篇文章主要為大家介紹了Netty分布式ByteBuf緩沖區(qū)分配器源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-03-03
  • MyEclipse10安裝Log4E插件

    MyEclipse10安裝Log4E插件

    這篇文章主要介紹了MyEclipse10安裝Log4E插件的相關(guān)資料,需要的朋友可以參考下
    2017-10-10
  • Java中的getClass()以及getName()方法使用

    Java中的getClass()以及getName()方法使用

    這篇文章主要介紹了Java中的getClass()以及getName()方法使用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器

    java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • java基于jdbc實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng)

    java基于jdbc實(shí)現(xiàn)簡(jiǎn)單學(xué)生管理系統(tǒng)

    本文主要主要介紹了java連接mysql數(shù)據(jù)庫(kù)的一個(gè)簡(jiǎn)單學(xué)生系統(tǒng),通過jdbc連接數(shù)據(jù)庫(kù)。文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評(píng)論

荃湾区| 宜兴市| 孝感市| 乌审旗| 宁蒗| 扎赉特旗| 鄯善县| 高陵县| 颍上县| 盐池县| 赫章县| 山东省| 镇原县| 濮阳县| 华蓥市| 晋宁县| 皋兰县| 灵丘县| 新疆| 龙海市| 射洪县| 北宁市| 图们市| 连云港市| 天全县| 富顺县| 巫山县| 孟津县| 长岭县| 读书| 松桃| 光山县| 浑源县| 兴山县| 泌阳县| 西吉县| 三门峡市| 福安市| 江达县| 石首市| 礼泉县|