Java实现企业邮箱发信到Gmail等服务器连接超时报错如何解决
错误根因与修复方案
你触发的com.sun.mail.util.MailConnectException: Couldn't connect to host连接超时错误,结合提供的代码,修复方案如下:
- 加密方式与端口不匹配
465是SMTP SSL加密专用端口,你代码中配置的mail.smtp.starttls.enable = "true"对应STARTTLS加密,适配端口为587,两者不兼容,二选一修改即可:
方案1:保留465端口,替换加密配置
方案2:保留STARTTLS加密,修改端口为587// 删除原有mail.smtp.starttls.enable配置,新增以下配置 properties.put("mail.smtp.ssl.enable", "true"); properties.put("mail.smtp.port", "465");properties.put("mail.smtp.starttls.enable", "true"); properties.put("mail.smtp.port", "587"); - SMTP地址校验
确认ABC企业邮箱对外发信SMTP地址确实为smtp.webmail.abc.com,可通过企业邮箱设置页的发信服务器信息核对,多数企业邮箱SMTP地址为smtp.abc.com,无webmail前缀。 - 网络连通性验证
企业内网通常有防火墙出口限制,先在运行代码的设备终端执行命令telnet smtp.webmail.abc.com 对应端口验证连通性,如果连接失败,联系企业IT开放对应SMTP端口的出口权限,或确认是否需要配置企业网络代理。 - 代码优化
你已经在Properties中配置了host、用户名、密码,调用transport.connect()时无需重复传参,直接调用无参方法即可;同时可添加超时配置避免无限制等待:// 新增超时配置,单位为毫秒 properties.put("mail.smtp.connectiontimeout", "5000"); properties.put("mail.smtp.timeout", "10000");
内容的提问来源于stack exchange,提问作者Akshay Gaikwad
相关产品推荐
相关产品推荐

