1、准备工作
首先需要准备一个可以正常发送邮件的邮箱,以我自己用的网易邮箱为例,先要获取授权码,接下来是获取授权码的步骤:
接下来开启服务,会提示发送短信验证,验证通过后会得到一个授权码,这个是配置文件中需要配置的。
2、引入邮件发送依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
3、配置文件
spring:
mail:
# 邮件服务地址
host: smtp.163.com
# 端口,可不写默认
port: 465
# 编码格式
default-encoding: utf-8
# 用户名
username: xxx@163.com
# 授权码,刚才准备工作获取的代码
password: xxx
# 其它参数
properties:
mail:
smtp:
# 如果是用 SSL 方式,需要配置如下属性,使用qq邮箱的话需要开启
ssl:
enable: true
required: true
# 邮件接收时间的限制,单位毫秒
timeout: 10000
# 连接时间的限制,单位毫秒
connectiontimeout: 10000
# 邮件发送时间的限制,单位毫秒
writetimeout: 10000
4、邮件发送工具类
@Component
public class MailService {
private static final Logger logger = LoggerFactory.getLogger(MailService.class);
@Resource
private JavaMailSender mailSender;
@Value("${spring.mail.username}")
private String sender;
/**
* 发送普通邮件
* @param to 收件人
* @param subject 主题
* @param content 内容
*/
public void sendSimpleMail(String to, String subject, String content) {
SimpleMailMessage mailMessage = new SimpleMailMessage();
mailMessage.setFrom(sender);
mailMessage.setTo(to);
mailMessage.setSubject(subject);
mailMessage.setText(content);
mailSender.send(mailMessage);
logger.info("发送成功!");
}
/**
* 发送 html 邮件
* @param to 收件人
* @param subject 主题
* @param content 内容
* @throws MessagingException
*/
public void sendHtmlMail(String to,String subject,String content) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
//true表示需要创建一个multipart message
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
messageHelper.setFrom(sender);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(content,true);
mailSender.send(mimeMessage);
logger.info("发送成功!");
}
/**
* 发送带附件的邮件
* @param to 收件人
* @param subject 主题
* @param content 内容
* @param filePath 附近路径
* @throws MessagingException
*/
public void sendAttachmentsMail(String to, String subject, String content, String filePath) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
//true表示需要创建一个multipart message
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
messageHelper.setFrom(sender);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(content,true);
FileSystemResource resource = new FileSystemResource(new File(filePath));
String filename = resource.getFilename();
messageHelper.addAttachment(filename,resource);
mailSender.send(mimeMessage);
logger.info("发送成功!");
}
/**
* 发送带静态文件的邮件
* @param to 收件人
* @param subject 主题
* @param content 内容
* @param picMap 需要替换的静态文件
*/
public void sendPicMail(String to, String subject, String content, Map<String,String> picMap) throws MessagingException {
MimeMessage mimeMessage = mailSender.createMimeMessage();
//true表示需要创建一个multipart message
MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true);
messageHelper.setFrom(sender);
messageHelper.setTo(to);
messageHelper.setSubject(subject);
messageHelper.setText(content,true);
for (Map.Entry<String, String> entry : picMap.entrySet()) {
FileSystemResource resource = new FileSystemResource(new File(entry.getValue()));
messageHelper.addInline(entry.getKey(),resource);
}
mailSender.send(mimeMessage);
logger.info("发送成功!");
}
}
5、编写测试类
@RunWith(SpringRunner.class)
@SpringBootTest
class DemoApplicationTests {
@Resource
private MailService mailService;
private static final String to = "xxx@qq.com";
private static final String subject = "测试发送邮件";
private static final String content = "测试发送邮件";
@Test
void testSimple() {
mailService.sendSimpleMail(to,subject,content);
}
@Test
void testHtml() throws MessagingException {
String htmlStr = "<h1>test</h1>";
mailService.sendHtmlMail(to, subject, htmlStr);
}
@Test
void testAttachMail() throws Exception {
File file = ResourceUtils.getFile("classpath:1.txt");
String filePath = file.getAbsolutePath();
mailService.sendAttachmentsMail(to,subject,content,filePath);
}
@Test
void testPicMail() throws Exception{
String htmlStr = "<html><body>测试:图片1 <br> <img src='cid:pic1'/> <br>图片2 <br> <img src='cid:pic2'/></body></html>";
HashMap<String, String> map = new HashMap<>();
map.put("pic1",ResourceUtils.getFile("classpath:pic1.jpg").getAbsolutePath());
map.put("pic2",ResourceUtils.getFile("classpath:pic2.jpg").getAbsolutePath());
mailService.sendPicMail(to,subject,htmlStr,map);
}