记录阿里云服务器部署springboot邮件发送不了的问题
项目中需要服务器端能发送邮件通知给相关人员的功能。
初步查了下资料,比较简单
首先在163邮箱的设置里开启pop3/smtp服务。 开启完后会得到一个密码,保存这个密码后面会用到。
然后在springboot工程中的.properties文件中添加下面相关配置
spring.mail.host=smtp.163.com
spring.mail.username=xxxx@163.com
# 设置密码,该处的密码是163邮箱开启SMTP的授权码而非163密码
spring.mail.password=上面保存的密码
# 设置是否需要认证,如果为true,那么用户名和密码就必须的,
# 如果设置false,可以不设置用户名和密码,当然也得看你的对接的平台是否支持无密码进行访问的。
spring.mail.properties.mail.smtp.auth=true
# STARTTLS[1] 是对纯文本通信协议的扩展。它提供一种方式将纯文本连接升级为加密连接(TLS或SSL),而不是另外使用一个端口作加密通信。
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
mail.from=xxx@163.com
mail.to=xxx@163.com
代码如下:
@Autowired
private JavaMailSender javaMailSender;
@Value("${mail.from}")
String mailFrom;
@Value("${mail.to}")
String mailTo;
@PostMapping("sendTest")
Object sendTest() {
SimpleMailMessage mailMessage = new SimpleMailMessage();
try {
mailMessage.setFrom(new InternetAddress(mailFrom).toString());
mailMessage.setTo(new InternetAddress(mailTo).toString());
} catch (AddressException e) {
e.printStackTrace();
}
mailMessage.setSubject("测试");
mailMessage.setText("测试");
javaMailSender.send(mailMessage);
return ErrorCode.SUCCESS;
}
本地调试运行,使用vscode中的restclient插件模拟请求。
POST http://localhost:8080/sendTest HTTP/1.1
content-type: application/json
{
}
顺利收到邮件。过程很是顺利,心中窃喜。
然后准备部署到阿里云服务器的测试环境试下。
结果模拟http请求时失败了,看了看nginx的代理配置确认没有问题。
然后去看springboot的日志,结果发现连接smtp.163.com 连接失败。
telnet smtp.163.com 25 确实连接不上。
挠头…
百度了下,原来阿里云默认把25端口封了,只能用465
遂加上端口配置
spring.mail.port=465
运行测试,还是不行,连接是通的,但请求返回出错。
仔细看了下日志发现ssl没有开, 尝试下打开ssl看能不能解决。
结果发现没有开启ssl的配置
网上查了下,原来需要在代码里设置,好吧,又要改代码。
// 换成使用JavaMailSenderImpl 这个类
JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl();
javaMailSender.setHost(mailHost);
javaMailSender.setUsername(mailUsername);
javaMailSender.setPassword(mailPwd);
javaMailSender.setDefaultEncoding(StandardCharsets.UTF_8.name());
javaMailSender.setPort(mailPort);
// 关键就是这块,开启ssl
Properties properties = new Properties();
properties.put("mail.smtp.ssl.enable", true);
javaMailSender.setJavaMailProperties(properties);
本地调试运行,果然可以发送,部署到阿里云,也可以发送了。
为何总是那么的不顺利。
版权声明:本文为凸然网站的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:记录阿里云服务器部署springboot邮件发送不了的问题