首先,新建一个Spring Boot项目,引入邮件依赖:
<!--邮件依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
这里有第一个坑,这个依赖引入尽量放在依赖的第一个,否则容易报红提示找不到该依赖。
第二步在application.properties中设置邮件参数:
spring.mail.host=smtp.163.com #邮箱服务器地址 这里用的是163邮箱 根据实际使用的邮箱更改
spring.mail.username=发送者邮箱地址
spring.mail.password= 这里填的是邮箱的授权码
spring.mail.default-encoding=UTF-8
mail.fromMail.addr=发送者邮箱地址
这里注意第二个坑,设置spring.mail.username和mail.fromMail.addr后面不要有多余的空格或注释,否则会报错:
Could not parse mail; nested exception is javax.mail.internet.AddressException: Domain contains control or whitespace in string ``18753377091@163.com //以è°æ¥å‘é€é‚®ä»¶''
还有最好不要在参数结尾写注释,容易出错,注释最好写在前一行。
第三个坑就是 spring.mail.password 参数填的是邮箱的授权码而不是邮箱的密码,否则会报认证失败的错误:
Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 Error: authentication failed
第三步写邮件的服务类:
package com.example.demo;
public interface MailService {
/**
* 发送简单邮件
* @param to 邮件接收者
* @param subject 邮件主题
* @param content 邮件内容
*/
public void sendSimpleMail(String to, String subject, String content);
/**
* 发送网页邮件
* @param to 邮件接收者
* @param subject 邮件主题
* @param content 邮件内容
*/
public void sendHtmlMail(String to, String subject, String content);
}
第四步写邮件服务实现类:
package com.example.demo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.stereotype.Component;
/**
* @ClassName: MailServiceImp
* @Description: TODO
* @Author: luochangzhang
* @Date: 2019/7/9 16:03
* @Version 1.0
*/
@Component
public class MailServiceImp implements MailService {
/**
* log打印
*/
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 邮件发送Sender(框架自带)
*/
@Autowired
private JavaMailSender mailSender;
/**
* 邮件发送者
*/
@Value("${mail.fromMail.addr}")
private String from;
@Override
public void sendSimpleMail(String to, String subject, String content) {
//简单邮件发送
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(from);
message.setTo(to);
message.setSubject(subject);
message.setText(content);
try {
mailSender.send(message);
logger.info("简单邮件已经发送。.........................");
} catch (Exception e) {
logger.error("发送简单邮件时发生异常!", e);
}
}
@Override
public void sendHtmlMail(String to, String subject, String content) {
}
}
最后写测试类:
package com.example.controller;
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;
@RunWith(SpringRunner.class)
@SpringBootTest
public class WebApplicationTests {
/**
* 邮件发送服务实现类
*/
@Autowired
private com.example.demo.MailService MailService;
@Test
public void testSimpleMail() throws Exception {
//发送邮件
MailService.sendSimpleMail("接收者邮箱地址","测试邮件","这是一封测试邮件的内容");
}
}
运行一下,发送成功的话可以登录邮箱查看邮件: