记录阿里云服务器部署springboot邮件发送不了的问题

记录阿里云服务器部署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邮件发送不了的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值