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

Java邮件客户端无法从Gmail账户加载邮件问题排查

Spring Gmail IMAP服务无法加载邮件问题

我使用Spring Framework实现了一个从Gmail账户加载未读邮件的服务,代码如下:

@Scheduled(fixedRate = 60000)
public void readEmails() {
    // TODO: load contact emails from database
    List<ContactEmailAccount> ContactEmailAccounts = List.of(
            new ContactEmailAccount("imap.gmail.com", "zhazi@mycompany.com", "abc@123")
    );

    for (ContactEmailAccount account : ContactEmailAccounts) {
        executorService.submit(() -> fetchEmails(account));
    }
}

@Async
public void fetchEmails(ContactEmailAccount account) {
    Properties properties = new Properties();
    properties.put("mail.store.protocol", "imaps");
    properties.put("mail.imap.host", account.getServiceProviderHost());
    properties.put("mail.imap.port", IMAP_PORT);
    System.out.println("www -> Reading emails from " + account.getUsername());

    try {
        Session emailSession = Session.getInstance(properties);
        emailSession.setDebugOut(System.err);  // Change debug output to System.err
        emailSession.setDebug(true);
        Store store = emailSession.getStore("imaps");
        System.out.println("Connecting to IMAP store...");
        store.connect(account.getServiceProviderHost(), account.getUsername(), account.getPassword());
        System.out.println("Connected to IMAP store.");
        Folder emailFolder = store.getFolder("INBOX");
        System.out.println("Opening Inbox folder...");
        emailFolder.open(Folder.READ_ONLY);
        if (!emailFolder.exists()) {
            System.out.println("Folder does not exist!");
            return;
        }

        Message[] messages = emailFolder.getMessages();
        System.out.println("www -> Total messages in INBOX: " + messages.length);
        for (Message message : messages) {
            EmailRequest emailRequest = new EmailRequest();
            emailRequest.setSenderEmail(message.getFrom()[0].toString());
            emailRequest.setReceiverEmail(message.getAllRecipients()[0].toString());
            emailRequest.setReceivedTimestamp(LocalDateTime.parse(message.getReceivedDate().toString()));
            emailRequest.setMessageId(message.getHeader("Message-ID")[0]);
            emailRequest.setInReplyTo(message.getHeader("In-Reply-To") != null ? message.getHeader("In-Reply-To")[0] : null);
            emailRequest.setReferences(message.getHeader("References") != null ? new ArrayList<>(Arrays.asList(message.getHeader("References"))) : null);
            emailRequest.setEmailBody(message.getContent().toString());
            System.out.println("www -> email received " + emailRequest.getEmailBody());
            // Add attachments if needed

            kafkaTemplate.send(KAFKA_TOPIC_EMAIL_INCOMING, emailRequest);
        }

        emailFolder.close(false);
        store.close();
    } catch (Exception e) {
        System.err.println("Error while connecting to IMAP store: " + e.getMessage());

        e.printStackTrace();
    }
}

但邮件无法加载,我添加了大量日志,却仅能看到以下日志:

www -> Reading emails from zhazi@mycompany.com

后续日志(如"Connecting to IMAP store...")均未输出。

备注:

  • 已在Gmail账户中启用IMAP选项;
  • 收件箱中有2封新邮件;
  • 执行telnet imap.gmail.com 993可连通,结果如下:
(base) [~]  $ telnet imap.gmail.com 993
Trying 142.251.2.109...
Connected to imap.gmail.com.
Escape character is '^]'.
Connection closed by foreign host.

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:50:00