SpringBoot 邮件发送功能
1.导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2.配置yml文件
spring:
mail:
host: smtp.qq.com #qq邮箱的免费stmp
username: #你的邮箱名
password: #开启你邮箱的SMTP功能的授权码,不是邮箱密码
properties:
mail:
smtp:
auth: true #需要验证登录名和密码
starttls:
enable: true #需要TLS认证 保证发送邮件安全验证
required: true
3.java代码部分
(1)发送一封简单的邮件
@Service
public class MailService {
@Autowired
private JavaMailSender mailSender;
@Value("${spring.mail.username}") //配置文件中发送方邮箱地址
private String formMail;
public void sendSimpleMail(String toMail,String subject,String content) {
SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
simpleMailMessage.setFrom(formMail); //发送方邮箱地址
simpleMailMessage.setTo(toMail); //接收方的邮箱地址
simpleMailMessage.setSubject(subject); //主题名称
simpleMailMessage.setText(content); //邮件内容
mailSender.send(simpleMailMessage);
}
}
(2)发送一封html邮件
public void sendHtmlMail(String toMail,String subject,String content) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
//利用helper实现功能扩展,true表示需要创建一个multipart message
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setFrom(formMail);
mimeMessageHelper.setTo(toMail);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(content,true);
mailSender.send(mimeMessage);
}
(3)发送一封带图片的邮件
准备的图片实体类
package com.example.demo.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
@Data
@AllArgsConstructor
public class InlineResource {
private String cid;
private String path;
}
发送一封带图片的邮件
public void sendImageMail(String toMail,String subject,String content,List<InlineResource> resources) throws MessagingException, FileNotFoundException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
//true表示需要创建一个multipart message
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setFrom(formMail);
mimeMessageHelper.setTo(toMail);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(content,true);
for (InlineResource inlineResource : resources) {
FileSystemResource res = new FileSystemResource(new File(inlineResource.getPath()));
mimeMessageHelper.addInline(inlineResource.getCid(), res);
}
mailSender.send(mimeMessage);
}
(4)发送一封带附件的邮件
public void sendAttachmentsMail(String toMail,String subject,String content,String filePath) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
mimeMessageHelper.setFrom(formMail);
mimeMessageHelper.setTo(toMail);
mimeMessageHelper.setSubject(subject);
mimeMessageHelper.setText(content,true);
FileSystemResource file = new FileSystemResource(new File(filePath));
String fileName = filePath.substring(filePath.lastIndexOf("\\"));
mimeMessageHelper.addAttachment(fileName, file);
mailSender.send(mimeMessage);
}
4.测试部分
(1)测试发送一封简单的邮件
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.service.MailService;
@SpringBootTest
class TracyStudyApplicationTests {
@Autowired
private MailService mailService;
@Test
void contextLoads() {
System.out.println("testtest");
}
@Test
public void sendSimpleMail() {
mailService.sendSimpleMail("562010233@qq.com", "这是一个测试邮件", "这是一个测试邮件");
}
}
(2)测试发送一封html邮件
@Test
public void sendHtmlMail() throws MessagingException {
String html = "<!DOCTYPE html>\r\n" +
"<html>\r\n" +
"<head>\r\n" +
"<meta charset=\"UTF-8\">\r\n" +
"<title>Insert title here</title>\r\n" +
"</head>\r\n" +
"<body>\r\n" +
" <font color=\"red\">发送html</font>\r\n" +
"</body>\r\n" +
"</html>";
mailService.sendHtmlMail("562010233@qq.com", "这是一个测试邮件", html);
}
(3)测试发送一封带图片的邮件
@Test
public void sendImageMail() throws FileNotFoundException, MessagingException {
String html = "<!DOCTYPE html>\r\n" +
"<html>\r\n" +
"<head>\r\n" +
"<meta charset=\"UTF-8\">\r\n" +
"<title>Insert title here</title>\r\n" +
"</head>\r\n" +
"<body>\r\n" +
" <font color=\"red\">发送html</font>\r\n" +
" <img src=\"cid:image1\"/>"+
"</body>\r\n" +
"</html>";
List<InlineResource> list = new ArrayList<InlineResource>();
String path = "C:\\Users\\351af8f23285feaf20c4120679d5d46d_hd.jpg";
InlineResource resource = new InlineResource("image1", path);
list.add(resource);
mailService.sendImageMail("562010233@qq.com", "这是一个测试邮件", html, list);
}
(4)测试发送一封带附件的邮件
@Test
public void sendAttachmentsMail() throws MessagingException {
String html= "<!DOCTYPE html>\r\n" +
"<html>\r\n" +
"<head>\r\n" +
"<meta charset=\"UTF-8\">\r\n" +
"<title>Insert title here</title>\r\n" +
"</head>\r\n" +
"<body>\r\n" +
" <font color=\"red\">发送html</font>\r\n" +
"</body>\r\n" +
"</html>";
String path = "C:\\Users\\351af8f23285feaf20c4120679d5d46d_hd.jpg";
mailService.sendAttachmentsMail("562010233@qq.com", "这是一个测试邮件", html, path);
}
5.bug总结部分
(1)报错:org.springframework.mail.MailAuthenticationException: Authentication failed
解决:发送方邮箱的smtp权限一定要开启;
配置文件中的密码并不是真实的邮箱密码,而是开启smtp权限的授权码
(2)报错:
———图片或者附件发送都变成了bin文件
——html变成了普通文件
解决:除了发送简单邮件外,都是使用MimeMessageHelper,进行数据绑定,创建时要设置true,绑定content参数的时候也要设置true