Springboot發(fā)送郵件功能的實現(xiàn)詳解
前言
大多數(shù)小伙伴在練習(xí)與學(xué)習(xí)的過程中在驗證時大都使用或驗證碼,但是驗證碼相對而言自己的參與只停留在自己的自己寫的點擊刷新方法上,那有沒有什么方法能讓我們的互動不止限于網(wǎng)頁呢,那就來學(xué)一下如何給自己發(fā)送一封郵件吧,這個功能我預(yù)想是跟用戶綁定的所以設(shè)計時會與用戶有一定的聯(lián)系。
成果展示
表設(shè)計
這里只是為了讓我們成功發(fā)送郵件所以并不用設(shè)計的多么復(fù)雜,只需要在用戶表中添加兩個字段username ,email_address 實體類中是String 表中是varchar.
引入依賴
<!-- 郵件--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> <version>2.3.4.RELEASE</version> </dependency> </dependencies>
郵箱工具類
/** * 描述 工具 檢驗地址是否合法 */ 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; } }
這里并不需要自己去寫校驗方法,直接調(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實現(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ā)送的郵箱就行,要確保能自己能登陸這個郵箱,后面要去獲取一個碼。
Controller
@PostMapping("/sendEmail") @ResponseBody public ApiRestResponse sendEmail(@RequestParam("emailAddress") String emailAddress) throws XatuMallException, AddressException { //檢查郵件地址是否有效,檢查是否已注冊 boolean validEmailAddress = EmailUtil.isValidEmailAddress(emailAddress); if(validEmailAddress) { boolean emailPased = userService.checkEmailRegistered(emailAddress); if (!emailPased) { return ApiRestResponse.error(100018, "郵箱已注冊"); } else{ //發(fā)送郵件 emailService.sendSimpleMessage(emailAddress,"主題是測試","Helllo this is a E-mail"); return ApiRestResponse.success(); } }else{ return ApiRestResponse.error(100020,"非法郵箱"); } }
寫完后要去進行配置
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郵箱,但是聽說他這個垃圾郵件判定等級自己不好改有的是用阿里云郵箱
只用注意兩個點 username 寫自己的郵箱地址
獲取授權(quán)碼
下一個password不是郵箱密碼哈,下面說怎么獲取這個授權(quán)碼
進去登錄好了以后點擊賬戶,找到下面這個區(qū)域
注意我們打開前兩個 然后掃碼獲取那個授權(quán)碼,把它復(fù)制下來添加到配置文件的password欄。
總結(jié)
這個技術(shù)是很簡單的,但是用好它相比于普通的在網(wǎng)頁上加驗證碼我們先聲明一個數(shù)組,調(diào)用函數(shù)去把數(shù)組打亂去去每次獲取驗證碼,把驗證碼存起來作為text發(fā)送到用戶郵箱用來注冊,這個方法相比點擊驗證碼就更加有趣了。當(dāng)然也能用于其他更多的方面~
到此這篇關(guān)于Springboot發(fā)送郵件功能的實現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Springboot發(fā)送郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 使用SpringBoot發(fā)送郵件的方法詳解
- SpringBoot整合郵件發(fā)送的四種方法
- SpringBoot實現(xiàn)定時發(fā)送郵件的三種方法案例詳解
- SpringBoot實現(xiàn)發(fā)送QQ郵件的示例代碼
- SpringBoot?Mail郵件任務(wù)詳情
- SpringBoot?集成短信和郵件的配置示例詳解
- SpringBoot實現(xiàn)郵件發(fā)送的示例代碼
- SpringBoot實現(xiàn)發(fā)送郵件、發(fā)送微信公眾號推送功能
- Spring?Boot整合郵箱發(fā)送郵件實例
- SpringBoot實現(xiàn)發(fā)送電子郵件
- SpringBoot整合JavaMail實現(xiàn)發(fā)郵件的項目實踐
相關(guān)文章
java 將數(shù)據(jù)加載到內(nèi)存中的操作
這篇文章主要介紹了java 將數(shù)據(jù)加載到內(nèi)存中的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09在eclipse導(dǎo)入Java的jar包的方法JDBC(圖文說明)
這篇文章主要介紹了在eclipse導(dǎo)入Java 的jar包的方法 JDBC 圖文說明 ,需要的朋友可以參考下2015-09-09java基于ConcurrentHashMap設(shè)計細粒度實現(xiàn)代碼
這篇文章主要介紹了java基于ConcurrentHashMap設(shè)計細粒度實現(xiàn)代碼,通過ConcurrentHashMap實現(xiàn)細粒度,具有一定參考價值,需要的朋友可以了解。2017-10-10