web-dev-qa-db-ja.com

JavaMailを使用してメールアカウントで使用可能なフォルダーのリストを取得する方法

JavaMail APIを使用して個人アカウントに接続しています。作成したGmailアカウントにフォルダー(ラベル)のリストと、受信トレイ、下書きなどのデフォルトフォルダーがあります。使用可能なすべてのフォルダー(デフォルトおよび作成されたユーザー)をリストするにはどうすればよいですか?

このAPIを使用して特定のフォルダーにアクセスできます:Folder inbox = store.getFolder("Inbox");。メールアカウントで使用可能なフォルダーのリストを取得する他のAPIはありますか?

38
Jagadesh

動作するコードは次のとおりです。これにより、すべてのラベルを処理できます。 folderをさらに深くするには、folder.list()を実行するか、store.getDefaultFolder().list("*")を使用して、他の回答で提案されているようにすべてのフォルダーとサブフォルダーを取得します。

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
Session session = Session.getDefaultInstance(props, null);
Store store = session.getStore("imaps");
store.connect("imap.gmail.com", "[email protected]", "UR_P@ZZWRD");
System.out.println(store);

Folder[] f = store.getDefaultFolder().list();
for(Folder fd:f)
    System.out.println(">> "+fd.getName());

出力:

>>受信トレイ
>>個人
>>領収書
>>旅行
>>仕事
>> [Gmail]


古い回答

これは正しくないことに注意してください、それは this answer by dkarp で正しく指摘されています

これらはする必要があります:

http://Java.Sun.com/products/javamail/javadocs/javax/mail/Store.html#getSharedNamespaces%28%29

http://Java.Sun.com/products/javamail/javadocs/javax/mail/Store.html#getUserNamespaces%28Java.lang.String%29

36
Nishant

Sergeyは近いですが、デフォルトではJavaMailのlist()は_LIST "" %_を実行し、トップレベルのフォルダーのみを提供します。 GMailは、システムフォルダー(すべてのメール、下書き、送信済みメール、スパム、スター付き、ゴミ箱)を選択できないフォルダー_[Gmail]_の下に置くため、代わりに_LIST "" *_を実行する必要があります。それ以外の場合は、INBOX、_[Gmail]_、およびラベルが返されます。

GMailに接続し、フォルダーリストを取得し、_\NoSelect_以外の各フォルダー(つまり、_[Gmail]_などの単なる階層プレースホルダーではないフォルダー)の名前とメッセージカウントを出力するサンプルコードを次に示します。 ):

_Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imaps");
try {
    Session session = Session.getDefaultInstance(props, null);
    javax.mail.Store store = session.getStore("imaps");
    store.connect("imap.gmail.com", "<username>@gmail.com", "<password>");
    javax.mail.Folder[] folders = store.getDefaultFolder().list("*");
    for (javax.mail.Folder folder : folders) {
        if ((folder.getType() & javax.mail.Folder.HOLDS_MESSAGES) != 0) {
            System.out.println(folder.getFullName() + ": " + folder.getMessageCount());
        }
    }
} catch (MessagingException e) {
    e.printStackTrace();
}
_
62
dkarp

このような他のフォルダにアクセスできます

store.getFolder("[Gmail]/Sent Mail");
store.getFolder("[Gmail]/Drafts");

等.

8
user889386

store.getDefaultFolder().list()はどうですか?ただ推測だけど。

0
Sergei Tachenov