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

Java Spring邮件程序连接smtp.gmail.com:587报权限拒绝错误如何解决

排查与解决方案

错误java.net.SocketException: Permission denied: connect本质是出问题的机器上Java进程无法建立到smtp.gmail.com:587的TCP连接,可按以下顺序排查解决:

排查步骤

  • 先验证底层网络连通性
    在出问题的机器上执行端口连通性测试:
    Windows系统PowerShell执行:Test-NetConnection smtp.gmail.com -Port 587
    macOS/Linux终端执行:telnet smtp.gmail.com 587 或 nc -zv smtp.gmail.com 587
    如果测试返回连接失败,说明是网络层面被拦截,和代码无关。
  • 检查本地防火墙/安全软件规则
    确认Windows Defender防火墙、macOS防火墙、Linux iptables/ufw,或者第三方杀毒、终端安全软件是否拦截了Java进程的出站请求,或者禁止了对外587端口的访问。可以临时关闭对应安全软件重试,验证是否是拦截导致。
  • 核对代理配置
    确认出问题的机器是否配置了全局代理,而Java进程没有同步配置代理规则导致无法连接公网SMTP服务器。
  • 检查IPv6适配问题
    部分Java版本默认优先使用IPv6协议,如果当前网络环境不支持IPv6连接Gmail服务器,也会抛出权限拒绝错误。

对应解决方法

  • 网络层面拦截的情况:如果是公司/学校内网、运营商封禁了587端口,可以换用Gmail SMTP的SSL 465端口,调整代码配置如下:
    Properties props = new Properties();
    props.put("mail.smtp.starttls.enable", "true");
    // 新增SSL配置
    props.put("mail.smtp.socketFactory.port", "465");
    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    
    String host = "smtp.gmail.com";
    int port = 465; // 端口改为465
    // 其余原有代码保持不变
    
  • IPv6适配问题:启动Java程序时添加JVM启动参数强制使用IPv4:-Djava.net.preferIPv4Stack=true,也可以在代码执行初始化前添加配置:System.setProperty("java.net.preferIPv4Stack", "true");
  • 代理场景:如果必须使用代理访问公网,添加JVM代理启动参数即可:
    -Dhttp.proxyHost=你的代理地址 -Dhttp.proxyPort=代理端口
    -Dhttps.proxyHost=你的代理地址 -Dhttps.proxyPort=代理端口
    
  • 防火墙/安全软件拦截:将Java进程或者587、465端口的出站规则加入白名单即可。

内容的提问来源于stack exchange,提问作者Hrishikesh Shinde

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 02:27:03