如何使用Apache Commons Net通过IMAP获取电子邮件?

时间:2012-05-21 02:06:20

标签: java imap apache-commons-net

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

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

1 个答案:

答案 0 :(得分:1)

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

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