现在的位置: 首页 > 编程语言 > 正文

SpringBoot中快速实现邮箱发送代码解析

2020年02月14日 编程语言 ⁄ 共 4791字 ⁄ 字号 评论关闭

前言在许多企业级项目中,需要用到邮件发送的功能,如:

注册用户时需要邮箱发送验证用户生日时发送邮件通知祝贺发送邮件给用户等

创建工程导入依赖Copy<!-- 邮箱发送依赖 --><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.propertiesCopy# JavaMailSender 邮件发送的配置spring.mail.host=smtp.qq.comspring.mail.username=lovelyWu98k@qq.com#授权码spring.mail.password=spring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=truespring.mail.default-encoding=UTF-8封装邮箱发送工具类创建邮箱信息实体类,如下:

Copy/*** 邮件信息实体** @author:伍梓涛* @version:1.0.0* @Modified By:SimpleWu* @CopyRright (c)2019-:YUM架构平台*/@Datapublic class MailEntity {private String to; //收件人private String subject;//标题private String text;//正文private boolean isHtml = false;//是否html邮件private List<String> files;//附件地址private Date sentDate;//发送时间

}创建邮箱信息实体类工具,快捷创建邮件信息

Copy/*** 邮箱发送信息统一处理封装** @author:伍梓涛* @version:1.0.0* @Modified By:SimpleWu* @CopyRright (c)2019-:YUM架构平台*/@Slf4jpublic 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());//是否htmlmimeMessageHelper.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;}

}创建邮箱发送工具类,进行邮箱发送:

Copy

/*** 邮箱发送工具类** @author:伍梓涛* @version:1.0.0* @Modified By:SimpleWu* @CopyRright (c)2019-:YUM架构平台*/@Component@Slf4jpublic class MailHelper {

@Autowiredprivate 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.发送普通邮件

CopyMailEntity emailContextPojo = new MailEntity();emailContextPojo.setSubject("Ycloud 邮箱标题");emailContextPojo.setText("Ycloud 邮箱正文");emailContextPojo.setTo(" 接收邮箱号 ");MailHelper.buidler().sendMail(emailContextPojo);2.发送Html邮件

CopyemailContextPojo.setHtml(true);只需要将信息实体类设置成true即可。3.发送附件

CopyemailContextPojo.setFiles(Arrays.asList("D:\\Yum系统架构平台\04.高系统部署\04.PXC\\部署手册.docx"));只需要增加附件路径即可。注: 请勿直接在项目中使用邮箱发送可参考JOB实现定时发送邮件:https://www.cnblogs.com/SimpleWu/p/11341453.html本文代码案例:https://github.com/450255266/open-doubi/tree/master/SpringBoot/email

本文标题: SpringBoot中快速实现邮箱发送代码解析

以上就上有关SpringBoot中快速实现邮箱发送代码解析的全部内容,学步园全面介绍编程技术、操作系统、数据库、web前端技术等内容。

抱歉!评论已关闭.