java - 如何解决 AWS Elastic Beanstalk 中的 SMTP 连接超时异常?
问题描述
我已经使用 Elastic Beanstalk 在 EC2 实例中部署了 springboot java jar。将用户添加到 DB 后 jar 中的 api 发送确认邮件。此功能在 localhost 中运行良好,但是在 aws 实例上,我收到网关超时 504。
这是 SMTP 服务器的设置(它是不使用用户名、密码的智能服务器,我在服务器中添加了我的 EC2 实例的公共 IP 地址) Java SMTP 设置:
String host = "212.48.*.*";
Properties props = new Properties();
props.put("mail.smtp.ssl.trust", "false");
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.starttls.enable", "false");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", "25");
Session session = Session.getInstance(props);
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(receiverMail));
Transport.send(message);
==================================================== === 错误消息: 2020-04-13 20:56:45.521 错误 5887 --- [nio-5000-exec-2] oaccC[.[.[/].[dispatcherServlet]:Servlet.service() 用于 servlet [dispatcherServlet] 在路径 [] 的上下文中抛出异常 [请求处理失败;嵌套异常是 java.lang.RuntimeException:com.sun.mail.util.MailConnectException:无法连接到主机,端口:212.48。. *, 25; 超时-1;嵌套异常是:java.net.ConnectException: Connection timed out (Connection timed out)] 根本原因
java.net.ConnectException:连接超时(连接超时)在 java.net.PlainSocketImpl.socketConnect(本机方法)~[na:1.8.0_232] 在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)~ [na:1.8.0_232] 在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_232] 在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8 .0_232] 在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_232] 在 java.net.Socket.connect(Socket.java:607) ~[na:1.8.0_232] 在java.net.Socket.connect(Socket.java:556) ~[na:1.8.0_232]
解决方案
看起来 AWSEC2 实例不允许外部 SMTP 服务器,我通过在 AWS SES 中验证域并使用 SMTP 设置解决了这个问题。
推荐阅读
- networking - 是否可以在 Windows 20H2 (WSL2.0) 中将“WSL”虚拟交换机设为外部以及如何配置它?
- python - inverse minmax trnsformer 显示错误 **ValueError:具有形状 (18,1) 的不可广播输出操作数与广播形状 (18,27) 不匹配**
- javascript - 按钮上的开关图标点击反应
- node.js - 如何使用 cp 命令复制文件/文件夹?
- php - 在自定义管理订单电子邮件中显示 Woocommerce 产品图片
- c++ - 读取密码后覆盖 std::cin 读取缓冲区
- c# - System.UnauthorizedAccessException:访问路径被拒绝
- powershell - 在 Powershell 中,`[Math].GetMethods()` 与 [Math]:: 形式的方法有何不同?
? - spring-boot - Spring boot hikaricp connection-timeout vs connectionTimeout
- python - BigQuery - 在 Airflow 运算符中使用 table_resource