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

Android Studio中使用Java Mail API无Gmail客户端发送邮件失败

Android Java Mail API 发送邮件时 Transport.send(message) 未执行的排查方案

针对你遇到的Transport.send(message)未执行的问题,可按以下步骤排查解决:

  • 必须在子线程执行发送逻辑
    Android禁止在主线程进行网络操作,Java Mail的邮件发送属于网络请求,如果直接在主线程调用Transport.send,会触发NetworkOnMainThreadException,导致代码中断且无明显提示。需将发送逻辑放到子线程中,比如用Thread、AsyncTask或协程:

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Transport.send(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }).start();
    
  • 捕获并打印完整异常栈
    很多情况下代码未执行是因为前置步骤抛出了异常但未被捕获,或者仅打印了错误消息。务必将Transport.send包裹在try-catch块中,打印完整的异常栈轨迹,定位具体问题:

    try {
        Transport.send(message);
        Log.d("MailDebug", "邮件发送成功");
    } catch (Exception e) {
        Log.e("MailDebug", "发送失败详情", e);
    }
    
  • 核对邮箱配置与权限

    • 确认SMTP服务器地址、端口、加密方式正确(例如Gmail的SMTP地址为smtp.gmail.com,587端口对应TLS加密,465对应SSL);
    • 若使用Gmail,需开启两步验证并生成应用专用密码,替代原账号密码(Google已逐步关闭低安全应用访问权限);
    • 确保AndroidManifest.xml中添加了网络权限:
      <uses-permission android:name="android.permission.INTERNET" />
      
  • 使用Android适配版Java Mail依赖
    不要直接使用标准javax.mail包,需引入适配Android的版本,Gradle依赖如下:

    implementation 'com.sun.mail:android-mail:1.6.7'
    implementation 'com.sun.mail:android-activation:1.6.7'
    
  • 开启Session调试模式
    给Session开启debug模式,打印SMTP交互的详细日志,能直观看到连接、认证、发送的每一步状态:

    Properties props = new Properties();
    // 配置props...
    Session session = Session.getInstance(props, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication("你的邮箱", "密码/应用专用密码");
        }
    });
    session.setDebug(true); // 开启调试
    

内容的提问来源于stack exchange,提问作者mauricio romero

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 03:40:22