IMAPサーバーに正常に接続してログインし、IMAPフェッチコマンドを使用して電子メールのリストを取得できます。ただし、完全なヘッダーを含む単一の電子メールを取得しようとすると、問題が発生します。
これは私が取得しているスタックトレースです:
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.
メールを表示するために正しい方法(フェッチ)を使用していますか?私がどこで間違っているのかについての手がかりはありますか?