SpringBoot·发送邮件
发送邮件服务
**注:**使用maven自己定义的项目时thymeleaf 路径下html文件会找不到,使用idea新建spring项目解决此问题。(神奇·真狗
)
- 加入依赖spring-boot-starter-mail
- 配置邮件发送服务-申请邮箱发送的授权码(以QQ为例: 在设置中找到开启服务-生成授权码)
- 发送简单文本邮件(JavaMailSender组件)
- 发送带附件的邮件: 包括图片、文档等(JavaMailSender组件)
- 加入thymelea模板,用于发送带模板的邮件(JavaMailSender组件)
get请求 参数使用
@RequestMapping(value = "/mai", method = RequestMethod.GET)
post请求 consumes参数使用
@RequestMapping(value = "/upmai", method = RequestMethod.POST, consumes="application/json")
或
@RequestMapping(value = "/upmail", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
<!--email-->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>2.1.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>1.5.7.RELEASE</version>
</dependency>
<!--druid 使spring-jdbc.xml数据源配置生效 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.16</version>
</dependency>
<!--谷歌定义的map集合依赖-->
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>19.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
<version>1.3.3.RELEASE</version>
</dependency>
</dependencies>
<build>
<!--spring boot打包插件-->
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.6</version>
</plugin>
</plugins>
<!--资源目录配置-->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
Map<String,Object> resMap= Maps.newHashMap(); // 谷歌浏览器的map解释器
// Map<String,Object> mpp = new HashMap<>();
mpp.put("st",st);
application.properties 文件配置信息
#mybatis.type-aliases-package=com.debug.steadyjack.entity
mybatis.mapper-locations=classpath:mappers/*.xml
#视图解析器
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
#发送邮件服务配置
spring.mail.host=smtp.qq.com
spring.mail.username=**@qq.com
#你的qq账号授权码
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.properties.mail.debug=true
定义发送邮件所需要的方法
@Component
public class Mailservice {
@Autowired
JavaMailSender javaMailSender;
// 发送普通邮件方法
public void sendSimpleMail(String from,String to,String cc,String subject,String content){
SimpleMailMessage simpMag = new SimpleMailMessage();
simpMag.setFrom(from); // 发送人
simpMag.setTo(to); // 抄送人
simpMag.setCc(cc); // 接收人
simpMag.setSubject(subject); // 邮件主题
simpMag.setText(content); // 邮件内容
javaMailSender.send(simpMag);
}
// 发送带附件邮件
public void sendSimpleMailFile(String from, String to, String cc, String subject, String text, File file) {
try{
MimeMessage message =javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setCc(cc);
helper.setSubject(subject);
helper.setText(text);
helper.addAttachment(file.getName(),file);
javaMailSender.send(message);
}catch(MessagingException e)
{
e.printStackTrace();
}
}
// 发送带模板的邮件 需要的添加thymeleaf依赖
public void sendSimpleMailview(String from, String to, String cc, String subject, String content) {
try{
MimeMessage message =javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setCc(cc);
helper.setSubject(subject);
helper.setText(content,true);
javaMailSender.send(message);
}catch(MessagingException e)
{
System.out.println("发送失败");
// e.printStackTrace();
}
}
}
定义一个实体类用于接受发送邮件的收件人和邮件内容
@Data // 自动生成get、set方法
@ToString // 自动生成toString方法
public class MailMap {
String from;
String to;
String cc;
String subject;
String text;
String simpMag;
String file;
}
发送邮件
@RestController
public class SendmailApplicationTests {
@Autowired
Mailservice mailservice;
@RequestMapping(value="/mail",method= RequestMethod.GET)
public void sendSimpleMail(){
mailservice.sendSimpleMail(
"@qq.com" // 发送人
,"@sina.com" // 抄送人
,"@sina.com" // 接受人
,"紫依枫" // 主题
,"世界大门打开" // 内容
);
}
@RequestMapping(value = "/upmail", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public String upmail(@RequestBody MailMap mail) throws Exception {
mailservice.sendSimpleMail(
mail.getFrom() // 发送人
,mail.getTo() // 抄送人
,mail.getCc() // 接受人
,mail.getSubject() // 主题
,mail.getText() // 内容
);
return "发送成功";
}
@ResponseBody
@RequestMapping(value = "/upmail2", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
// 发送带附件的邮件
public String upmail2(@RequestBody MailMap mail) throws Exception {
mailservice.sendSimpleMailFile(
"@qq.com" // 发送人
,"@sina.com" // 抄送人
,"@sina.com" // 接受人
,"紫依枫" // 主题
,"世界大门打开" // 内容
,new File("C:\\Users\\ldd709\\Desktop\\study\\大聪明.txt")
);
return "发送成功";
}
@ResponseBody
@RequestMapping(value = "/upmail3", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
public String upmail3(@RequestBody MailMap mail) throws Exception {
mailservice.sendSimpleMailFile(
mail.getFrom() // 发送人
,mail.getTo()// 抄送人
,mail.getCc() // 接受人
,mail.getSubject() // 主题
,mail.getText() // 内容
,new File("C:\\Users\\ldd709\\Desktop\\study\\大聪明.txt")
);
return "发送成功";
}
@Autowired
TemplateEngine templateEngine;
@ResponseBody
@RequestMapping(value = "/upmail4", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
发送带html模板的邮件
public String upmail4(@RequestBody MailMap mailf) {
Context ctx = new Context();
ctx.setVariable("username","sang");
ctx.setVariable("gender","男");
String mail = templateEngine.process("mailtemplate",ctx);
mailservice.sendSimpleMailview(
"@qq.com" // 发送人
,"@sina.com" // 抄送人
,"@sina.com" // 接受人
,"紫依枫" // 主题
,mail // 内容
);
return "发送成功4";
}
}
邮件模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"><meta>
<title>邮件</title>
</head>
<body>
<div>邮箱激活</div>
<div>你的注册信息
<tr>
<td>用户名</td>
<td th:text="${username}"></td>
</tr>
<tr>
<td>用户性别</td>
<td th:text="${gender}"></td>
</tr>
</div>
<div>
<a href="http://www.baidu.com">核对无误点击本链接激活邮箱</a>
</div>
</body>
</html>
使用ApiPost6测试工具测试
{
"from":"@qq.com"
,"to":"@qq.com"
,"cc":"@sina.com"
,"subject":"紫依枫&iy"
,"text":"超神了"
}