SpringBoot中快速實(shí)現(xiàn)郵箱發(fā)送代碼解析
前言
在許多企業(yè)級(jí)項(xiàng)目中,需要用到郵件發(fā)送的功能,如:
- 注冊(cè)用戶時(shí)需要郵箱發(fā)送驗(yàn)證
- 用戶生日時(shí)發(fā)送郵件通知祝賀
- 發(fā)送郵件給用戶等
創(chuàng)建工程導(dǎo)入依賴
<!-- 郵箱發(fā)送依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> <!-- 小火龍代碼簡化 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency>
本工程依賴于SpringBoot,是基于SpringBoot再次對(duì)郵箱發(fā)送進(jìn)行了一次封裝。
創(chuàng)建Application.properties
# JavaMailSender 郵件發(fā)送的配置 spring.mail.host=smtp.qq.com spring.mail.username=lovelyWu98k@qq.com #授權(quán)碼 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
封裝郵箱發(fā)送工具類
創(chuàng)建郵箱信息實(shí)體類,如下:
/** * 郵件信息實(shí)體 * * @author:伍梓濤 * @version:1.0.0 * @Modified By:SimpleWu * @CopyRright (c)2019-:YUM架構(gòu)平臺(tái) */ @Data public class MailEntity { private String to; //收件人 private String subject;//標(biāo)題 private String text;//正文 private boolean isHtml = false;//是否html郵件 private List<String> files;//附件地址 private Date sentDate;//發(fā)送時(shí)間 }
創(chuàng)建郵箱信息實(shí)體類工具,快捷創(chuàng)建郵件信息
/** * 郵箱發(fā)送信息統(tǒng)一處理封裝 * * @author:伍梓濤 * @version:1.0.0 * @Modified By:SimpleWu * @CopyRright (c)2019-:YUM架構(gòu)平臺(tái) */ @Slf4j public class MailEntityHelper { public static MimeMessageHelper craeteMessageHelper(MimeMessage mimeMessage, MailEntity mailBean) throws MessagingException { MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true); // mimeMessageHelper.setFrom(emailSender);//發(fā)件人 mimeMessageHelper.setTo(mailBean.getTo());//收件人 mimeMessageHelper.setSubject(mailBean.getSubject());//標(biāo)題 mimeMessageHelper.setText(mailBean.getText(), mailBean.isHtml());//是否html mimeMessageHelper.setSentDate(mailBean.getSentDate() == null ? new Date() : mailBean.getSentDate());// 客戶端郵箱發(fā)送時(shí)間 if (mailBean.getFiles() != null && mailBean.getFiles().size() > 0) { //附件添加 mailBean.getFiles().forEach(filename -> { String ext = filename.substring(filename.lastIndexOf(".") + 1, filename.length()); File diskfile = new File(filename); try { mimeMessageHelper.addAttachment(diskfile.getName(), diskfile); } catch (MessagingException e) { e.printStackTrace(); log.error("設(shè)置附件失敗:{}", mailBean); } }); } return mimeMessageHelper; } }
創(chuàng)建郵箱發(fā)送工具類,進(jìn)行郵箱發(fā)送:
/** * 郵箱發(fā)送工具類 * * @author:伍梓濤 * @version:1.0.0 * @Modified By:SimpleWu * @CopyRright (c)2019-:YUM架構(gòu)平臺(tái) */ @Component @Slf4j public class MailHelper { @Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.username}") private String emailSender; private static MailHelper mailHelper; public MailHelper() { mailHelper = this; } /** * 構(gòu)建靜態(tài)獲取實(shí)例 * * @return */ public static MailHelper buidler() { if (mailHelper == null) { return null; } return mailHelper; } /*public void sendSimpleMail(EmailContextPojo mailBean) { try { SimpleMailMessage simpleMailMessage = new SimpleMailMessage(); //郵件發(fā)送人 simpleMailMessage.setFrom(emailSender); //郵件接收人 simpleMailMessage.setTo(mailBean.getTo()); //郵件主題 simpleMailMessage.setSubject(mailBean.getSubject()); //郵件內(nèi)容 simpleMailMessage.setText(mailBean.getText()); javaMailSender.send(simpleMailMessage); } catch (Exception e) { e.printStackTrace(); log.error("郵件發(fā)送失敗", e.getMessage()); } }*/ public void sendMail(MailEntity mailBean) { MimeMessage mimeMailMessage = null; try { mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper mimeMessageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBean); mimeMessageHelper.setFrom(emailSender);//發(fā)件人 javaMailSender.send(mimeMailMessage); } catch (Exception e) { log.error("郵件發(fā)送失敗", e.getMessage()); } } public void sendMail(MailEntity... mailBeans) { //批量發(fā)送集合 List<MimeMessage> mimeMessages = new ArrayList<>(mailBeans.length); try { if (mailBeans != null || mailBeans.length > 0) { for (int i = 0; i < mailBeans.length; i++) { MimeMessage mimeMailMessage = javaMailSender.createMimeMessage(); MimeMessageHelper messageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBeans[i]); messageHelper.setFrom(emailSender);//發(fā)件人 mimeMessages.add(mimeMailMessage); } } MimeMessage[] resultMessage = new MimeMessage[mimeMessages.size()]; mimeMessages.toArray(resultMessage); javaMailSender.send((resultMessage)); } catch (Exception e) { log.error("郵件發(fā)送失敗", e.getMessage()); } } }
在之前通過郵箱發(fā)送信息統(tǒng)一處理的工具類,對(duì)郵件信息實(shí)體進(jìn)行封裝后,這里就只需要傳入對(duì)象參數(shù)即可。由于在這里使用的是SpringBoot已經(jīng)封裝好的,由于我們要把它當(dāng)成工具類使用,每次需要注入并不方便。
所在在類中加了個(gè)靜態(tài)對(duì)象,在Spring 容器實(shí)例化的時(shí)候給他初始化直接賦值給javaMailSender并且通過buidler()可以靜態(tài)獲取到實(shí)例對(duì)象,但是這樣如果被重新創(chuàng)建對(duì)象后就會(huì)產(chǎn)生問題,所以最好在工具類中使用Spring 容器去獲取 javaMailSender即可 。
發(fā)送郵件
1.發(fā)送普通郵件
MailEntity emailContextPojo = new MailEntity(); emailContextPojo.setSubject("Ycloud 郵箱標(biāo)題"); emailContextPojo.setText("Ycloud 郵箱正文"); emailContextPojo.setTo(" 接收郵箱號(hào) "); MailHelper.buidler().sendMail(emailContextPojo);
2.發(fā)送Html郵件
emailContextPojo.setHtml(true);
只需要將信息實(shí)體類設(shè)置成true即可。
3.發(fā)送附件
emailContextPojo.setFiles(Arrays.asList("D:\\Yum系統(tǒng)架構(gòu)平臺(tái)\\004.高系統(tǒng)部署\\004.PXC\\部署手冊(cè).docx"));
只需要增加附件路徑即可。
注: 請(qǐng)勿直接在項(xiàng)目中使用郵箱發(fā)送
本文代碼案例: https://github.com/450255266/open-doubi/tree/master/SpringBoot/email
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?代理?Bean?獲取不到原始?Bean?對(duì)象注解解決方法
這篇文章主要介紹了Spring?代理?Bean?獲取不到原始?Bean?對(duì)象注解解決方法,文章圍繞主題相關(guān)資料展開詳細(xì)介紹,需要的小伙伴可以參考一下2022-04-04mybatis解決<foreach>標(biāo)簽不能超過1000的問題
MyBatis是一個(gè)開源的持久層框架,它可以幫助開發(fā)者簡化數(shù)據(jù)庫操作的編寫,而foreach是MyBatis中的一個(gè)重要標(biāo)簽,用于在SQL語句中進(jìn)行循環(huán)操作,本文主要給大家介紹了mybatis解決<foreach>標(biāo)簽不能超過1000的問題,需要的朋友可以參考下2024-05-05eclipse修改maven倉庫位置的方法實(shí)現(xiàn)
本文主要介紹了eclipse修改maven倉庫位置的方法實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08Java 實(shí)戰(zhàn)項(xiàng)目之疫情防控管理系統(tǒng)詳解
讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用Java實(shí)現(xiàn)一個(gè)疫情防控管理系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平2021-11-11解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題
這篇文章主要介紹了解決java.util.HashMap$Values?cannot?be?cast?to?java.ut的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03RabbitMQ實(shí)現(xiàn)延時(shí)消息的兩種方法實(shí)戰(zhàn)教程
這篇文章主要介紹了RabbitMQ實(shí)現(xiàn)延時(shí)消息的兩種方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09Spring Boot2.0實(shí)現(xiàn)靜態(tài)資源版本控制詳解
這篇文章主要給大家介紹了關(guān)于Spring Boot2.0實(shí)現(xiàn)靜態(tài)資源版本控制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11關(guān)于mybatis3中@SelectProvider的使用問題
這篇文章主要介紹了mybatis3中@SelectProvider的使用技巧,@SelectProvide指定一個(gè)Class及其方法,并且通過調(diào)用Class上的這個(gè)方法來獲得sql語句,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-12-12Mybatis-Plus將字段設(shè)置為null解決方法
MyBatis-Plus是一個(gè)MyBatis的增強(qiáng)工具,在MyBatis的基礎(chǔ)上只做增 強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,下面這篇文章主要給大家介紹了關(guān)于Mybatis-Plus將字段設(shè)置為null的解決方法的相關(guān)資料,需要的朋友可以參考下2023-04-04