1

我已成功连接并登录到 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.

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

4

1 回答 1

1

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

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

于 2012-05-25T23:43:20.897 回答