java 发送邮件_javaMailSender发送邮件

javaMailSender发送邮件

b4984fc3f364f2e02990ba721f5dca64.png

应用场景

在一些项目中,可能要用到报警提醒。常见的报警提醒有发送短信和发送邮件,由于发送短信需要对接第三方api且需要付费,这篇文章将介绍如何使用java实现发送邮件,包括发送普通文本邮件、普通html格式的邮件、配置模板的html格式邮件。

技术说明

Jdk8

Springboot 2.2.2.RELEASE

spring-boot-starter-mail

spring-boot-starter-thymeleaf,springboot 2.x版本后不再支持velcity模板

示例代码:

https://gitee.com/firechou/demo-group.git

开启邮箱的smtp功能

以QQ邮箱为例:

》登录qq邮箱

》设置

》账户

》开启"POP3/SMTP服务"

》点击下方的"生成授权码"

》短信验证后即可得到一个授权码,该授权码可以生成多次,多个授权码可以同时使用,更改邮箱密码后之前生成的所有授权码失效。

POP3和IMAP的区别?

如果只是通过java发送邮件,开通POP3服务即可;

POP3允许客户端下载邮件服务器上的邮件,但是在邮件客户端对该邮件的所有操作不会反馈到邮件服务器上。比如,在foxmail上你将邮件归档到一个文件夹,在QQ邮箱是不会体现该归档操作的。如果你使用的是IMAP协议,则该归档操作是会反馈到邮箱服务器的,IMAP是双向的。

详细可参考说明:https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=331

示例代码

项目结构

cb1d738918ca825e0af712e34789d6d6.png

Pom.xml

<?xml version="1.0" encoding="UTF-8"?>4.0.0org.springframework.boot spring-boot-starter-parent 2.2.2.RELEASEcom.firechou.demo demo-mail 0.0.1-SNAPSHOTdemo-mailDemo project for Spring Boot1.8org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test testorg.junit.vintage junit-vintage-engine org.springframework.boot spring-boot-starter-mail org.springframework.boot spring-boot-starter-thymeleaf org.springframework.boot spring-boot-maven-plugin 

Application.properties配置文件

spring.mail.host=smtp.qq.com## 发送方的邮箱spring.mail.username=xxx@qq.com## 对于qq邮箱而言,密码指的是发送方的授权码spring.mail.password=xxxspring.mail.properties.mail.smtp.auth=truespring.mail.properties.mail.smtp.starttls.enable=truespring.mail.properties.mail.smtp.starttls.required=true## thymeleaf配置spring.thymeleaf.cache=falsespring.thymeleaf.prefix=classpath:/template/spring.thymeleaf.suffix=.htmlspring.thymeleaf.encoding=utf-8# 收件人,测试mail.to.username=xxx@qq.com

测试代码

package com.firechou.demo.demomail;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.mail.SimpleMailMessage;import org.springframework.mail.javamail.JavaMailSender;import org.springframework.mail.javamail.MimeMessageHelper;import org.thymeleaf.TemplateEngine;import org.thymeleaf.context.Context;import javax.mail.MessagingException;import javax.mail.internet.MimeMessage;import java.util.HashMap;import java.util.Map;@SpringBootTestclass DemoMailApplicationTests { @Autowired private JavaMailSender javaMailSender; @Value("${spring.mail.username}") private String fromUserName; @Value("${mail.to.username}") private String toUserName; @Autowired private TemplateEngine templateEngine; /** * 发送普通文本邮件 */ @Test void sendByText() { SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(fromUserName); message.setTo(toUserName); message.setSubject("观影调查"); message.setText("你觉得庆余年好看吗?"); javaMailSender.send(message); } /** * 发送html格式邮件 * * @throws MessagingException */ @Test void sendByHtml() throws MessagingException { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(fromUserName); helper.setTo(toUserName); helper.setSubject("测试标题"); StringBuffer sb = new StringBuffer(); sb.append("

大标题-h1

") .append("

红色字

") .append("

右对齐

"); helper.setText(sb.toString(), true); javaMailSender.send(message); } /** * 发送模板文件,在resources资源文件夹下配置模板文件 * * @throws MessagingException */ @Test void sendByTemplate() throws MessagingException { MimeMessage message = javaMailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(fromUserName); helper.setTo(toUserName); helper.setSubject("测试标题"); HashMap dataMap = new HashMap<>(); dataMap.put("title", "模板测试"); dataMap.put("context", "这是内容"); String text = createTemplate(dataMap, "emailTemplate.html", templateEngine); helper.setText(text, true); javaMailSender.send(message); } /** * 创建模板字符串 * @param dataMap * @param templateName * @param templateEngine * @return */ private static String createTemplate(Map dataMap, String templateName, TemplateEngine templateEngine) { // context对象用于注入要在模板上渲染的信息 Context context = new Context(); context.setVariables(dataMap); String emailText = templateEngine.process(templateName, context); System.out.println(emailText); // 返回模板源代码String类型 return emailText; }}

测试结果

4af2403508db1164f07f94e64eff6b8b.png
f8aa89353d3055271538baabeef2f81f.png
23e14369ee34e40f248e2354a5a9c987.png
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页