Springboot郵件發送配置

Springboot郵件發送配置

pom.xml依賴:

<dependency><groupId>org.eclipse.angus</groupId><artifactId>jakarta.mail</artifactId><version>2.0.3</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

yml:

email:user: 發送郵箱地址code: 郵箱授權碼(QQ、網易郵箱等的授權碼可百度獲取)host: smtp.126.com或smtp.qq.com,不同郵箱配置不同auth: true

pojo/EmailProperties.java:

package com.ztr.springmail.pojo;import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "email")
public class EmailProperties {//發件人郵箱public String user ;//發件人郵箱授權碼public String code ;//發件人郵箱對應的服務器域名,如果是163郵箱:smtp.163.com   qq郵箱: smtp.qq.compublic String host ;//身份驗證開關private boolean auth ;public String getHost() {return host;}public void setHost(String host) {this.host = host;}public boolean isAuth() {return auth;}public void setAuth(boolean auth) {this.auth = auth;}public String getUser() {return user;}public void setUser(String user) {this.user = user;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}@Overridepublic String toString() {return "EmailProperties{" +"host='" + host + '\'' +", auth=" + auth +", user='" + user + '\'' +", code='" + code + '\'' +'}';}
}

utils/MailUtil.java:

package com.ztr.springmail.utils;import com.ztr.springmail.pojo.EmailProperties;
import jakarta.mail.*;
import jakarta.mail.internet.InternetAddress;
import jakarta.mail.internet.MimeMessage;import java.util.Properties;public class MailUtil {/*** 發送郵件* @param emailProperties 發件人信息(發件人郵箱,發件人授權碼)及郵件服務器信息(郵件服務器域名,身份驗證開關)* @param to 收件人郵箱* @param title 郵件標題* @param content 郵件正文* @return*/public static boolean sendMail(EmailProperties emailProperties, String to, String title, String content){MimeMessage message = null;try {Properties properties = new Properties();properties.put("mail.smtp.host", emailProperties.getHost());properties.put("mail.smtp.auth",emailProperties.isAuth());properties.put("mail.user", emailProperties.getUser());properties.put("mail.password", emailProperties.getCode());// 構建授權信息,用于進行SMTP進行身份驗證Authenticator authenticator = new Authenticator() {@Overrideprotected PasswordAuthentication getPasswordAuthentication() {return new PasswordAuthentication(emailProperties.getUser(), emailProperties.getCode());}};// 使用環境屬性和授權信息,創建郵件會話Session mailSession = Session.getInstance(properties, authenticator);// 創建郵件消息message = new MimeMessage(mailSession);}catch (Exception e){e.printStackTrace();}//如果郵件創建失敗,直接返回if (message==null){return false;}try {// 設置發件人InternetAddress form = new InternetAddress(emailProperties.getUser());message.setFrom(form);// 設置收件人InternetAddress toAddress = new InternetAddress(to);message.setRecipient(Message.RecipientType.TO, toAddress);// 設置郵件標題message.setSubject(title);// 設置郵件的內容體message.setContent(content, "text/html;charset=UTF-8");// 發送郵件Transport.send(message);}catch (Exception e){e.printStackTrace();}return true;}
}

service/EmailService.java:

package com.ztr.springmail.service;public interface EmailService {boolean send(String to,String title,String content);}

service/EmailServiceImpl.java:

package com.ztr.springmail.service.impl;import com.ztr.springmail.pojo.EmailProperties;
import com.ztr.springmail.service.EmailService;
import com.ztr.springmail.utils.MailUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class EmailServiceImpl  implements EmailService {//注入email配置信息實體類@Autowiredprivate EmailProperties emailProperties;/*** @param to 收件人郵箱* @param title 郵件標題* @param content 郵件正文* @return*/@Overridepublic boolean send(String to, String title, String content) {//打印email配置信息System.out.println(emailProperties);//發送郵件boolean flag = MailUtil.sendMail(emailProperties,to, title, content);return flag;}
}

controller/EmailController.java:

package com.ztr.springmail.controller;import com.ztr.springmail.service.EmailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class EmailController {//注入email配置信息實體類@Autowiredprivate EmailService emailService;//測試方法@RequestMapping("/send")public Boolean send(){//收件人信箱String to = "Michealzou@126.com";//郵件標題String title = "測試郵件";//郵件正文String content  = "郵件發送成功。。。";//發送郵件boolean flag = emailService.send(to,title,content);return flag;}}

啟程程序,發送請求:localhost:8080/send

image-20240529114554694

查看郵箱,收到測試郵件。

image-20240529143125933

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19452.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19452.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19452.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

跨域的解決方案

1. 計算機更改跨域 1.C盤->Windows->System32->drivers->etc 2.修改hosts 文件2. Chrome瀏覽器的跨域設置 操作步驟&#xff1a;1.打開我的電腦——C盤 新建一個文件夾&#xff0c;命名為MyChromeDevUserData2.右鍵——Chrome——快捷方式——目標&#xff0c;在…

ChatGPT成知名度最高生成式AI產品,使用頻率卻不高

5月29日&#xff0c;牛津大學、路透社新聞研究所聯合發布了一份生成式AI&#xff08;AIGC&#xff09;調查報告。 在今年3月28日—4月30日對美國、英國、法國、日本、丹麥和阿根廷的大約12,217人進行了調查&#xff0c;深度調研他們對生成式AI產品的應用情況。 結果顯示&…

ElementUI之el-table標題列中顯示el-tooltip

ElementUI之el-table標題列中顯示el-tooltip 文章目錄 ElementUI之el-table標題列中顯示el-tooltip1. el-table標題列中顯示el-tooltip2. 實現代碼3. 展示效果 1. el-table標題列中顯示el-tooltip 在el-table-column標簽內添加具名插槽v-slot:header 在el-tooltip標簽中使用具…

【幾何】輸入0-360度任意的角度,求上面直線與橢圓相切點的坐標計算公式

?輸入0-360度任意的角度,求上面直線與橢圓相切點的坐標計算公式 使用積分計算 使用到的公式有橢圓公式: x 2 a 2 + y 2 b 2 = 1 \frac{x^2}{a^2}+\frac{y^2}{b^2} = 1 a2x2?+b2y2?=1 平面旋轉公式 X r = cos ? θ ? ( X s ? X O ) ? sin ? θ ? ( Y s ? Y O ) + X …

端午節粽子龍舟主題互動趣味小游戲效果是什么

端午三天樂&#xff0c;無論節日當天還是之前&#xff0c;行業商家都可以自己的品牌為主借勢營銷&#xff0c;趣味活動形式玩法和內容呈現達成多種效果&#xff0c;品牌傳播、公眾號漲粉、線下互動、商品促銷、用戶促活等。 在【雨科】平臺擁有多款端午節互動小游戲類型&#…

網易狼人殺 設置點擊自動發言

我們玩網易狼人殺 剛開始 都會發現 要按住麥克風才能發言 不得不說 相當的麻煩 我們可以點擊如下圖 右上角這個設置的齒輪 新彈出的設置面板上 勾選這個點擊發言 然后 我們只需要 點一下 就可以進入發言狀態 然后 再點一下即可停止發言 會方便非常多

zabbix事件告警監控:如何實現對相同部件觸發器告警及恢復的強關聯

有一定Zabbix使用經驗的小伙伴可能會發現&#xff0c;接收告警事件時&#xff0c;其中可能包含著大量不同的部件名&#xff0c;同一部件的事件在邏輯上具有很強關聯性&#xff0c;理論上應保持一致的告警/恢復狀態&#xff0c;但Zabbix默認并未對它們進行關聯&#xff0c;直接后…

AIGC降重:如何2分鐘降低論文AI率和查重率?推薦使用SpeedAI科研小助手

確保學術論文的獨立性與誠信性&#xff0c;對于學業的成就及學位的獲取至關重要&#xff0c;其中&#xff0c;論文的人工智能查重與降低AIGC相似度扮演著核心角色。 常規的查重手段主要圍繞查重軟件的運用和個體的自行審查&#xff1b;而降重則通常通過語句重組、同義替換、內…

單細胞分析(Signac): PBMC scATAC-seq 基因組區域可視化

引言 在本教學指南中&#xff0c;我們將探討由10x Genomics公司提供的人類外周血單核細胞&#xff08;PBMCs&#xff09;的單細胞ATAC-seq數據集。 加載包 首先加載 Signac、Seurat 和我們將用于分析人類數據的其他一些包。 if (!requireNamespace("EnsDb.Hsapiens.v75&qu…

ModuleNotFoundError: No module named ‘osgeo‘

顯示無osgeo模塊 pip install osgeo顯示失敗 方法&#xff1a; 確保你已經安裝了正確的依賴項&#xff0c;例如GDAL、GEOS和PROJ等。 方法1&#xff1a;pip install gdal 失敗 方法2&#xff1a;官網下載失敗&#xff0c;下載地址&#xff1a;https://www.lfd.uci.edu/~gohl…

在Linux系統中,使用OpenSSL生成私有證書文件,并提取私鑰的步驟如下:

在Linux系統中&#xff0c;使用OpenSSL生成私有證書文件&#xff0c;并提取私鑰的步驟如下&#xff1a; 生成私鑰&#xff08;如果還沒有私鑰的話&#xff09;&#xff1a; openssl genpkey -algorithm RSA -out private.pem -pkeyopt rsa_keygen_bits:2048 生成自簽名證書&…

設置自動刷新數據透視表的數據源

數據透視表數據源的自動刷新 一般情況操作&#xff1a; 自動刷新操作&#xff1a; 1、定義名稱名稱 引用位置&#xff1a;OFFSET(Sheet1!$A$1,0,0,COUNTA(Sheet1!$A:$A),COUNTA(Sheet1!$1:$1)) 2、數據透視表的數據源更改為【源數據】—— 即前面定義的名稱 3、數據——全部…

Java多線程——觀測線程狀態

線程可以處于以下幾個狀態&#xff1a; NEW&#xff1a;尚未啟動的線程處于此狀態&#xff1b; RUNNABLE&#xff1a;在Java虛擬機中執行的線程處于此狀態&#xff1b; BLOCKED&#xff1a;被阻塞等待監視器鎖定的線程處于此狀態&#xff1b; WAITING&#xff1a;正在等待…

區塊鏈技術和應用二

前言 學習長安鏈的一些基本原理 官網&#xff1a;長安鏈開源文檔 b站課程&#xff1a;區塊鏈基礎與應用 一、共識算法 1.1 POW工作量證明 最長鏈共識&#xff0c;沒聽明白 1.2 51%攻擊 二、區塊鏈的發展 2.1 區塊鏈1.0到3.0 2.2 共有鏈、聯盟鏈、私有鏈 2.3 發展趨勢 2.4 擴…

CUDA_VISIBLE_DEVICES‘ 不是內部或外部命令,也不是可運行的程序或批處理文件。

問題&#xff1a; 命令行出現CUDA_VISIBLE_DEVICES0 python trainer.py這種命令 這是Linux可以的&#xff0c;但是Windows不行。 解決方案&#xff1a; 這條命令的含義是指定某個GPU來運行程序&#xff0c;我們可以在程序開頭添加指定GPU的代碼&#xff0c;效果是一樣的&…

HackTheBox-Machines--Lazy

Lazy測試過程 1 信息收集 1.端口掃描 發現 SSH&#xff08;22&#xff09;、HTTP&#xff08;80&#xff09;端口 nmap -sC -sV 10.129.159.512.訪問 80 端口 1.頁面中存在注冊功能&#xff0c;測試注冊功能 頁面返回登錄頁面及用戶名 使用burpsuite觀察注冊請求 /register.p…

Facebook:連接世界,暢游社交之旅

作為全球最大的社交平臺之一&#xff0c;Facebook不僅僅是一個網站&#xff0c;更是一個連接世界的橋梁&#xff0c;讓人們可以輕松地與全球各地的朋友、家人和同事保持聯系&#xff0c;分享生活、交流想法&#xff0c;暢游社交的無邊界之旅。本文將帶領讀者探索Facebook的魅力…

電子商務網站(網上商店PetShop)

PetShop是一個范例&#xff0c;微軟用它來展示.Net企業系統開發的能力。PetShop隨著版本的不斷更新&#xff0c;至現在基于.Net2.0的PetShop 4.0為止&#xff0c;整個設計逐漸變得成熟而優雅&#xff0c;有很多可以借鑒之處。PetShop是一個小型的項目&#xff0c;系統架構與代碼…

鴻蒙OS開發:【一次開發,多端部署】(分欄控件)

一多分欄控件 介紹 本示例分別展示了多場景下&#xff0c;一多分欄控件的響應式變化效果。 本示例分別用到了[SideBarContainer]組件與[Navigation]組件&#xff0c;對應使用場景如下&#xff1a; ABC&#xff1a;即SideBarContainer組件組合Navigation組件AC&#xff1a;S…

Python開發 —— 文件讀寫操作open與with open

在 Python 中&#xff0c;文件讀寫操作是非常常見的任務。本文是一些關鍵操作和代碼示例&#xff0c;包括如何使用 open、with open、read 和 write 函數進行文件操作。 1. 打開文件 (open) 使用 open 函數打開文件。在 Python 中&#xff0c;打開文件是進行文件操作的第一步。…