java 发送邮件_邮件发送服务 spring-boot-mail

演示图

2a2781195bf64e519b5c41e3335a1847
65db978311ec4a628d83e50baef4bda3

启动说明

  • 项目中RPC框架使用的是当当维护的DubboX,现在阿里已经处于维护状态中,请自行更新
  • 配置Dubbo需要安装注册中心zookeeper: http://www.52itstyle.top/thread-19791-1-1.html
  • 如果不想使用Dubbo和安装zookeeper,又想启动看下效果,请注释掉 Application 类中的@ImportResource({"classpath:spring-context-dubbo.xml"}), 同时由于接口扫描注解使用的是Dubbo的 com.alibaba.dubbo.config.annotation.Service; 请自行替换成spring的 org.springframework.stereotype.Service(废弃);
  • Sql文件位于src/main/resource/sql下,自行导入即可、里面有一条测试数据
  • API: http://localhost:8080/springboot_mail/swagger-ui.html、 可以自行测试发送邮件,前提是要修改application-dev.properties中的邮箱配置为自己可用的
  • 2018-10-25 原spring-context-dubbo.xml 配置 替换为 dubbo-spring-boot-starter 2.0.0
  • 执行 com.itstyle.mail.test.SpringbootMailApplication main 方法

流程图

平台架构

5660cbdc03b64f178d92b28a9e42e5c3

进程内邮件队列

9b39d87069534b53b21ae25270cf5f83

项目结构

├─src│ ├─main│ │ ├─java│ │ │ └─com│ │ │ └─itstyle│ │ │ └─mail│ │ │ │ Application.java│ │ │ │ │ │ │ ├─demo│ │ │ │ CountDownLatchDemo.java│ │ │ │ Ticket.java│ │ │ │ TicketRun.java│ │ │ │ │ │ │ ├─model│ │ │ │ Email.java│ │ │ │ │ │ │ ├─queue│ │ │ │ ConsumeMailQueue.java│ │ │ │ MailQueue.java│ │ │ │ │ │ │ ├─redis│ │ │ │ Receiver.java│ │ │ │ RedisConfig.java│ │ │ │ RedisListener.java│ │ │ │ │ │ │ ├─service│ │ │ │ │ IMailService.java│ │ │ │ │ │ │ │ │ └─impl│ │ │ │ MailServiceImpl.java│ │ │ │ │ │ │ ├─task│ │ │ │ SendMail.java│ │ │ │ │ │ │ └─util│ │ │ CommonUtil.java│ │ │ Constants.java│ │ │ MailUtil.java│ │ │ │ │ ├─resources│ │ │ │ application-dev.properties│ │ │ │ application-prod.properties│ │ │ │ application-test.properties│ │ │ │ application.yml│ │ │ │ spring-context-dubbo.xml│ │ │ │ spring-context-task.xml│ │ │ │ │ │ │ └─static│ │ │ ├─file│ │ │ │ 关注科帮网获取更多源码.zip│ │ │ │ │ │ │ ├─image│ │ │ │ springcloud.png│ │ │ │ │ │ │ └─template│ │ │ welcome.flt│ │ │ welcome.html│ │ │ │ │ └─webapp│ │ │ index.jsp│ │ │ │ │ └─WEB-INF│ │ web.xml│ │ │ └─test│ └─java│ └─com│ └─itstyle│ └─mail│ └─test│ SpringbootMailApplication.java
  • 普通文本发送
  • 富文本发送(图片、附件)
  • freeMarker模版发送邮件
  • thymeleaf模版发送邮件

评测生成模版时间对比(1000次循环)

  • Thymeleaf用时:2686ms
  • Freemarker用时:498ms

对比测试,建议使用Freemarker模版

application.properties中配置以下内容:

spring.mail.host=smtp.qq.comspring.mail.username=345849402@qq.com#授权码g,在QQ邮箱客户端生成 修改成自己的 设置-账户-开启服务-获取授权码spring.mail.password=XXXXXXXspring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=true#freemarkerspring.freemarker.template-loader-path=classpath:/static/template/spring.freemarker.enabled=truespring.freemarker.cache=falsespring.freemarker.charset=UTF-8spring.freemarker.content-type=text/htmlspring.freemarker.allow-request-override=falsespring.freemarker.check-template-location=truespring.freemarker.expose-request-attributes=falsespring.freemarker.expose-session-attributes=falsespring.freemarker.expose-spring-macro-helpers=false#thymeleafspring.thymeleaf.prefix=classpath:/static/template/spring.thymeleaf.suffix=.htmlspring.thymeleaf.mode=HTML5spring.thymeleaf.encoding=UTF-8spring.thymeleaf.content-type=text/html spring.thymeleaf.cache=false

封装实体

首先我们,封装一个Email实体Email.java:

/** * Email封装类  * 创建者 科帮网  * 创建时间 2017年7月20日 * */public class Email implements Serializable { private static final long serialVersionUID = 1L; //必填参数 private String email;//接收方邮件 private String subject;//主题 private String content;//邮件内容 //选填 private String template;//模板 private HashMap kvMap;// 自定义参数 ... 省略 get set

业务实现

既然用了spring,就按照spring的方式来,先定义一个接口IMailService,接着是实现MailServiceImpl。

以下代码,实现了四种方式:纯文本,富文本(图片,附件),Freemarker模版以及Thymeleaf模版。

这里需要注意的是,springboot 1.4.0以后 Velocity 废弃了,官方建议用freemaker。而thymeleaf是博主自己实现的,显然效率没有freemaker高(评测对比见文章底部)。

@Servicepublic class MailServiceImpl implements IMailService { @Autowired private JavaMailSender mailSender;//执行者 @Autowired public Configuration configuration;//freemarker @Autowired private SpringTemplateEngine templateEngine;//thymeleaf @Value("${spring.mail.username}") public String USER_NAME;//发送者 @Override public void send(Email mail) throws Exception { MailUtil mailUtil = new MailUtil(); SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(USER_NAME); message.setTo(mail.getEmail()); message.setSubject(mail.getSubject()); message.setText(mail.getContent()); mailUtil.start(mailSender, message); } @Override public void sendHtml(Email mail) throws Exception { MailUtil mailUtil = new MailUtil(); MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(USER_NAME); helper.setTo(mail.getEmail()); helper.setSubject(mail.getSubject()); helper.setText( "
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值