ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

使用Spring Boot发送邮件

使用Spring Boot发送邮件 一、前言在项目的维护过程中我们通常会在应用中加入短信或者邮件预警功能比如当应用出现异常宕机时应该及时地将预警信息发送给运维或者开发人员本文将介绍如何在Spring Boot中发送邮件。在Spring Boot中发送邮件使用的是Spring提供的org.springframework.mail.javamail.JavaMailSender其提供了许多简单易用的方法可发送简单的邮件、HTML格式的邮件、带附件的邮件并且可以创建邮件模板。二、引入依赖在Spring Boot中发送邮件需要用到spring-boot-starter-mail引入spring-boot-starter-maildependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-thymeleaf/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-mail/artifactId/dependency三、邮件配置在application.yml中进行简单的配置以126邮件为例server:port:80spring:mail:host:smtp.126.comusername:你的账号password:你的密码properties:mail:smtp:auth:truestarttls:enable:truerequired:truespring.mail.usernamespring.mail.password填写自己的邮箱账号密码即可。四、代码编写在这里我们封装一个邮件接收信息对象进行邮件发送实体类MailDOGetterSetterpublicclassMailDO{//标题privateStringtitle;//内容privateStringcontent;//接收人邮件地址privateStringemail;//附加value 文件地址/动态模板数据privateMapString,Objectattachment;}邮件发送servicepublicinterfaceMailService{voidsendTextMail(MailDOmail);voidsendHtmlMail(MailDOmail,booleanisShowHtml);voidsendAttachMail(MailDOmail);voidsendTemplateMail(MailDOmail);}service具体实现Slf4jServicepublicclassMailServiceImplimplementsMailService{//template模板引擎AutowiredprivateTemplateEnginetemplateEngine;AutowiredprivateJavaMailSenderjavaMailSender;Value(${spring.mail.username})privateStringfrom;AsyncOverridepublicvoidsendTextMail(MailDOmail){//建立邮件消息SimpleMailMessagemessagenewSimpleMailMessage();message.setFrom(from);// 发送人的邮箱message.setSubject(mail.getTitle());//标题message.setTo(mail.getEmail());//发给谁 对方邮箱message.setText(mail.getContent());//内容try{javaMailSender.send(message);//发送}catch(MailExceptione){log.error(纯文本邮件发送失败-message:{},e.getMessage());}}AsyncOverridepublicvoidsendHtmlMail(MailDOmail,booleanisShowHtml){try{MimeMessagemimeMessagejavaMailSender.createMimeMessage();//是否发送的邮件是富文本附件图片html等MimeMessageHelpermessageHelpernewMimeMessageHelper(mimeMessage,true);messageHelper.setFrom(from);// 发送人的邮箱messageHelper.setTo(mail.getEmail());//发给谁 对方邮箱messageHelper.setSubject(mail.getTitle());//标题messageHelper.setText(mail.getContent(),isShowHtml);//false显示原始html代码无效果//判断是否有附加图片等if(mail.getAttachment()!nullmail.getAttachment().size()0){mail.getAttachment().entrySet().stream().forEach(entrySet-{try{FilefileResourceUtils.getFile(String.valueOf(entrySet.getValue()));if(file.exists()){messageHelper.addInline(entrySet.getKey(),file);}}catch(FileNotFoundExceptione){log.error(附件发送失败-message:{},e.getMessage());}catch(MessagingExceptione){log.error(附件发送失败-message:{},e.getMessage());}});}//发送javaMailSender.send(mimeMessage);}catch(MessagingExceptione){log.error(富文本邮件发送失败-message:{},e.getMessage());}}AsyncOverridepublicvoidsendAttachMail(MailDOmail){try{MimeMessagemimeMessagejavaMailSender.createMimeMessage();//是否发送的邮件是富文本附件图片html等MimeMessageHelpermessageHelpernewMimeMessageHelper(mimeMessage,true);messageHelper.setFrom(from);// 发送人的邮箱messageHelper.setTo(mail.getEmail());//发给谁 对方邮箱messageHelper.setSubject(mail.getTitle());//标题messageHelper.setText(mail.getContent());//判断是否有附加图片等if(mail.getAttachment()!nullmail.getAttachment().size()0){mail.getAttachment().entrySet().stream().forEach(entrySet-{try{FilefileResourceUtils.getFile(String.valueOf(entrySet.getValue()));if(file.exists()){messageHelper.addAttachment(entrySet.getKey(),file);}}catch(FileNotFoundExceptione){log.error(附件发送失败-message:{},e.getMessage());}catch(MessagingExceptione){log.error(附件发送失败-message:{},e.getMessage());}});}//发送javaMailSender.send(mimeMessage);}catch(MessagingExceptione){log.error(富文本邮件发送失败-message:{},e.getMessage());}}AsyncOverridepublicvoidsendTemplateMail(MailDOmail){try{MimeMessagemimeMessagejavaMailSender.createMimeMessage();MimeMessageHelpermessageHelpernewMimeMessageHelper(mimeMessage,true);messageHelper.setFrom(from);// 发送人的邮箱messageHelper.setTo(mail.getEmail());//发给谁 对方邮箱messageHelper.setSubject(mail.getTitle());//标题//使用模板thymeleaf//Context是导这个包import org.thymeleaf.context.Context;ContextcontextnewContext();//定义模板数据context.setVariables(mail.getAttachment());//获取thymeleaf的html模板StringemailContenttemplateEngine.process(emailTemplate,context);//指定模板路径messageHelper.setText(emailContent,true);//发送邮件javaMailSender.send(mimeMessage);}catch(MessagingExceptione){log.error(模板邮件发送失败-message:{},e.getMessage());}}}五、测试5.1 发送简单的邮件测试改造EmailControllerRestControllerRequestMapping(/email)publicclassEmailController{AutowiredprivateMailServicemailService;GetMapping(/TextMail)publicStringsendTextMail(){try{MailDOmailnewMailDO();mail.setTitle(一封简单的邮件);mail.setContent(测试一封简单的邮件);mail.setEmail(wno704qq.com);mailService.sendTextMail(mail);return发送成功;}catch(Exceptione){e.printStackTrace();returne.getMessage();}}}启动项目访问http://localhost/email/TextMail提示发送成功5.2 发送HTML格式的邮件改造EmailControllerRestControllerRequestMapping(/email)publicclassEmailController{AutowiredprivateMailServicemailService;GetMapping(/htmlMail)publicStringsendHtmlMail(){try{MailDOmailnewMailDO();mail.setTitle(一封简单的HTML邮件);mail.setContent(p stylecolor:#6db33f使用Spring Boot发送HTML格式邮件。/p);mail.setEmail(wno704qq.com);mailService.sendHtmlMail(mail,true);return发送成功;}catch(Exceptione){e.printStackTrace();returne.getMessage();}}}启动项目访问http://localhost/email/htmlMail提示发送成功5.3 发送带静态资源的邮件改造EmailControllerRestControllerRequestMapping(/email)publicclassEmailController{AutowiredprivateMailServicemailService;GetMapping(/InlineMail)publicStringsendInlineMail(){try{MailDOmailnewMailDO();mail.setTitle(一封简单的Inline邮件);mail.setContent(htmlbody博客图img srccid:img//body/html);mail.setEmail(wno704qq.com);MapString,ObjectmapnewHashMap();map.put(img,classpath:static/009.jpg);mail.setAttachment(map);mailService.sendHtmlMail(mail,true);return发送成功;}catch(Exceptione){e.printStackTrace();returne.getMessage();}}}启动项目访问http://localhost/email/InlineMail提示发送成功5.4 发送带附件的邮件改造EmailControllerRestControllerRequestMapping(/email)publicclassEmailController{AutowiredprivateMailServicemailService;GetMapping(/AttachMail)publicStringsendAttachMail(){try{MailDOmailnewMailDO();mail.setTitle(一封简单的附件邮件);mail.setContent(附件测试具体见附件内容);mail.setEmail(wno704qq.com);MapString,ObjectmapnewHashMap();map.put(计算机词汇.scel,classpath:static/计算机词汇.scel);mail.setAttachment(map);mailService.sendAttachMail(mail);return发送成功;}catch(Exceptione){e.printStackTrace();returne.getMessage();}}}启动项目访问http://localhost/email/AttachMail提示发送成功5.5 发送模板邮件改造EmailControllerRestControllerRequestMapping(/email)publicclassEmailController{AutowiredprivateMailServicemailService;GetMapping(/TemplateMail)publicStringsendTemplateMail(Stringcode){try{MailDOmailnewMailDO();mail.setTitle(一封简单的模板邮件);mail.setEmail(wno704qq.com);MapString,ObjectmapnewHashMap();map.put(code,code);mail.setAttachment(map);mailService.sendTemplateMail(mail);return发送成功;}catch(Exceptione){e.printStackTrace();returne.getMessage();}}}在resources\templates配置模板emailTemplate.html!DOCTYPEhtmlhtmllangzhxmlns:thhttp://www.thymeleaf.orgheadmetacharsetUTF-8/title模板/title/headbody您好您的验证码为spanstylefont-size:15px;font-weight:bold;th:text${code}/请在两分钟内使用完成操作。/body/html启动项目访问http://localhost/email/TemplateMail?code452234提示发送成功
返回列表