springBoot發(fā)送郵件(驗證碼,5分鐘過期)超級詳細(xì),供大家參考,具體內(nèi)容如下
創(chuàng)新互聯(lián)公司是一家專業(yè)提供閬中企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站建設(shè)、網(wǎng)站制作、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為閬中眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
自己百度了很久,終于成功了,這里記錄一下過程
1.選擇郵箱(這里選用163郵箱)
首先在網(wǎng)頁登錄在設(shè)置里面打開POP3/SMTP服務(wù)

在application.yaml中配置

要注意的就是這里的password是授權(quán)碼而不是密碼!!!如果使用qq郵箱把host改為smtp.qq.com
2.關(guān)于驗證碼的工具類
private static final String SYMBOLS = "0123456789";
/**
* Math.random生成的是一般隨機數(shù),采用的是類似于統(tǒng)計學(xué)的隨機數(shù)生成規(guī)則,其輸出結(jié)果很容易預(yù)測,因此可能導(dǎo)致被攻擊者擊中。
* 而SecureRandom是真隨機數(shù),采用的是類似于密碼學(xué)的隨機數(shù)生成規(guī)則,其輸出結(jié)果較難預(yù)測,若想要預(yù)防被攻擊者攻擊,最好做到使攻擊者根本無法,或不可能鑒別生成的隨機值和真正的隨機值。
*/
private static final Random RANDOM = new SecureRandom();
public static String generateVerCode() {
char[] nonceChars = new char[6];
for (int i = 0; i < nonceChars.length; i++) {
nonceChars[i] = SYMBOLS.charAt(RANDOM.nextInt(nonceChars.length));
}
return new String(nonceChars);
}
/**
*計算兩個日期的分鐘差
*/
public static int getMinute(Date fromDate, Date toDate) {
return (int) (toDate.getTime() - fromDate.getTime()) / (60 * 1000);3.services模塊
/** * 發(fā)送驗證碼到指定郵箱 * @param sender 發(fā)送地址 * @param mailSender spring自帶 * @param receiver 接受地址 */ AdvanceResponse getCode(String sender,JavaMailSenderImpl mailSender,String receiver); /** * 注冊用戶 */ AdvanceResponse addUser(User user,String verCode);
AdvanceResponse是自己封裝的返回對象,可以無視
/**
* 驗證碼
*/
private String code;
/**
* 發(fā)送時間
*/
private Date sendTime;
@Override
@Async
public AdvanceResponse getCode(String sender, JavaMailSenderImpl mailSender, String receiver) {
SimpleMailMessage message = new SimpleMailMessage();
message.setSubject("驗證碼");//設(shè)置郵件標(biāo)題
code = VerCodeGenerateUtil.generateVerCode();
sendTime = new Date();
message.setText("尊敬的用戶,您好:\n"
+ "\n本次請求的郵件驗證碼為:" + code + ",本驗證碼5分鐘內(nèi)有效,請及時輸入。(請勿泄露此驗證碼)\n"
+ "\n如非本人操作,請忽略該郵件。\n(這是一封自動發(fā)送的郵件,請不要直接回復(fù))"); //設(shè)置郵件正文
message.setFrom(sender);//發(fā)件人
message.setTo(receiver);//收件人
mailSender.send(message);//發(fā)送郵件
return AdvanceResponse.successResponse();
}
@Override
public AdvanceResponse addUser(User user, String verCode) {
Date date = new Date();
//判斷驗證碼
if (VerCodeGenerateUtil.getMinute(sendTime, date) > 5) {
return AdvanceResponse.failedResponse("驗證碼已經(jīng)失效!!!");
}
if (!verCode.equals(code)) {
return AdvanceResponse.failedResponse("驗證碼不正確!!!");
}
user.setRole(0);
user.setCreateTime(date);
user.setUpdateTime(date);
userDao.insert(user);
code = null;
return AdvanceResponse.successResponse();
}@Async表示異步,可以在郵件未發(fā)送完成時就返回,而不必等待太長時間,必須在總配置類上加@EnableAsync注解才可以生效
4.controller模塊
@Autowired
private UserService userService;
@Autowired
private JavaMailSenderImpl mailSender;
@Value("${spring.mail.username}")
private String sender;
/**
* 發(fā)送驗證碼到指定郵箱
*/
@GetMapping("/verCode")
public AdvanceResponse verCode(String receiver) {
return userService.getCode(sender, mailSender, receiver);
}
/**
* 注冊用戶
*/
@PostMapping("/addUser")
public AdvanceResponse addUser(User user, String sender, JavaMailSenderImpl mailSender, @RequestParam("verCode") String verCode) {
return userService.addUser(user,verCode);
}基本上后端就完成了,在來看看前端
5.前端界面
<div class="layui-form-item">
<label for="email" class="layui-form-label">
<span class="x-red">*</span>郵箱
</label>
<div class="layui-input-inline">
<input type="email" id="email" name="email" required="" lay-verify="email"
autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">
<span class="x-red" id="emailMsg"></span>
</div>
<button type="button" class="layui-btn" id="code">獲取驗證碼</button>
</div>
<div class="layui-form-item">
<label for="verCode" class="layui-form-label">
<span class="x-red">*</span>驗證碼
</label>
<div class="layui-input-inline">
<input type="text" id="verCode" name="verCode" required=""
autocomplete="off" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">
<span class="x-red" id="verCodeMsg"></span>
</div>
</div>前端使用了layui,只關(guān)注input表單即可
接下來是js代碼
//獲取驗證碼
$('#code').click(function () {
const email = $('#email').val();
const myReg = /^[a-zA-Z0-9_-]+@([a-zA-Z0-9]+\.)+(com|cn|net|org)$/;
if (email === null || email.length === 0) {
layer.msg('郵箱不能為空!', {time: 1500, icon: 5, shift: 6});
return false;
}
if (!myReg.test(email)) {
layer.msg('郵箱格式不正確!', {time: 1500, icon: 5, shift: 6});
return false;
}
$.ajax({
type: 'GET',
url: 'user/verCode',
data: {
'receiver': email
},
beforeSend: function () {
loading = layer.msg('處理中', {icon: 16})
},
success: function () {
layer.close(loading);
}
})
});
//這是提交表單,只保留關(guān)鍵部分
$.ajax({
type: 'POST',
url: 'user/addUser',
data: formData,
cache: false, // 不緩存
processData: false, // jQuery不要去處理發(fā)送的數(shù)據(jù)
contentType: false, // jQuery不要去設(shè)置Content-Type請求頭
beforeSend: function () {
loading = layer.msg('處理中', {icon: 16})
},
success: function (result) {
if (result.status === 0) {
layer.msg(result.msg, {time: 1500, icon: 5, shift: 6});
} else {
layer.close(loading);
xadmin.close();
}
}
})基本上全部完成!
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。
新聞標(biāo)題:SpringBoot發(fā)送郵件功能驗證碼5分鐘過期
轉(zhuǎn)載注明:http://chinadenli.net/article8/iigjip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站營銷、網(wǎng)站排名、定制開發(fā)、Google、搜索引擎優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)