You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring JavaMailSender配置SSL SMTP服务器连接失败,求参数调整方案

第一步:解决UnknownHostException域名解析问题

报错java.net.UnknownHostException: webmail.xxx.yyy说明Java程序运行环境无法解析该SMTP服务器域名,先完成以下验证:

  • 在程序运行的机器/服务器上执行ping webmail.xxx.yyy,确认是否能正常解析到IP地址
  • 如果ping不通,检查机器DNS配置,或直接用SMTP服务器的IP地址替换webmail.xxx.yyy做测试
  • 同时确认机器防火墙/安全组未阻止对该域名465端口的访问

第二步:修正SMTPs(465端口)的JavaMail配置

465是SMTP over SSL的默认端口,你的配置中部分属性需要匹配smtps协议前缀,修正后的代码如下:

@Bean
public JavaMailSender getMailSender(SystemParameterService systemParameterService) {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();

    mailSender.setHost("webmail.xxx.yyy"); // 确认域名可解析,或替换为服务器IP
    mailSender.setPort(465);
    mailSender.setUsername("fest123@xxx.yyy");
    mailSender.setPassword("festpassword");

    Properties extraProperties = mailSender.getJavaMailProperties();
    extraProperties.put("mail.transport.protocol", "smtps");
    extraProperties.put("mail.smtps.auth", "true"); // 对应smtps协议的认证属性
    extraProperties.put("mail.smtps.ssl.enable", "true"); // 465端口必须开启SSL
    extraProperties.put("mail.debug", "true");

    // 超时属性同样使用smtps前缀
    extraProperties.put("mail.smtps.connectiontimeout", "5000");
    extraProperties.put("mail.smtps.timeout", "3000");
    extraProperties.put("mail.smtps.writetimeout", "5000");

    return mailSender;
}

额外说明

  • 原配置使用mail.smtp.*属性,但协议为smtps,这些属性不会生效,必须统一改为mail.smtps.*前缀
  • 465端口为直接SSL连接,无需配置STARTTLS(STARTTLS是587端口的升级连接方式)
  • 若用IP地址测试成功,说明问题出在域名解析,可排查DNS或在hosts文件手动映射域名与IP

内容的提问来源于stack exchange,提问作者Mar Caribe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 12:25:12