pom.xml引入spring-boot-starter-mail
Spring Boot2.x集成了mail模块,在dependencies
引入这个
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.yml配置
spring:
mail:
# 163
host: smtp.163.com
port:
username: yimcarson@163.com
password: ************
protocol: smtp
default-encoding: UTF-8
properties:
mail.smtp.auth: true
mail.smtp.starttls.enable: true
mail.smtp.starttls.required: true
mail.smtp.socketFactory.port: 465
mail.smtp.socketFactory.class: javax.net.ssl.SSLSocketFactory
mail.smtp.socketFactory.fallback: false
其中spring.mail.host
spring.mail.port
spring.mail.username
spring.mail.password
不同邮箱的配置方法也不同
163邮箱
spring:
mail:
host: smtp.163.com
port:
username: yimcarson@163.com
password: ************
其中spring.mail.port
不指定;spring.mail.password
不是邮箱密码,需要登录mail.163.com
,前往设置
客户端授权密码
中获取的一个16个字符的密码,同时允许POP3/SMTP服务。
QQ邮箱
spring:
mail:
host: smtp.qq.com
port: 587
username: yimcarson@qq.com
password: ************
spring.mail.password
不是QQ密码,登录mail.qq.com
,前往设置
账户
POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
开启POP3/SMTP服务
获取一个16个字符的密码
Gmail邮箱
spring:
mail:
host: smtp.gmail.com
port: 465
username: yimcarson@gmail.com
password: ****************
spring.mail.password
是Gmail的密码,但是要前往Google账户的安全性较低的应用的访问权限中允许不安全应用。
发送邮件
这是一个验证码模版邮件
service实现类
import com.my.demo.project.service.MailService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.mail.javamail.MimeMessagePreparator;
import org.springframework.stereotype.Service;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
import java.util.UUID;
@Service
public class MailServiceImpl implements MailService {
@Autowired
private JavaMailSender mailSender;
/**
* 用来发送模版邮件
*/
@Autowired
private TemplateEngine templateEngine;
@Value("${spring.mail.username}")
private String from;
@Override
public void send(String to, String subject, String text) {
// SimpleMailMessage message = new SimpleMailMessage();
// message.setFrom(from);
// message.setTo(to);
// message.setSubject(subject);
// message.setText(text);
Context context = new Context();
context.setVariable("project", "demo");
context.setVariable("author", "yimcarson");
context.setVariable("code", text);
String emailContent = templateEngine.process("mail", context);
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = null;
try {
helper = new MimeMessageHelper(message, true);
helper.setFrom(from);
helper.setTo(to);
helper.setSubject(subject);
helper.setText(emailContent, true);
} catch (MessagingException e) {
e.printStackTrace();
}
mailSender.send(message);
}
}
templates模版
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>yimcarson</title>
<style>
body {
text-align: center;
margin-left: auto;
margin-right: auto;
}
#main {
text-align: center;
position: absolute;
}
</style>
</head>
<body>
<div id="main">
<h3>Welcome <span th:text="${project}"></span> -By <span th:text=" ${author}"></span></h3>
Your Verification Code is
<h2><span th:text="${code}"></span></h2>
</div>
</body>
</html>
测试
import com.my.demo.Application;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.TemplateEngine;
import java.util.Date;
import java.util.UUID;
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {Application.class})
public class MailServiceTest {
@Autowired
private MailService mailService;
@Test
public void testSend() {
String to = "yimcarson@qq.com";
mailService.send(to, "模板邮件", UUID.randomUUID().toString().toUpperCase());
}
}
结语
163
QQ
这两个邮箱比较常用,至于Gmail
……,如果服务器是阿里云香港或者国外、亚马逊这些的话可以正常使用,否则……,Couldn't connect to host, port: smtp.gmail.com, 465; timeout -1