准备工作
下面以 QQ 邮箱为例,其他的邮箱的配置也大同小异。
登录 QQ 邮箱,点击设置->账户,开启IMAP/SMTP服务,并生成授权码
一、创建项目并添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
二、编写邮件相关的配置文件
spring:
mail:
default-encoding: utf-8
host: smtp.qq.com
port: 465
username: xxxxxx@qq.com
# 这个是SMTP,而不是QQ密码
password: xxxxxx
protocol: smtps
properties:
mail:
smtp:
ssl:
enable: true
# 邮件接收时间的限制,单位毫秒
timeout: 10000
# 连接时间的限制,单位毫秒
connectiontimeout: 10000
# 邮件发送时间的限制,单位毫秒
writetimeout: 10000
三、编写邮件服务类
package com.mjg.service.impl;
import com.mjg.common.CallBack;
import com.mjg.service.MailService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
/**
* 邮件服务impl
*
* @author Administrator
* @date 2021/03/26
*/
@Service
@Slf4j
public class MailServiceImpl implements MailService {
@Resource
private JavaMailSender javaMailSender;
private static final String SENDER = "xxxxxxxxxx@qq.com";
@Override
public void sendMimeMessage(String to, String subject, String content, CallBack callBack) {
MimeMessage message = javaMailSender.createMimeMessage();
try {
//true表示需要创建一个multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setFrom(SENDER);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(content, true);
javaMailSender.send(message);
callBack.onResponse("send email success");
} catch (MessagingException e) {
callBack.onResponse("send email error");
e.printStackTrace();
}
}
/**
* 发送简单的邮件消息
*
* @param to 来
* @param subject 主题
* @param content 内容
*/
@Override
public void sendSimpleMailMessage(String to, String subject, String content, CallBack callBack) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(SENDER);
message.setTo(to);
message.setSubject(subject);
message.setText(content);
try {
javaMailSender.send(message);
callBack.onResponse("send email success");
} catch (MailException e) {
callBack.onResponse("send email error");
e.printStackTrace();
}
}
/**
* 发送附件信息
*
* @param file 文件
* @param callBack 回电话
*/
@Override
public void sendAttachmentMessage(String to, String subject, String content, File file, CallBack callBack) {
MimeMessage mimeMessage = javaMailSender.createMimeMessage();
try {
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
messageHelper.setFrom(SENDER);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(content, true);
messageHelper.addAttachment(file.getName(), file);
callBack.onResponse("send email success");
} catch (MessagingException e) {
callBack.onResponse("send email error");
e.printStackTrace();
}
}
}
四、编写测试类
package com.mjg;
import com.mjg.service.MailService;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import javax.annotation.Resource;
import java.io.File;
@SpringBootTest
class SpringbootEmailApplicationTests {
private static final String TO = "xxxxx@163.com";
private static final String SUBJECT = "测试邮件";
private static final String CONTENT = "test content ";
@Resource
MailService mailService;
@Test
void contextLoads() {
mailService.sendSimpleMailMessage(TO, SUBJECT, CONTENT, data -> {
System.out.println(data.toString());
});
}
/**
* 测试html邮件
*/
@Test
@DisplayName("测试html邮件")
public void testHtmlMail() {
String htmlStr = "<h1>Hello World mjg</h1>";
mailService.sendMimeMessage(TO, SUBJECT, htmlStr, System.out::println);
}
/**
* 测试发送附件信息
*/
@Test
public void testSendAttachmentMessage() {
File file = new File("C:\\Users\\Administrator\\Pictures\\my.jpg");
System.out.println(file.getName());
mailService.sendAttachmentMessage(TO, SUBJECT, CONTENT, file, System.out::println);
}
}