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

文章讲述了在阿里云服务器上部署SpringBoot应用时遇到的邮件发送问题,包括25端口被封,切换至465端口,以及需要开启SSL以成功发送邮件的过程。最终通过修改配置和代码实现了邮件的正常发送。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

### 如何在阿里云ECS上部署Spring Boot应用程序 #### 准备工作 为了成功部署Spring Boot应用程序到阿里云弹性计算服务(Elastic Compute Service, ECS),需确保已具备如下条件: - 注册并登录阿里云账户,完成实名认证。 - 创建一台ECS实例,并配置安全组规则允许HTTP/HTTPS流量通过[^3]。 #### 安装必要的软件环境 由于Spring Boot项目默认集成了嵌入式的Tomcat容器作为Web服务器,因此无需单独安装Tomcat。但是,必须确认目标机器已经正确安装了适合应用运行的JDK版本[^2]。对于Linux系统而言,还需考虑安装Nginx来处理静态资源请求以及反向代理转发至内嵌Tomcat端口上的Spring Boot应用。 ```bash sudo apt update && sudo apt install openjdk-17-jdk nginx -y # 假设使用Ubuntu发行版为例 java -version # 检查JDK是否安装成功 ``` #### 构建与上传Spring Boot程序包 构建可执行jar文件前,请先保证本地开发环境中能够正常编译和测试该工程。之后利用Maven或Gradle工具链生成最终制品,再借助SCP/SFTP等方式将其传输给远端主机。 假设当前目录下存在名为`spring-boot-demo.jar`的应用包,则可以通过以下方式启动它: ```bash nohup java -jar spring-boot-demo.jar & ``` 上述命令会在后台持续运行指定的Jar包,并将日志输出保存于同级路径下的`nohup.out`文件之中以便后续排查问题之用。 #### Nginx配置调整 编辑位于/etc/nginx/sites-available/default中的站点配置文档,添加针对特定域名或者IP地址指向内部8080端口(即Spring Boot默认监听位置)的相关设置项;最后重启Nginx使更改生效。 ```nginx server { listen 80; server_name your_domain_or_ip; location / { proxy_pass http://localhost:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` #### 测试访问效果 当一切准备就绪后,尝试打开浏览器输入对应的公网URL查看网页加载情况。如果顺利的话应该可以看到由Spring Boot渲染出来的欢迎界面或者其他自定义内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值