Java连接Zoho邮箱遇javax.mail.MessagingException: Connect timed out问题求助
解决Java连接Zoho邮箱IMAPS超时问题
针对你遇到的javax.mail.MessagingException: Connect timed out错误,从网络配置、Zoho后台设置、代码优化三个维度给出解决方案:
1. 排查网络与防火墙限制
- 先验证本地网络能否访问Zoho的IMAP服务:
执行命令测试端口连通性:telnet imap.zoho.in 993 # 或用curl测试 curl -v imaps://imap.zoho.in:993 - 确认本地防火墙、公司网关是否放行993端口的出站请求,如果使用代理,需在Java属性中添加代理配置:
props.setProperty("mail.imaps.socks.host", "代理IP"); props.setProperty("mail.imaps.socks.port", "代理端口");
2. 验证Zoho邮箱后台配置
- 登录Zoho邮箱后台,进入「设置」→「邮件账户」→「POP/IMAP」,确认IMAP状态为启用
- 若开启了两步验证,必须使用应用专用密码替代原登录密码(在Zoho安全设置中生成)
- 企业版Zoho邮箱需确认管理员是否为你的账户开启了IMAP访问权限
3. 代码问题修正
你创建了MailSSLSocketFactory但未添加到Properties中,导致SSL配置无效;同时5秒超时时间过短,以下是修正后的代码:
public class Mail { public static void main(String[] args) { try { final Properties props = new Properties(); MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); props.setProperty("mail.store.protocol", "imaps"); props.setProperty("mail.imaps.port", "993"); // 延长超时时间至15秒 props.setProperty("mail.imaps.connectiontimeout", "15000"); props.setProperty("mail.imaps.timeout", "15000"); props.setProperty("mail.imaps.auth", "true"); props.setProperty("mail.debug", "true"); // 添加上SSL SocketFactory配置 props.put("mail.imaps.ssl.socketFactory", sf); Session session = Session.getInstance(props, null); session.setDebug(true); // 明确指定imaps协议获取Store Store store = session.getStore("imaps"); // 替换为你的邮箱和应用专用密码 store.connect("imap.zoho.in", "your-email@zohomail.in", "your-app-password"); Folder inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); Message msg = inbox.getMessage(inbox.getMessageCount()); Address[] in = msg.getFrom(); for (Address address : in) { System.out.println("FROM:" + address.toString()); } Multipart mp = (Multipart) msg.getContent(); BodyPart bp = mp.getBodyPart(0); System.out.println("SENT DATE:" + msg.getSentDate()); System.out.println("SUBJECT:" + msg.getSubject()); System.out.println("CONTENT:" + bp.getContent()); // 关闭资源 inbox.close(false); store.close(); } catch (Exception mex) { mex.printStackTrace(); } } }
4. 额外检查点
- 确认JavaMail依赖版本兼容:Java 8及以下用
javax.mail,Java 11+推荐使用jakarta.mail(包名需替换为jakarta.mail.*)
内容的提问来源于stack exchange,提问作者Belle
相关产品推荐
相关产品推荐

