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

Android通过Gmail SMTP发送邮件遇连接超时问题求助

Gmail SMTP连接超时问题修复方案

核心问题分析

从错误信息看,代码配置了端口587,但实际尝试连接端口25,同时Gmail SMTP配置参数存在错误,导致连接超时。

具体修复步骤

  1. 修正SMTP配置参数
    Gmail 587端口采用STARTTLS加密而非直接SSL,调整配置如下:

    emailProperties.put("mail.smtp.auth", "true");
    emailProperties.put("mail.smtp.host", "smtp.gmail.com");
    emailProperties.put("mail.smtp.port", "587");
    emailProperties.put("mail.smtp.starttls.enable", "true"); // 启用STARTTLS协议
    emailProperties.put("mail.smtp.ssl.trust", "smtp.gmail.com"); // 信任Gmail服务器证书
    

    移除原配置中的mail.smtp.ssl.enable和mail.smtp.ssl.required,这两个参数适用于465端口的SSL直连。

  2. 清理重复Session实例
    代码中创建了两个Session对象,其中用于发送邮件的mailSession未关联认证信息,且transport.connect中使用的emailHost变量未定义,导致默认走端口25。保留一个带认证的Session即可:

    // 仅创建一个Session实例
    javax.mail.Session mailSession = javax.mail.Session.getInstance(emailProperties, new javax.mail.Authenticator() {
        @Override
        protected javax.mail.PasswordAuthentication getPasswordAuthentication() {
            return new javax.mail.PasswordAuthentication(fromEmail, fromPassword);
        }
    });
    
    // 创建邮件消息
    MimeMessage emailMessage = new MimeMessage(mailSession);
    
  3. 修正Transport连接逻辑
    直接指定SMTP主机,避免使用未定义的emailHost变量:

    Transport transport = mailSession.getTransport("smtp");
    transport.connect("smtp.gmail.com", fromEmail, fromPassword);
    transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
    transport.close();
    
  4. Gmail账号权限配置

    • 若未开启2FA,需在Google账号设置中开启低安全性应用访问(不推荐)。
    • 推荐开启2FA后,创建应用专用密码,用该密码替代原账号密码进行认证,避免安全限制。
  5. 添加Android网络权限
    在AndroidManifest.xml中添加网络访问权限:

    <uses-permission android:name="android.permission.INTERNET" />
    

内容的提问来源于stack exchange,提问作者waleed.makarem

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 09:32:12