摘要:前景介紹在日常的工作中,我們經常會用到郵件服務,比如發送驗證碼,找回密碼確認,注冊時郵件驗證等,所以今天在這里進行郵件服務的一些操作。
前景介紹
在日常的工作中,我們經常會用到郵件服務,比如發送驗證碼,找回密碼確認,注冊時郵件驗證等,所以今天在這里進行郵件服務的一些操作。
大致思路我們要做的其實就是把Java程序作為一個客戶端,然后通過配置SMTP協議去連接我們所使用的發送郵箱(from)對應的SMTP服務器,然后通過SMTP協議,將郵件轉投到目標郵箱(to)對應的SMTP服務器,最后將該郵件分發到目標郵箱
Spring Boot給我們集成了郵件的相關服務,并給出了對應的starter,這里我們來實戰學習一下郵件服務是怎么玩的。
引入POM萬年不變的第一步:引入所需要的starter依賴,這里我采用的是和我的Spring Boot對應的版本2.1.4,其余版本的話應該是相差不大,可以同樣作為借鑒
配置文件org.springframework.boot spring-boot-starter-mail 2.1.4.RELEASE
這里由于國內有幾大郵箱運營商,所以分為四種不同的情況來說明
QQ郵箱
QQ郵箱是比較麻煩的一種,需要登錄到郵箱中找到對應的配置,并驗證密碼后開啟STMP服務
點擊這里可以去獲取對應的授權碼,后面的配置中我們會用到~
個人QQ郵箱的SMTP服務器的host是:smtp.qq.com
163郵箱
對應的授權碼就是我們郵箱的密碼~
SMTP服務器的host是:smtp.163.com
騰訊企業郵箱
對應的授權碼也是我們郵箱的密碼
企業的和個人的host略有不同:smtp.exmail.qq.com
阿里企業郵箱
對應的授權碼也是我們郵箱的密碼
阿里的企業郵箱host是: smtp.mxhichina.com
得到對應的信息之后,我們就可以去完善我們的配置信息了 ~
# 這里的host對應是上面的幾大運營商的STMP服務器的host spring.mail.host=smtp.163.com spring.mail.username=****@163.com # 這里的password對應的就是上面的授權碼 spring.mail.password=*** spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true spring.mail.default-encoding=UTF-8編寫郵件的實體類
/** * 郵件實體類 * @author vi * @since 2019/07/17 */ @Data @NoArgsConstructor @AllArgsConstructor public class Mail { /** * 郵件發送人 */ private String from; /** * 郵件接收人 */ private String to; /** * 郵件主題 */ private String subject; /** * 郵件內容 */ private String content; /** * 郵件主題 */ private String type; /** * 發送郵件模板時的模板文件名 */ private String templateName; /** * 模板參數 */ private Map編寫發送郵件的方法variables; /** * 附件地址 */ private String attachPath; }
在這里,我將發送郵件分為了兩種情況:
發送普通郵件
/** * 發送普通郵件 * @param email 郵件對象 */ private static void sendSimpleMail(Mail email) { SimpleMailMessage simpleMailMessage = new SimpleMailMessage(); // 郵件發送人 simpleMailMessage.setFrom(email.getFrom()); // 郵件接收人 simpleMailMessage.setTo(email.getTo()); // 郵件主題 simpleMailMessage.setSubject(email.getSubject()); // 郵件內容 simpleMailMessage.setText(email.getContent()); // 發送郵件 javaMailSender.send(simpleMailMessage); }
發送MIME類型郵件(比如模板,附件,HTML都屬于該類型的郵件)
/** * 發送MIME類型的郵件 * @param email 郵件對象 */ private static void sendMimeMail(Mail email) { // 生成郵件字符串 String content = email.getContent(); if (email.getVariables() != null) { content = generate(email); } // 基于這個對象可以發送HTML,或者攜帶附件的二進制郵件 MimeMessage message= javaMailSender.createMimeMessage(); try { // 構建發送模板郵件的對象 MimeMessageHelper helper = new MimeMessageHelper(message,true); // 設置發送郵箱 helper.setFrom(email.getFrom()); // 設置接收郵箱 helper.setTo(email.getTo()); // 設置郵件名(主題) helper.setSubject(email.getSubject()); // 設置郵件內容 helper.setText(content,true); // 這里可以發送帶有附件的郵件,如果沒有附件可以省略,就不在多做描述 if (!StringUtils.isNullOrEmpty(email.getAttachPath())) { FileSystemResource file = new FileSystemResource(new File(email.getAttachPath())); helper.addAttachment(file.getFilename(), file); } // 發送郵件 javaMailSender.send(message); } catch (MessagingException e) { } } /** * 生成模板字符串 * @param email 郵件對象 * @return */ private static String generate(Mail email) { Context context = new Context(); // 設置模板參數 context.setVariables(email.getVariables()); // 加載模板后的內容字符串 return templateEngine.process(email.getTemplateName(), context); }
最后可以把這兩個方法統一接口,通過Mail類中的類型來判斷調用哪一個方法即可~
/** * 對外開放的統一發送郵件方法 * @param mail */ public static void sendEmail(Mail mail) { String type = mail.getType(); switch (type) { case "1": sendSimpleMail(mail); case "2": sendMimeMail(mail); } }關于模板的一些補充
如果我們需要發送模板郵件的話,需要使用到模板引擎freemaker或thymeleaf,這里我拿thymeleaf來說一下~
第一步,可以引入pom文件
org.springframework.boot spring-boot-starter-thymeleaf
第二步,需要在配置文件中進行配置
spring.thymeleaf.check-template-location=true spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html spring.thymeleaf.mode=HTML5 spring.thymeleaf.encoding=UTF-8
第三步,通過我們獲取到的模板參數對Mail類進行set方法
mail.setVariables(email.getVariables());
第四步,我們需要在模板中去使用參數
Insert title here
注意,這里的thymeleaf的用法,使用標簽th:text來賦值,更多的模板用法,可以去
查閱thymeleaf的用法~
后記郵件在這里就告一段落了,下篇預告:JVM系列(一):JVM簡介,敬請期待,謝謝大家一直以來的支持!
公眾號原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/76150.html
摘要:前言如題,今天介紹下是如何整合的。存儲結構如下男一個優秀的廢人準備工作創建一個名為的數據庫,不會建的。層實現類添加學生信息根據刪除學生信息更新學生信息根據查詢學生信息查詢學生信息列表層測試結果測試已經全部通過,這里僅展示了保存操作。 微信公眾號:一個優秀的廢人。如有問題,請后臺留言,反正我也不會聽。 showImg(https://segmentfault.com/img/remote...
摘要:前言如題,今天介紹下是如何整合的。存儲結構如下男一個優秀的廢人準備工作創建一個名為的數據庫,不會建的。層實現類添加學生信息根據刪除學生信息更新學生信息根據查詢學生信息查詢學生信息列表層測試結果測試已經全部通過,這里僅展示了保存操作。 微信公眾號:一個優秀的廢人。如有問題,請后臺留言,反正我也不會聽。 showImg(https://segmentfault.com/img/remote...
摘要:需要注意的是必須要使用版本為以上才支持屬性。與格式文件不同,正對不同的,無法在一個文件設置,官方采用命名形式為格式來達成一樣的效果。采用方式添加的是屬于額外激活的,也就是說覆蓋掉外部傳入的指定的。 showImg(https://segmentfault.com/img/remote/1460000019924197?w=1050&h=500); Spring Boot Profile...
摘要:代碼如下所示自定義業務實現恒宇少年碼云消息內容是否顯示消息內容,我們內的代碼比較簡單,根據屬性參數進行返回格式化后的字符串。 在我們學習SpringBoot時都已經了解到starter是SpringBoot的核心組成部分,SpringBoot為我們提供了盡可能完善的封裝,提供了一系列的自動化配置的starter插件,我們在使用spring-boot-starter-web時只需要在po...
摘要:本文是作者自己對中線程的狀態線程間協作相關使用的理解與總結,不對之處,望指出,共勉。當中的的數目而不是已占用的位置數大于集合番一文通版集合番一文通版垃圾回收機制講得很透徹,深入淺出。 一小時搞明白自定義注解 Annotation(注解)就是 Java 提供了一種元程序中的元素關聯任何信息和著任何元數據(metadata)的途徑和方法。Annotion(注解) 是一個接口,程序可以通過...
閱讀 2742·2021-10-26 09:50
閱讀 2385·2021-10-11 11:08
閱讀 2127·2019-08-30 15:53
閱讀 1905·2019-08-30 15:44
閱讀 2382·2019-08-28 18:12
閱讀 2518·2019-08-26 13:59
閱讀 2851·2019-08-26 12:19
閱讀 2750·2019-08-26 12:09