郵箱和手機號驗證碼的發送

一、郵箱驗證碼

1、隨機生成驗證碼工具類

/*** 隨機生成驗證碼工具類*/
public class ValidateCodeUtils {/*** 隨機生成驗證碼* @param length 長度為4位或者6位* @return*/public static Integer generateValidateCode(int length){Integer code =null;if(length == 4){code = new Random().nextInt(9999);//生成隨機數,最大為9999if(code < 1000){code = code + 1000;//保證隨機數為4位數字}}else if(length == 6){code = new Random().nextInt(999999);//生成隨機數,最大為999999if(code < 100000){code = code + 100000;//保證隨機數為6位數字}}else{throw new RuntimeException("只能生成4位或6位數字驗證碼");}return code;}/*** 隨機生成指定長度字符串驗證碼* @param length 長度* @return*/public static String generateValidateCode4String(int length){Random rdm = new Random();String hash1 = Integer.toHexString(rdm.nextInt());String capstr = hash1.substring(0, length);return capstr;}
}

2、郵箱配置

@Component
@Configuration
public class MailConfig {@Resourceprivate MailProperties mailProperties;public String getFrom() {return mailProperties.getFrom();}public JavaMailSender getMailSender(String username, String password) {JavaMailSenderImpl mailSender = new JavaMailSenderImpl();mailSender.setHost(mailProperties.getHost());mailSender.setPort(mailProperties.getPort());// 如果沒有自定義的用戶,就使用配置類里面的用戶mailSender.setUsername(StringUtils.defaultString(username, mailProperties.getUsername()));mailSender.setPassword(StringUtils.defaultString(password, mailProperties.getPassword()));Properties props = mailSender.getJavaMailProperties();// starttls.enable = true 時為 smtpsprops.put("mail.transport.protocol", "smtps");props.put("mail.smtp.auth", mailProperties.getAuth());props.put("mail.smtp.starttls.enable", mailProperties.getStarttlsEnable());props.put("mail.smtp.ssl.trust", mailProperties.getSslTrust());props.put("mail.debug", "true");return mailSender;}
}

3、發送驗證碼

public void email(String email) {SimpleMailMessage message = new SimpleMailMessage();//接收者//郵件發送人message.setFrom(mailConfig.getFrom());// 郵件接收人(可以使用 String[] 發送給多個用戶)if (StringUtils.isEmpty(email)){throw new ServiceException("指定接收者");}message.setTo(email);// 郵件標題message.setSubject("【phbbb】郵箱驗證碼");//隨機生成6位驗證碼String code = ValidateCodeUtils.generateValidateCode(6).toString();System.out.println(code);//存儲到redis 設置失效時間一分鐘redisTemplate.opsForValue().set(CacheConstants.CAPTCHA_CODE_KEY + email,code,120, TimeUnit.SECONDS);// 郵件內容message.setText("修改用戶資料的郵箱驗證碼為:" + code + ",驗證碼有效期為2分鐘!");// 發送郵件mailConfig.getMailSender(null, null).send(message);}

二、短信發送驗證碼

1、短信發送工具類

/*** 短信發送工具類*/
@Component
public class SMSUtils {/*** 發送短信* @param signName 簽名* @param templateCode 模板* @param phoneNumbers 手機號* @param param 參數*/private static final Logger log = LoggerFactory.getLogger(SMSUtils.class);@Value("${sms.accessKeyId}")private static String accessKeyId;@Value("${sms.secret}")private static String secret;@Value("${sms.signName}")private static String signName; // 短信簽名@Value("${sms.templateCode}")private static String templateCode;  //短信模板@Value("${sms.regionId}")private static String regionId;   // 短信服務器區域public static void sendMessage(String phone,String code){DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, secret);DefaultAcsClient client = new DefaultAcsClient(profile);CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);//下面兩個不能動request.setSysProduct("Dysmsapi");request.setSysDomain("dysmsapi.aliyuncs.com");request.setSysVersion("2017-05-25");request.setSysAction("SendSms");//自定義參數(手機號,驗證碼,簽名,模板)request.putQueryParameter("RegoinId", regionId);request.putQueryParameter("PhoneNumbers", phone);request.putQueryParameter("SignName", signName); //填自己申請的名稱request.putQueryParameter("TemplateCode", templateCode);request.putQueryParameter("TemplateParam", "{\"code\":\"" + code + "\"}");try {CommonResponse response = client.getCommonResponse(request);boolean success = response.getHttpResponse().isSuccess();System.out.println(success + "短信發送成功");}catch (Exception e) {e.printStackTrace();}}
}

2、發送驗證碼?

@ApiOperation("發送短信驗證碼")
@PostMapping("/sendSms")
public Result sendSms(String phone) {if(StringUtils.isNotEmpty(phone)){//生成隨機的4位驗證碼String code = ValidateCodeUtils.generateValidateCode(4).toString();//調用阿里云提供的短信服務API完成發送短信SMSUtils.sendMessage(phone,code);//需要將生成的驗證碼保存到redis,設置失效時間五分鐘redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);return success("手機驗證碼短信發送成功");}return error("短信發送失敗");
}

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

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

相關文章

【操作系統和計網從入門到深入】(二)進程

前言 這個專欄其實是博主在復習操作系統和計算機網絡時候的筆記&#xff0c;所以如果是博主比較熟悉的知識點&#xff0c;博主可能就直接跳過了&#xff0c;但是所有重要的知識點&#xff0c;在這個專欄里面都會提到&#xff01;而且我也一定會保證這個專欄知識點的完整性&…

高通平臺開發系列講解(USB篇)MBIM協議詳解

文章目錄 一、MBIM協議二、MBIM 消息類型三、基本控制消息構成3.1、MBIM OPEN MSG FORMAT3.2、MBIM CLOSE MSG FORMAT3.3、MBIM_COMMAND_MSG3.4、MBIM_COMMAND_DONE3.5、MBIM_INDICATE_STATUS_MSG四、MBIM Message(UUID+CID)4.1、UUID_BASIC_CONNECT

頻率、概率

頻率 在相同的條件下進行試驗&#xff0c;假設試驗進行了次&#xff0c;其中隨機事件A發生了次&#xff0c;那么就稱為隨機事件A發生的頻率。 概率 假設隨機試驗E的樣本空間是S&#xff0c;對于其中每個隨機事件&#xff0c;都對應了一個實數&#xff0c;把這個實數稱為隨機…

網絡游戲APP備案|游戲

網絡游戲APP備案|游戲 網絡游戲備案分析需要備案原因&#xff08;個人看法&#xff09;對小公司對大公司 總結 網絡游戲備案分析 相信做網絡游戲的伙伴們在23年都收到了各個平臺的公告&#xff0c;網絡游戲需要進行APP的備案。也就是說網路游戲現在安卓平臺也不是你想上架測試…

中國降冰片烯行業研究與投資預測報告(2024版)

內容簡介&#xff1a; 降冰片烯&#xff08;Norbornene&#xff0c;NB&#xff09;也稱降莰烯&#xff08;Norcamphene&#xff09;&#xff0c;是一種橋環烴。降冰片烯是一種常溫白色透光的結晶。降冰片烯易升華&#xff0c;沸點96℃&#xff0c;熔點44-46℃&#xff0c;閃點…

酶聯免疫抗體試劑——博邁倫生物

酶聯免疫抗體試劑是一種廣泛應用于生物醫學研究領域的實驗工具&#xff0c;其在檢測、分析和診斷等方面發揮著重要作用。本文將從酶聯免疫抗體試劑的基本原理、應用領域、優勢特點以及未來發展趨勢等方面進行詳細闡述。 基本原理 酶聯免疫抗體試劑是一種利用酶標記的抗體與特…

a1隨筆小思--家書

師夷長技以自強 不應該只學西方的技術&#xff0c;更應該傳承我們中華的五千年的先人智慧。 修心養性 藏器于身 子曰:“可與言而不與之言&#xff0c;失人&#xff1b;不可與言而與之言&#xff0c;失言。知者不失人&#xff0c;亦不失言。” 孔子說:“可以跟他交談&#xf…

051:vue項目webpack打包后查看各個文件大小

第050個 查看專欄目錄: VUE ------ element UI 專欄目標 在vue和element UI聯合技術棧的操控下&#xff0c;本專欄提供行之有效的源代碼示例和信息點介紹&#xff0c;做到靈活運用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安裝、引用&#xff0c;模板使…

什么是sql的謂詞下推

SQL的謂詞下推&#xff08;Predicate Pushdown&#xff09;是一種數據庫查詢優化技術&#xff0c;它將查詢中的過濾條件&#xff08;謂詞&#xff09;盡可能地“下推”到查詢計劃中更早的階段執行。這意味著&#xff0c;系統嘗試在處理和轉換數據之前先應用這些過濾條件&#x…

Oracle merge into using on when then 用法

merge into using on when then 是 Oracle 數據庫合并數據表的一種操作&#xff0c; MERGE INTO target_table a USING source_table b ON (a.col1 b.col1 and a.col2 b.col2) WHEN MATHED THEN update set a.col3 b.col3 WHEN NOT MATHED THEN insert (a.col1,a.c…

Linux壓縮和解壓命令

Linux系統中壓縮包的后綴有.zip、.gz、.bz2、.xz等&#xff0c;后綴不同表示壓縮方式不同。 1.打包命令 tar tar命令用于備份文件的命令&#xff0c;該命令可打包多個文件或目錄&#xff0c;也可將被打包的文件與目錄從包中還原。 tar 選項 包名 {參數} 包名是指打包的文…

git 分支合并

git 分支合并 比如 20231205 分支合并&#xff0c;到main分支上 1&#xff0c;切換到 main分支上 git checkout main2&#xff0c;進行合并 git merge 202312053&#xff0c;如果您希望在合并時保持提交歷史的清晰&#xff0c;您可以使用 rebase 命令&#xff1a; git reba…

javafx-在listview中添加了點擊事件后會執行多次

現象 我在一個按鈕的點擊事件中添加了&#xff0c;點擊事件的監聽如下&#xff0c;就會造成我多次點擊按鈕后&#xff0c;里面打開瀏覽器會執行多次 listviewitemListener new ChangeListener() {Overridepublic void changed(ObservableValue observable, Object oldValue, …

Python基礎期末復習 新手

類是創建實例的模板&#xff0c;而實例則是一個一個具體的對象&#xff0c;各個實例擁有的數據都互相獨立&#xff0c;互不影響。 實例方法是一個普通的函數&#xff0c;類方法和靜態方法都是通過函數裝飾器的方式實現的&#xff1b;實例方法需要傳入self&#xff0c;類方法需…

git強制回滾,遠程強制更新,git pull強制更新

注意&#xff1a;這里是強制回滾&#xff0c;回滾后&#xff0c;之后歷史的就沒有了&#xff0c;慎用。 本地強制回滾 強制回滾到上一個版本 git reset --hard HEAD^強制回滾上上個版本 git reset --hard HEAD^^git log查看版本 git log --prettyonelinegit log --prettyf…

高通平臺開發系列講解(USB篇)MBIM驅動詳解

文章目錄 一、數據結構二、源碼分析三、adroid_mbim創建四、讀寫 /dev/adroid_mbim4.1、讀gsi_ctrl_dev_read4.2、寫gsi_ctrl_dev_write沉淀、分享、成長,讓自己和他人都能有所收獲!?? ??本文主要介紹高通平臺USB網卡MBIM驅動。 一、數據結構 目錄:drivers/usb/gadget/…

【cocotb】【達坦科技DatenLord】Cocotb Workshop分享

https://www.bilibili.com/video/BV19e4y1k7EE/?spm_id_from333.337.search-card.all.click&vd_sourcefd0f4be6d0a5aaa0a79d89604df3154a 方便RFM實現 cocotb_test 替代makefile &#xff0c; 類似python 函數執行

java web系統的常見安全問題

一、背景 java開發的系統在發布到互聯網后都需要進行安全掃描&#xff0c;本文主要總結開發web系統需要注意的與系統安全相關的問題。因為在做需求開發時&#xff0c;很少產品會將系統安全的因素考慮在內&#xff0c;總覺得實現個需求很簡單&#xff0c;就是一些頁面&#xff0…

.Net6.0 Microsoft.AspNetCore.Http.Abstractions 2.20 已棄用

您想要升級 Microsoft.AspNetCore.Http.Abstractions 包&#xff0c;您需要注意以下幾點&#xff1a; Microsoft.AspNetCore.Http.Abstractions 包在 ASP.NET Core 2.2 版本后已經被標記為過時&#xff0c;因為它已經被包含在 Microsoft.AspNetCore.App 框架引用中12。因此&am…

零基礎自學Python的最全時間規劃表

文章目錄 前言第一階段:熟悉Python第二階段:軟件開發第三階段:成為程序員關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學習書籍四、Python工具包項目源碼合集①Python工具包②Python實戰案例③Python小游戲源碼五、面試資料六、Python…