java實(shí)現(xiàn)賬號(hào)登錄時(shí)發(fā)送郵件通知
1、引言
今天在逛Spring官網(wǎng)的時(shí)候,不經(jīng)意間在SpringBoot2.5.9的特性中看到了發(fā)送郵件的功能。
上面的第二張圖片就是發(fā)送郵件的相關(guān)說明文檔的頁(yè)面截圖,在這個(gè)部分開頭就說了:
Spring框架提供了一個(gè)發(fā)送郵件的接口JavaMailSender,并且提供了提供了其自動(dòng)配置和starter模塊,聽著像是有一個(gè)專門的starter提供這個(gè)功能。
為了驗(yàn)證自己的猜測(cè),回到第一張圖的頁(yè)面,在依賴版本頁(yè)面通過Ctrl+F搜索一下是不是有名字帶mail的依賴。
通過mail關(guān)鍵字搜索到了14個(gè)匹配項(xiàng),最后果然找到了名為spring-boot-starter-mail的依賴
2、實(shí)現(xiàn)功能
接下來,就通過Springboot項(xiàng)目引入這個(gè)依賴,來實(shí)現(xiàn)經(jīng)常會(huì)用到的賬號(hào)登錄的郵箱提醒功能。
第一步:創(chuàng)建一個(gè)springboot項(xiàng)目,項(xiàng)目名為email
第二步:修改pom.xml,添加spring-boot-starter-mail的依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.4.RELEASE</version> <relativePath/> </parent> <groupId>com.example</groupId> <artifactId>email</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>1.8</java.version> <lombok.version>1.18.22</lombok.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!--lombok--> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>${lombok.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
第三步:根據(jù)官網(wǎng)提供的代碼進(jìn)行改進(jìn)
回到Springboot2.5.9特性的頁(yè)面,點(diǎn)擊reference documentation查看郵件的具體說明
點(diǎn)擊了上面的鏈接進(jìn)入了這個(gè)頁(yè)面,上面一大堆文字不用管,那個(gè)Liberary dependencies可以不用看,那個(gè)依賴加不加都不影響發(fā)送郵件。
在剛剛創(chuàng)建的項(xiàng)目的根目錄下創(chuàng)建controller包,新建一個(gè)LoginController類
package com.example.email.controller; import com.example.email.config.EmailProperties; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; /** * @author heyunlin * @version 1.0 */ @RestController public class LoginController { private final JavaMailSender mailSender; @Autowired public LoginController(JavaMailSender mailSender) { this.mailSender = mailSender; } @GetMapping("/login") public String login(String username, String password) { // 定義日期格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss"); try { if (password.equals("12345")) { MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message); helper.setFrom("xxx@163.com"); // 設(shè)置發(fā)送方的郵箱,這個(gè)郵箱要和配置文件里設(shè)置的username一致,否則會(huì)報(bào)錯(cuò) helper.setTo(""); // 設(shè)置接收方郵箱,發(fā)送方和接收方可以是同一個(gè)郵箱。 helper.setText("您的賬號(hào)" + username + " " + LocalDateTime.now().format(formatter) + "在廣州登錄了。"); mailSender.send(message); return "登錄成功"; } else { return "登錄失敗,密碼不正確。"; } } catch (MessagingException exception) { exception.printStackTrace(); return "登錄失敗," + exception.getMessage(); } } }
然后在applicatiom.yml中配置
server: port: 8081 spring: mail: port: 25 host: smtp.163.com # 發(fā)送郵件的服務(wù)器地址 default-encoding: UTF-8 username: xxx@163.com # 你的郵箱 password: xxx # 這個(gè)是授權(quán)碼,不是郵箱的密碼,下面會(huì)介紹怎么去獲取
注意,這里的password需要登錄自己的郵箱,通過修改郵箱設(shè)置來獲取,會(huì)在下一個(gè)章節(jié)介紹。
這篇文章用的是網(wǎng)易郵箱,其他郵箱類似。這里配置的host是發(fā)送郵件的服務(wù)器地址,百度一下,這個(gè)pop是接收郵件的服務(wù)器,smtp是發(fā)送郵件的服務(wù)器。
3、獲取授權(quán)碼
如上圖所示,登錄郵箱之后,點(diǎn)擊【設(shè)置】跳轉(zhuǎn)到郵箱設(shè)置頁(yè)面。
開啟這兩個(gè)服務(wù)中的一個(gè)就可以了,因?yàn)橹恍枰冒l(fā)送郵件的功能,也就是是SMTP服務(wù)。
點(diǎn)擊開啟按鈕
接著點(diǎn)繼續(xù)開啟
使用微信掃描二維碼,會(huì)自動(dòng)打開發(fā)送短信的窗口,點(diǎn)發(fā)送就可以了,非常方便
發(fā)送短信之后,點(diǎn)擊我已發(fā)送,這時(shí)候會(huì)得到一個(gè)授權(quán)碼,因?yàn)椴┲饕呀?jīng)開啟過了,授權(quán)碼只會(huì)顯示一次,這次沒有顯示了。
4、測(cè)試發(fā)送郵件的功能
通過瀏覽器發(fā)送get請(qǐng)求,請(qǐng)求成功得到了響應(yīng)
郵箱也成功收到了郵件
以上就是java實(shí)現(xiàn)賬號(hào)登錄時(shí)發(fā)送郵件通知的詳細(xì)內(nèi)容,更多關(guān)于java郵件通知的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例
這篇文章主要介紹了java Arrays快速打印數(shù)組的數(shù)據(jù)元素列表案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09SpringBoot Actuator未授權(quán)訪問漏洞的排查和解決方法
Spring Boot Actuator 是開發(fā)和管理生產(chǎn)級(jí) Spring Boot 應(yīng)用程序的重要工具,它可以幫助你確保應(yīng)用程序的穩(wěn)定性和性能,本文給大家介紹了SpringBoot Actuator未授權(quán)訪問漏洞的排查和解決方法,需要的朋友可以參考下2024-05-05解決springboot自定義注解AOP在controller上導(dǎo)致controller注入失敗問題
這篇文章主要介紹了解決springboot自定義注解AOP在controller上導(dǎo)致controller注入失敗問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10使用ClassFinal實(shí)現(xiàn)SpringBoot項(xiàng)目jar包加密的操作指南
在實(shí)際開發(fā)中,保護(hù)項(xiàng)目的安全性和保密性是至關(guān)重要的,針對(duì)于 Spring Boot 項(xiàng)目,我們需要將 JAR 包進(jìn)行加密從而有效地防止未經(jīng)授權(quán)的訪問和修改,本文將介紹如何使用ClassFinal在 Spring Boot 項(xiàng)目中實(shí)現(xiàn) JAR 包加密,需要的朋友可以參考下2024-06-06Java實(shí)現(xiàn)的上傳并壓縮圖片功能【可等比例壓縮或原尺寸壓縮】
這篇文章主要介紹了Java實(shí)現(xiàn)的上傳并壓縮圖片功能,可實(shí)現(xiàn)圖片的等比例壓縮或原尺寸壓縮,涉及java文件讀寫、轉(zhuǎn)換、傳輸?shù)认嚓P(guān)操作技巧,需要的朋友可以參考下2018-07-07