Springboot發(fā)送郵件功能的實(shí)現(xiàn)詳解
前言
大多數(shù)小伙伴在練習(xí)與學(xué)習(xí)的過程中在驗(yàn)證時(shí)大都使用或驗(yàn)證碼,但是驗(yàn)證碼相對(duì)而言自己的參與只停留在自己的自己寫的點(diǎn)擊刷新方法上,那有沒有什么方法能讓我們的互動(dòng)不止限于網(wǎng)頁呢,那就來學(xué)一下如何給自己發(fā)送一封郵件吧,這個(gè)功能我預(yù)想是跟用戶綁定的所以設(shè)計(jì)時(shí)會(huì)與用戶有一定的聯(lián)系。
成果展示

表設(shè)計(jì)
這里只是為了讓我們成功發(fā)送郵件所以并不用設(shè)計(jì)的多么復(fù)雜,只需要在用戶表中添加兩個(gè)字段username ,email_address 實(shí)體類中是String 表中是varchar.
引入依賴
<!-- 郵件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>2.3.4.RELEASE</version>
</dependency>
</dependencies>郵箱工具類
/**
* 描述 工具 檢驗(yàn)地址是否合法
*/
public class EmailUtil {
public static boolean isValidEmailAddress(String email) throws AddressException {
boolean result = true;
InternetAddress internetAddress = new InternetAddress(email);
try {
internetAddress.validate();
} catch (AddressException e) {
e.printStackTrace();
result = false;
}
return result;
}
}這里并不需要自己去寫校驗(yàn)方法,直接調(diào)用InternetAddress 的validate方法就行。
mapper
用來通過郵箱查詢用戶,看是否已被占用
User selectOneByEmailAddress(String emailAddress);
Xml
<select id="selectOneByEmailAddress" parameterType="java.lang.String" resultMap="BaseResultMap">
select
<include refid="Base_Column_List"/>
from xatu_mall_user
where email_address = #{email_address,jdbcType=VARCHAR}
limit 1
</select>Service
userService
boolean checkEmailRegistered(String emailAddress);
impl
@Override
public boolean checkEmailRegistered(String emailAddress) {
User user = userMapper.selectOneByEmailAddress(emailAddress);
if (user != null) {
return false;
}
return true;
}EmailService
public interface EmailService {
void sendSimpleMessage(String to, String subject, String text);
}Impl
/**
* 描述: EmailService實(shí)現(xiàn)類
*/
@Service
public class EmailServiceImpl implements EmailService {
@Autowired
private JavaMailSender mailSender;
@Override
public void sendSimpleMessage(String to, String subject, String text) {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(Constant.EMAIL_FROM);
simpleMailMessage.setTo(to);
simpleMailMessage.setSubject(subject);
simpleMailMessage.setText(text);
mailSender.send(simpleMailMessage);
}
}我把常用值寫在Constant里了,這里直接填用來發(fā)送的郵箱就行,要確保能自己能登陸這個(gè)郵箱,后面要去獲取一個(gè)碼。
Controller
@PostMapping("/sendEmail")
@ResponseBody
public ApiRestResponse sendEmail(@RequestParam("emailAddress") String emailAddress)
throws XatuMallException, AddressException {
//檢查郵件地址是否有效,檢查是否已注冊(cè)
boolean validEmailAddress = EmailUtil.isValidEmailAddress(emailAddress);
if(validEmailAddress) {
boolean emailPased = userService.checkEmailRegistered(emailAddress);
if (!emailPased) {
return ApiRestResponse.error(100018, "郵箱已注冊(cè)");
} else{
//發(fā)送郵件
emailService.sendSimpleMessage(emailAddress,"主題是測(cè)試","Helllo this is a E-mail");
return ApiRestResponse.success();
}
}else{
return ApiRestResponse.error(100020,"非法郵箱");
}
}寫完后要去進(jìn)行配置
application.properties
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=1228625399@qq.com
spring.mail.password=*****************
spring.mail.default-encoding=utf-8
spring.mail.properties.mail.smtp.auth=true
這里我使用的是qq郵箱,但是聽說他這個(gè)垃圾郵件判定等級(jí)自己不好改有的是用阿里云郵箱
只用注意兩個(gè)點(diǎn) username 寫自己的郵箱地址
獲取授權(quán)碼
下一個(gè)password不是郵箱密碼哈,下面說怎么獲取這個(gè)授權(quán)碼

進(jìn)去登錄好了以后點(diǎn)擊賬戶,找到下面這個(gè)區(qū)域

