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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:43:12