打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
基于springboot的邮箱配置封装与使用

引言

使用java来发送邮箱,并不是难事,但是如何优雅的封装一个组件并支持附件发送,这里还是需要一定知识和技巧的。本节主要讲解基于配置以及基于数据库的该如何进行简单封装。

邮箱api坐标

     <dependency>            <groupId>org.springframework.boot</groupId>            <artifactId>spring-boot-starter-mail</artifactId>   </dependency>

基于配置

在application.yml配置相关属性即可使用,具体配置如下

spring.mail.host  设置主机
spring.mail.port  设置端口 默认是25;开启ssl,则为465
spring.mail.username 发件箱账户名
spring.mail.password 发件箱密码
spring.mail.properties.mail.smtp.auth 是否开启认证
spring.mail.properties.mail.smtp.port 同上述端口
spring.mail.properties.mail.smtp.socketFactory.port同上

spring.mail.properties.mail.smtp.socketFactory.class

指定实现类,默认为javax.net.ssl.SSLSocketFactory

spring.mail.properties.mail.smtp.starttls.enable是否开启SSL

以上配置必须正确配置,方可正常发送邮件。基于数据库的,可以从数据库相关表中读取信息进行设置即可。具体可以参考springboot的bean注入方式,如需协助,请加微信huzhenjie_888进行有偿协助。

封装实体对象


@Data
public class MailVo {

//邮件id
private String id;
//邮件发送人
private String from;
//邮件接收人
private String to;
//邮件主题
private String subject;
//邮件内容
private String text;
//发送时间
private Date sentDate;
//抄送
private String cc;
//密送
private String bcc;
//状态
private String status;
//报错信息
private String error;
//邮件附件
@JsonIgnore
private MultipartFile[] multipartFiles;

}

封装实现

/** * @author huzhenjie */@Componentpublic class EmailManager {

@Resource private JavaMailSenderImpl mailSender;


@Async public MailVo sendMail(MailVo mailVo) { try { checkMail(mailVo); //1.检测邮件 sendMimeMail(mailVo); //2.发送邮件 } catch (Exception e) { mailVo.setStatus("fail"); mailVo.setError(e.getMessage());
} return mailVo; }

//构建复杂邮件信息类 private void sendMimeMail(MailVo mailVo) { try { MimeMessageHelper messageHelper = new MimeMessageHelper(mailSender.createMimeMessage(), true);//true表示支持复杂类型 //mailVo.setFrom(getMailSendFrom());//邮件发信人从配置项读取 messageHelper.setFrom(mailVo.getFrom());//邮件发信人 messageHelper.setTo(mailVo.getTo().split(","));//邮件收信人 messageHelper.setSubject(mailVo.getSubject());//邮件主题 messageHelper.setText(mailVo.getText(),Boolean.TRUE);//邮件内容 if (!StrUtil.isBlankOrUndefined(mailVo.getCc())) {//抄送 messageHelper.setCc(mailVo.getCc().split(",")); } if (!StrUtil.isBlankOrUndefined(mailVo.getBcc())) {//密送 messageHelper.setCc(mailVo.getBcc().split(",")); } if (mailVo.getMultipartFiles() != null) {//添加邮件附件 for (MultipartFile multipartFile : mailVo.getMultipartFiles()) { messageHelper.addAttachment(multipartFile.getOriginalFilename(), multipartFile); } }
mailVo.setSentDate(new Date()); messageHelper.setSentDate(mailVo.getSentDate()); mailSender.send(messageHelper.getMimeMessage());//正式发送邮件 mailVo.setStatus("ok"); } catch (Exception e) { throw new RuntimeException(e);//发送失败 } }
private void checkMail(MailVo mailVo) { if (StrUtil.isBlankOrUndefined(mailVo.getTo())) { throw new RuntimeException("邮件收信人不能为空"); } if (StrUtil.isBlankOrUndefined(mailVo.getSubject())) { throw new RuntimeException("邮件主题不能为空"); } if (StrUtil.isBlankOrUndefined(mailVo.getText())) { throw new RuntimeException("邮件内容不能为空"); } }


}

总结

以上代码可以直接复制进行使用,在进行配置时,需要避坑的是必须开启ssl配置,并且端口不能设置为25,具体原因请自行百度即可。开启ssl后,三个端口配置项必须一致,否则会报端口连接错误。

其次,在封装对象的过程中,from字段的值必须和配置的发件箱的发件人邮件地址保持一致,否则同样会报错。



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
springBoot整合发邮件
Spring Boot 发邮件和附件,超实用!
Spring Boot (十二): Spring Boot 邮件服务
Java技术:SpringBoot实现邮件发送功能
springboot(十):邮件服务
SpringBoot-09-异步、定时、 邮件
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服