一.配置mail依赖
<!--发送邮件-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
二.在yml配置发送人信息
host和port参考下表对应关系,本文选择的是qq邮箱,password为qq发件人申请的qq授权码
邮箱类型 | 服务器地址 | 端口号 |
QQ邮箱 | smtp.qq.com | 465或587 |
sina邮箱 | smtp.sina.cn | 465或587 |
126邮箱 | smtp.126.com | 465或994 |
aliyun邮箱 | smtp.aliyun.com | 465或994 |
163邮箱 | smtp.163.com | 465或994 |
yeah邮箱 | smtp.yeah.net | 465或994 |
PS.QQ邮箱申请qq授权码流程
1>登录电脑qq邮箱
2>往下翻,开启pop3服务
3>通过验证获取授权码
三.Service层
(1)虚函数
public interface EmailService {
boolean send(String to,String title,String content);
}
(2)虚函数实现Impl
@Service
public class EmailServiceImpl implements EmailService {
private static final Logger logger = LoggerFactory.getLogger(EmailService.class);
// 引入Spring Mail依赖后,会自动装配到IOC容器
@Autowired(required = false)
private JavaMailSender javaMailSender;
//邮件发送者的qq邮箱
@Value("${spring.mail.username}")
private String MAIL_SENDER;
/**
*
* @param to 收件人邮箱
* @param title 邮件标题
* @param content 邮件正文
* @return
*/
@Override
public boolean send(String to,String title, String content) {
boolean flag=false;
MimeMessage message =javaMailSender.createMimeMessage();
//判断邮件发送信息是否为空
Assert.notNull(MAIL_SENDER,"发送人信息不能为空");
Assert.notNull(to, "收件人信息不能为空");
Assert.notNull(title, "邮件主题不能为空");
Assert.notNull(content, "邮件正文不能为空");
try {
MimeMessageHelper helper = new MimeMessageHelper(message,true);
//邮件发件人
helper.setFrom(MAIL_SENDER);
//邮件收件人 1或多个
helper.setTo(to);
//邮件主题
helper.setSubject(title);
//邮件内容
helper.setText(content,true);
//邮件发送时间
helper.setSentDate(new Date());
//发送邮件
javaMailSender.send(message);
flag=true;
logger.info("发送邮件成功:{}->{}",MAIL_SENDER,to);
} catch (MessagingException e) {
logger.error("发送邮件时发生异常!",e);
}
return flag;
}
}
四.Controller层
@RestController
public class EmailController {
//注入email配置信息实体类
@Autowired
private EmailService emailService;
@RequestMapping("/send")
public Boolean send(){
//收件人信息
String to="收件人的qq邮箱@qq.com";
//邮件标题
String title="发送邮件测试";
//邮件内容
String content="努力挣钱,加油学习!!!!!!";
//发送
boolean flag=emailService.send(to,title,content);
return flag;
}
}
五.浏览器调用
输入自己本地设置的地址调用接口