注意我們打開前兩個(gè) 然后掃碼獲取那個(gè)授權(quán)碼,把它復(fù)制下來添加到配置文件的password欄。
總結(jié)
這個(gè)技術(shù)是很簡(jiǎn)單的,但是用好它相比于普通的在網(wǎng)頁上加驗(yàn)證碼我們先聲明一個(gè)數(shù)組,調(diào)用函數(shù)去把數(shù)組打亂去去每次獲取驗(yàn)證碼,把驗(yàn)證碼存起來作為text發(fā)送到用戶郵箱用來注冊(cè),這個(gè)方法相比點(diǎn)擊驗(yàn)證碼就更加有趣了。當(dāng)然也能用于其他更多的方面~


到此這篇關(guān)于Springboot發(fā)送郵件功能的實(shí)現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Springboot發(fā)送郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用SpringBoot發(fā)送郵件的方法詳解
- SpringBoot整合郵件發(fā)送的四種方法
- SpringBoot實(shí)現(xiàn)定時(shí)發(fā)送郵件的三種方法案例詳解
- SpringBoot實(shí)現(xiàn)發(fā)送QQ郵件的示例代碼
- SpringBoot?Mail郵件任務(wù)詳情
- SpringBoot?集成短信和郵件的配置示例詳解
- SpringBoot實(shí)現(xiàn)郵件發(fā)送的示例代碼
- SpringBoot實(shí)現(xiàn)發(fā)送郵件、發(fā)送微信公眾號(hào)推送功能
- Spring?Boot整合郵箱發(fā)送郵件實(shí)例
- SpringBoot實(shí)現(xiàn)發(fā)送電子郵件
- SpringBoot整合JavaMail實(shí)現(xiàn)發(fā)郵件的項(xiàng)目實(shí)踐
相關(guān)文章
java 將數(shù)據(jù)加載到內(nèi)存中的操作
這篇文章主要介紹了java 將數(shù)據(jù)加載到內(nèi)存中的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-09-09
java獲取文件的inode標(biāo)識(shí)符的方法
這篇文章主要介紹了java獲取文件的inode標(biāo)識(shí)符,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-04-04
SpringBoot整合Drools的實(shí)現(xiàn)步驟
Drools是一個(gè)易于訪問企業(yè)策略、易于調(diào)整以及易于管理的開源業(yè)務(wù)規(guī)則引擎,符合業(yè)內(nèi)標(biāo)準(zhǔn),速度快、效率高。業(yè)務(wù)分析師或?qū)徍巳藛T可以利用它輕松查看業(yè)務(wù)規(guī)則,從而檢驗(yàn)是否已編碼的規(guī)則執(zhí)行所需的業(yè)務(wù)規(guī)則。本文將講述SpringBoot整合Drools的步驟2021-05-05
10個(gè)Java解決內(nèi)存溢出OOM的方法詳解
在Java開發(fā)過程中,有效的內(nèi)存管理是保證應(yīng)用程序穩(wěn)定性和性能的關(guān)鍵,不正確的內(nèi)存使用可能導(dǎo)致內(nèi)存泄露甚至是致命的OutOfMemoryError(OOM),下面我們就來學(xué)習(xí)一下有哪些解決辦法吧2024-01-01
在eclipse導(dǎo)入Java的jar包的方法JDBC(圖文說明)
這篇文章主要介紹了在eclipse導(dǎo)入Java 的jar包的方法 JDBC 圖文說明 ,需要的朋友可以參考下2015-09-09
一文徹底弄懂零拷貝原理以及java實(shí)現(xiàn)
零拷貝(英語: Zero-copy) 技術(shù)是指計(jì)算機(jī)執(zhí)行操作時(shí),CPU不需要先將數(shù)據(jù)從某處內(nèi)存復(fù)制到另一個(gè)特定區(qū)域,下面這篇文章主要給大家介紹了關(guān)于零拷貝原理以及java實(shí)現(xiàn)的相關(guān)資料,需要的朋友可以參考下2021-08-08
java基于ConcurrentHashMap設(shè)計(jì)細(xì)粒度實(shí)現(xiàn)代碼
這篇文章主要介紹了java基于ConcurrentHashMap設(shè)計(jì)細(xì)粒度實(shí)現(xiàn)代碼,通過ConcurrentHashMap實(shí)現(xiàn)細(xì)粒度,具有一定參考價(jià)值,需要的朋友可以了解。2017-10-10

