Android通过Gmail SMTP发送邮件遇连接超时问题求助
Gmail SMTP连接超时问题修复方案
核心问题分析
从错误信息看,代码配置了端口587,但实际尝试连接端口25,同时Gmail SMTP配置参数存在错误,导致连接超时。
具体修复步骤
修正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直连。清理重复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);修正Transport连接逻辑
直接指定SMTP主机,避免使用未定义的emailHost变量:Transport transport = mailSession.getTransport("smtp"); transport.connect("smtp.gmail.com", fromEmail, fromPassword); transport.sendMessage(emailMessage, emailMessage.getAllRecipients()); transport.close();Gmail账号权限配置
- 若未开启2FA,需在Google账号设置中开启低安全性应用访问(不推荐)。
- 推荐开启2FA后,创建应用专用密码,用该密码替代原账号密码进行认证,避免安全限制。
添加Android网络权限
在AndroidManifest.xml中添加网络访问权限:<uses-permission android:name="android.permission.INTERNET" />
内容的提问来源于stack exchange,提问作者waleed.makarem
相关产品推荐
相关产品推荐

