使用spring-boot-starter-mail发送邮件
参考书:
- 《Spring boot从零开始学》郭浩然 清华大学出版社
POM配置
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
application.properties配置(以QQ邮箱为例)
spring.mail.host=smtp.qq.com
spring.mail.port=587
spring.mail.username=24123412@qq.com
spring.mail.password=shdvu6sasdsjys
注意上方port和协议要对应,不一定是587
username是你的邮箱账户,密码这里强调一下,这里用的是授权码
电脑端打开,找到设置——账户,之后找到这里
好,很棒,我拿不到我的QQ邮箱授权码。好尴尬
我以网易邮箱来
网易邮箱用25端口设置是ok的,密码还是尽量用授权码,不要用账户密码。获取授权码方式都差不多。25端口是非SSL加密的,用994和465是SSL加密的,我这里会报以greeting之类的错误,我没时间研究了。所以只用25端口
写邮件相关的java文件
这里其实只要让Application那个文件在最外层,就OK,所以我是这么建的,
把MailService.java放在一个services包在里面
这是MailService.java的具体内容
@Service
public class MailService {
@Value("${spring.mail.username}")
private String fromAddress;
@Autowired
private MailSender mailSender;
public String sendMail(String toAddress, String subject, String content) {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom(fromAddress);
message.setTo(toAddress);
message.setSubject(subject);
message.setText(content);
try {
this.mailSender.send(message);
return "success";
}catch (MailException e) {
e.printStackTrace();
return "fail";
}
}
}
这里这个自动装配的问题,只要你文件层级没什么毛病,可以忽略,我一下子想不明白为什么,所以我这里没有处理,邮件还是可以发送的,终端也没有报错。如果有前辈知道,可以发一下,谢谢啦。
接下来就是测试文件了
//这邮箱就是收件人邮箱
@Test
void testSendMail() {
String sendTo = "nosjdhvdsv@gmail.com";
String subject = "这是测试邮件的主题";
String content = "这是测试内容";
mailService.sendMail(sendTo, subject, content);
System.out.println("邮件发送完成");
}
}
效果如下
终端显示很多,但都没有红,没红就是没有错,有错我也没看见。
经典的错误:
- 端口号问题。
- 密码问题。QQ邮箱就不允许你用账户密码在第三方上登录,只能用授权码,这个授权码,我打开居然是白的,不给我验证,我吐了。只能弃暗投明,改用网易邮箱来。
- 文件层级的问题。application.java请务必放到和controller、services、job等软件包外面。
- application.properties这里配置也要记得