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
相关产品推荐
相关产品推荐

