【问题标题】:How to use Apache Commons Net to fetch an email via IMAP?如何使用 Apache Commons Net 通过 IMAP 获取电子邮件?
【发布时间】:2012-05-21 02:06:20
【问题描述】:

我已成功连接并登录到 IMAP 服务器,并且可以使用 IMAP fetch 命令检索电子邮件列表。但是,当我尝试检索一封带有完整标题的电子邮件时,我最终遇到了问题。

这是我得到的堆栈跟踪:

Exception in thread "main" org.apache.commons.net.MalformedServerReplyException: Received unexpected IMAP protocol response from server: 'Return-Path: <[removed]>'.
at org.apache.commons.net.imap.IMAPReply.getReplyCode(IMAPReply.java:128)
at org.apache.commons.net.imap.IMAPReply.getReplyCode(IMAPReply.java:93)
at org.apache.commons.net.imap.IMAP.__getReply(IMAP.java:120)
at org.apache.commons.net.imap.IMAP.__getReply(IMAP.java:90)
at org.apache.commons.net.imap.IMAP.sendCommandWithID(IMAP.java:225)
at org.apache.commons.net.imap.IMAP.sendCommand(IMAP.java:238)
at org.apache.commons.net.imap.IMAP.sendCommand(IMAP.java:263)
at org.apache.commons.net.imap.IMAP.doCommand(IMAP.java:276)
at org.apache.commons.net.imap.IMAPClient.fetch(IMAPClient.java:339)

生成上述堆栈跟踪的代码是:

public static void main(String[] args) throws Exception {
    IMAPClient client = new IMAPClient();
    client.connect(SERVER);
    client.login(USERNAME, PASSWORD);
    client.select("INBOX");
    client.fetch("1", "body[header]");
}

我正在使用 commons-net-3.1

当我通过 telnet 连接到 IMAP 服务器并发出相同的命令时,我最终会得到这样的结果(我用下划线省略了一些数据):

08 fetch 1 body[header]
* 1 FETCH (BODY[HEADER] {608}
Return-Path: <____@____.com>
X-Original-To: ____@____.com
Delivered-To: ____@____.com
Received: from ____.____.com (unknown [____])
    by ____.____.____ (Postfix) with ESMTP id 1926514D20
    for <____@____.com>; Mon,  1 Feb 2010 16:52:36 +1100 (EST)
Date: Mon, 1 Feb 2010 16:52:35 +1100 (EST)
From: ____@____.com
To: ____@____.com
Message-ID: <__________________________@_____>
Subject: ____
MIME-Version: 1.0
Content-Type: multipart/mixed; 
    boundary="----=_Part_13575_1460176524.1265003555921"

)
* 79690 EXISTS
* 13 RECENT
08 OK Fetch completed.

我是否使用正确的方法(获取)来查看电子邮件? 关于我哪里出错的任何线索?

【问题讨论】:

  • 您是否尝试过使用 FETCH 1 full
  • “FETCH 1 full”有效。但是它给我的数据比“FETCH 1 BODY[HEADER]”和“FETCH 1 BODY[TEXT]”要少。

标签: java imap apache-commons-net


【解决方案1】:

这是 fetch 的正确用法(根据邮件列表)。这是 commons-net 中的一个错误。

https://issues.apache.org/jira/browse/NET-467

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-16
    • 2010-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-14
    • 1970-01-01
    • 2019-12-24
    相关资源
    最近更新 更多