SpringBoot中快速实现邮箱发送代码解析
程序员文章站
2022-10-10 19:41:25
前言
在许多企业级项目中,需要用到邮件发送的功能,如:
注册用户时需要邮箱发送验证
用户生日时发送邮件通知祝贺
发送邮件给用户等
创建工程...
前言
在许多企业级项目中,需要用到邮件发送的功能,如:
- 注册用户时需要邮箱发送验证
- 用户生日时发送邮件通知祝贺
- 发送邮件给用户等
创建工程导入依赖
<!-- 邮箱发送依赖 --> <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再次对邮箱发送进行了一次封装。
创建application.properties
# javamailsender 邮件发送的配置 spring.mail.host=smtp.qq.com spring.mail.username=lovelywu98k@qq.com #授权码 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:伍梓涛 * @version:1.0.0 * @modified by:simplewu * @copyrright (c)2019-:yum架构平台 */ @data public class mailentity { private string to; //收件人 private string subject;//标题 private string text;//正文 private boolean ishtml = false;//是否html邮件 private list<string> files;//附件地址 private date sentdate;//发送时间 }
创建邮箱信息实体类工具,快捷创建邮件信息
/** * 邮箱发送信息统一处理封装 * * @author:伍梓涛 * @version:1.0.0 * @modified by:simplewu * @copyrright (c)2019-:yum架构平台 */ @slf4j public class mailentityhelper { public static mimemessagehelper craetemessagehelper(mimemessage mimemessage, mailentity mailbean) throws messagingexception { mimemessagehelper mimemessagehelper = new mimemessagehelper(mimemessage, true); // mimemessagehelper.setfrom(emailsender);//发件人 mimemessagehelper.setto(mailbean.getto());//收件人 mimemessagehelper.setsubject(mailbean.getsubject());//标题 mimemessagehelper.settext(mailbean.gettext(), mailbean.ishtml());//是否html mimemessagehelper.setsentdate(mailbean.getsentdate() == null ? new date() : mailbean.getsentdate());// 客户端邮箱发送时间 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("设置附件失败:{}", mailbean); } }); } return mimemessagehelper; } }
创建邮箱发送工具类,进行邮箱发送:
/** * 邮箱发送工具类 * * @author:伍梓涛 * @version:1.0.0 * @modified by:simplewu * @copyrright (c)2019-:yum架构平台 */ @component @slf4j public class mailhelper { @autowired private javamailsender javamailsender; @value("${spring.mail.username}") private string emailsender; private static mailhelper mailhelper; public mailhelper() { mailhelper = this; } /** * 构建静态获取实例 * * @return */ public static mailhelper buidler() { if (mailhelper == null) { return null; } return mailhelper; } /*public void sendsimplemail(emailcontextpojo mailbean) { try { simplemailmessage simplemailmessage = new simplemailmessage(); //邮件发送人 simplemailmessage.setfrom(emailsender); //邮件接收人 simplemailmessage.setto(mailbean.getto()); //邮件主题 simplemailmessage.setsubject(mailbean.getsubject()); //邮件内容 simplemailmessage.settext(mailbean.gettext()); javamailsender.send(simplemailmessage); } catch (exception e) { e.printstacktrace(); log.error("邮件发送失败", e.getmessage()); } }*/ public void sendmail(mailentity mailbean) { mimemessage mimemailmessage = null; try { mimemailmessage = javamailsender.createmimemessage(); mimemessagehelper mimemessagehelper = mailentityhelper.craetemessagehelper(mimemailmessage, mailbean); mimemessagehelper.setfrom(emailsender);//发件人 javamailsender.send(mimemailmessage); } catch (exception e) { log.error("邮件发送失败", e.getmessage()); } } public void sendmail(mailentity... mailbeans) { //批量发送集合 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);//发件人 mimemessages.add(mimemailmessage); } } mimemessage[] resultmessage = new mimemessage[mimemessages.size()]; mimemessages.toarray(resultmessage); javamailsender.send((resultmessage)); } catch (exception e) { log.error("邮件发送失败", e.getmessage()); } } }
在之前通过邮箱发送信息统一处理的工具类,对邮件信息实体进行封装后,这里就只需要传入对象参数即可。由于在这里使用的是springboot已经封装好的,由于我们要把它当成工具类使用,每次需要注入并不方便。
所在在类中加了个静态对象,在spring 容器实例化的时候给他初始化直接赋值给javamailsender并且通过buidler()可以静态获取到实例对象,但是这样如果被重新创建对象后就会产生问题,所以最好在工具类中使用spring 容器去获取 javamailsender即可 。
发送邮件
1.发送普通邮件
mailentity emailcontextpojo = new mailentity(); emailcontextpojo.setsubject("ycloud 邮箱标题"); emailcontextpojo.settext("ycloud 邮箱正文"); emailcontextpojo.setto(" 接收邮箱号 "); mailhelper.buidler().sendmail(emailcontextpojo);
2.发送html邮件
emailcontextpojo.sethtml(true);
只需要将信息实体类设置成true即可。
3.发送附件
emailcontextpojo.setfiles(arrays.aslist("d:\\yum系统架构平台\\004.高系统部署\\004.pxc\\部署手册.docx"));
只需要增加附件路径即可。
注: 请勿直接在项目中使用邮箱发送
本文代码案例: https://github.com/450255266/open-doubi/tree/master/springboot/email
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: css层固定位置练习
下一篇: Java中使用增强for循环的实例方法