spring实现邮件任务(一)
1.添加邮件服务器依赖启动器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.添加邮件服务配置
properties文件的配置
#发件人邮箱服务器相关的配置
spring.mail.host=smtp.qq.com
spring.mail.port=587
#写上自己的QQ邮箱,密码,密码为授权码,需要我们进入自己的QQ邮箱
spring.mail.username=
spring.mail.password=
spring.mail.default-encoding=UTF-8
#邮件服务超时时间配置
spring.mail.properties.mail.smtp.connectiontimeout=5000
spring.mail.properties.mail.smtp.timeout=3000
spring.mail.properties.mail.smtp.writetimeout=5000
对于授权码的获取,操作如下,然后按照提示进行操作:
3.定制邮件发送服务
package com.example.demo.nine;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.stereotype.Service;
@Service
public class SendEmailService {
@Autowired
private JavaMailSenderImpl mailSender;
@Value("${spring.mail.username}")
private String from;
public void sendSimpleEmail(String to,String subject,String text) {
//定制纯文本邮件信息
SimpleMailMessage message=new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(text);
try {
mailSender.send(message);
System.out.println("纯文本邮件发送成功");
} catch (MailException e) {
// TODO Auto-generated catch block
System.out.println("纯文本邮件发送失败"+e.getMessage());
e.printStackTrace();
}
}
}
4.纯文本邮件发送效果测试并完成测试
在测试类下编写代码:
package com.example.demo;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import com.example.demo.nine.SendEmailService;
@SpringBootTest
class LayuistudyApplicationTests {
@Autowired
private SendEmailService sendEmailService;
@Test
void contextLoads() {
}
@Test
public void sendSimpleMailTest() {
//写上自己的QQ邮箱号码
String to="";
String subject="纯文本邮件标题";
String text="spring boot框架纯文本发送";
sendEmailService.sendSimpleEmail(to, subject, text);
}
}
spring邮件实现带附件和图片的邮件(二)
1.定制邮件发送服务
对于相关的配置请看我前一篇文章,里面有对properties,以及pom文件的配置
首先,创建一个类,然后写下如下代码
//recId静态资源唯一标识标志,rscPath表示静态资源存放位置
public void sendComplexEmail(String to,String subject,String text,String filePath,
String recId,String rscPath) {
//定制复杂邮件信息MimeMessage
MimeMessage message=mailSender.createMimeMessage();
try {
MimeMessageHelper helper=new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(text,true);
FileSystemResource res=new FileSystemResource(new File(rscPath));
//设置邮件内嵌静态资源
helper.addInline(recId,res);
//设置邮件附件
//通过文件系统获取资源
FileSystemResource file=new FileSystemResource(new File(filePath));
//substring(x)是从字符串的的第x个字符截取
//indexOf(String str): 返回指定字符str在字符串中(方法调用者)第一次出现处的起始索引,如果此字符串中没有这样的字符,则返回 -1。
//File.separator相当于文件分隔符
String fileName=filePath.substring(filePath.indexOf(File.separator));
helper.addAttachment(fileName, file);
//发送邮件
mailSender.send(message);
System.out.println("复杂邮件发送成功");
} catch (MessagingException e) {
// TODO Auto-generated catch block
System.out.println("复杂邮件发送失败"+e.getMessage());
e.printStackTrace();
}
}
2.复杂邮件发送效果
现在测试类进行编写代码,然后运行代码进行测试:
@Autowired
private SendEmailService sendEmailService;
@Test
public void sendComplexEmailTest() {
//自己的QQ邮箱号码
String to="";
String subject="复杂邮件标题";
//定义邮件内容
//StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的
//append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。
StringBuilder text=new StringBuilder();
text.append("<html><head><head>");
text.append("<body><h1>祝大家万事如意</h1>");
//cid为固定写法,rscId自定义的资源唯一标识
String rscId="img001";
text.append("<img src='cid:"+rscId+"'/></body>");
text.append("</html>");
//指定静态资源文件和附件路径
String rscPath="D:\\file\\hello.jpg";
String filePath="D:\\file\\hello.docx";
sendEmailService.sendComplexEmail(to, subject,text.toString(), filePath,rscId, rscPath);
}
运行结果
spring发送模板邮件(三)
1.添加Thymeleaf模板引擎依赖启动器
对于peoperties文件和pom文件的配置请参照第一篇文章
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
2.定制邮件模板,HTML文件命名为
<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8"/>
<title>用户验证码</title>
</head>
<body>
<div><span th:text="${username}">XXX</span> 先生/女士,您好:</div>
<P style="text-indent: 2em">您的新用户验证码为<span th:text="${code}" style="color: cornflowerblue">123456</span>,请妥善保管。</P>
</body>
</html>
3.定制邮件发送服务
创建一个类SendEmailService.java文件
@Autowired
private JavaMailSenderImpl mailSender;
@Value("${spring.mail.username}")
private String from;
//用于处理HTML内容
public void sendTemplateEmail(String to,String subject,String content) {
//复杂类型的邮件传送
MimeMessage message=mailSender.createMimeMessage();
try {
//使用帮助类,并配置multipart多部件使用为true
MimeMessageHelper helper=new MimeMessageHelper(message,true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content,true);
//发送邮件
mailSender.send(message);
System.out.println("模板邮件发送成功");
} catch (MessagingException e) {
// TODO Auto-generated catch block
System.out.println("邮件发送失败"+e.getMessage());
e.printStackTrace();
}
}
4.模板邮件发送效果测试
@Autowired
private SendEmailService sendEmailService;
@Autowired
private TemplateEngine templateEngine;
@Test
public void sendTemplateEmailTest() {
//写入自己的QQ邮箱号码
String to="xxxxxxxxqq.com";
String subject="程序员哈哈哈";
//使用模板邮件定制邮件正文内容
Context context=new Context();
context.setVariable("username", "小海子");
context.setVariable("code", "456321");
//使用TemplateEngine设置要处理的模板页面
//process第一个参数是解析的模板页面,第二个参数是页面的动态数据
String emailContent=templateEngine.process("emailTemplate_vercode", context);
sendEmailService.sendTemplateEmail(to, subject, emailContent);
}