1 依赖
引入spring mail的依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2 yml配置
配置邮件发送的属性:
spring:
mail:
host: smtp.qiye.163.com
default-encoding: utf-8
username: 123456@163.com
protocol: smtp
password: balabalabala
properties:
mail:
smtp:
auth: true
starttls:
enable: true
required: true
socketFactory:
class: javax.net.ssl.SSLSocketFactory
ssl:
enable: true
3 发送示例代码
发送的调用代码:
@Component
public class DummySender {
private JavaMailSender javaMailSender;
@Autowired
public void setMailSender(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
/**
* 发送多媒体邮件
* @throws Exception
*/
public void sendMimeEmail()throws Exception {
MimeMessage message = javaMailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo("123456@qq.com");
helper.setSubject("测试邮件");
helper.setFrom("123456@163.com");
helper.setText("测试发送附件!");
// 设置附件
FileSystemResource file = new FileSystemResource(new File("/path/to/test.pdf"));
helper.addAttachment("test.pdf", file);
javaMailSender.send(message);
}
/**
* 发送简单的邮件
* @throws Exception
*/
public void sendEmail() throws Exception {
SimpleMailMessage msg = new SimpleMailMessage();
msg.setSubject("测试邮件");
msg.setFrom("123456@163.com");
msg.setTo("123456@qq.com");
msg.setText(
"测试邮件100861");
try {
this.javaMailSender.send(msg);
} catch (MailException ex) {
// simply log it and go on...
ex.printStackTrace();
}
}
}
原理说明: spring boot的自动配置机制在发现class path有邮件的依赖时, 会自动根据spring.mail的属性配置, 注入JavaMailSender等相关的实例.
测试代码:
@SpringBootTest
class DummySenderTest {
@Autowired
private DummySender dummySender;
@Test
void should_send_a_mime_email() throws Exception{
dummySender.sendMimeEmail();
}
@Test
void should_send_a_simple_email() throws Exception{
dummySender.sendEmail();
}
}
4 注意事项
-
企业邮箱的smtp可能和个人邮箱的不同, 比如网易企业邮箱为smtp.qiye.163.com, 配置成smtp.163.com会导致认证失败, 无法发送.
-
一些邮箱需要开启ssl传输.