2012-02-13 13 views
20

JavaMail APIの助けを借りてIMAP経由でGmailアカウントからメールにアクセスしようとしています。私はなぜコードが1つの電子メールアカウントで動作するのだろうと思っていたが、別の電子メールアカウントでは機能しなかった。IMAP(javamail API)を使用したGmailからのメールへのアクセス

両方のメールアカウントのInboxフォルダにアクセスできます。しかし、電子メールアカウントの1つでは、SPAM([Gmail]/Spam)のような他のフォルダはアクセスできず、FolderNotFoundException例外がスローされます。誰かが間違っていることを説明してもらえますか?

ありがとうございます。ここで

はコードです:

import java.io.*; 
import java.util.*; 
import javax.mail.*; 
import javax.mail.Flags.Flag; 
import javax.mail.internet.*; 

import com.sun.mail.imap.IMAPFolder; 
import com.sun.mail.imap.IMAPMessage; 


public class FolderFetchIMAP { 


    public static void main(String[] args) throws MessagingException, IOException { 
     IMAPFolder folder = null; 
     Store store = null; 
     String subject = null; 
     Flag flag = null; 
     try 
     { 
      Properties props = System.getProperties(); 
      props.setProperty("mail.store.protocol", "imaps"); 

      Session session = Session.getDefaultInstance(props, null); 

      store = session.getStore("imaps"); 
      store.connect("imap.googlemail.com","[email protected]", "password"); 

      folder = (IMAPFolder) store.getFolder("[Gmail]/Spam"); // This doesn't work for other email account 
      //folder = (IMAPFolder) store.getFolder("inbox"); This works for both email account 


      if(!folder.isOpen()) 
      folder.open(Folder.READ_WRITE); 
      Message[] messages = folder.getMessages(); 
      System.out.println("No of Messages : " + folder.getMessageCount()); 
      System.out.println("No of Unread Messages : " + folder.getUnreadMessageCount()); 
      System.out.println(messages.length); 
      for (int i=0; i < messages.length;i++) 
      { 

      System.out.println("*****************************************************************************"); 
      System.out.println("MESSAGE " + (i + 1) + ":"); 
      Message msg = messages[i]; 
      //System.out.println(msg.getMessageNumber()); 
      //Object String; 
      //System.out.println(folder.getUID(msg) 

      subject = msg.getSubject(); 

      System.out.println("Subject: " + subject); 
      System.out.println("From: " + msg.getFrom()[0]); 
      System.out.println("To: "+msg.getAllRecipients()[0]); 
      System.out.println("Date: "+msg.getReceivedDate()); 
      System.out.println("Size: "+msg.getSize()); 
      System.out.println(msg.getFlags()); 
      System.out.println("Body: \n"+ msg.getContent()); 
      System.out.println(msg.getContentType()); 

      } 
     } 
     finally 
     { 
      if (folder != null && folder.isOpen()) { folder.close(true); } 
      if (store != null) { store.close(); } 
     } 

    } 



} 
+0

ワウ。これは動作します! :-) –

+0

ありがとう。 :-) – kukis

答えて

12

は万が一英語以外のUIを使用してのいずれかのアカウントですか?

Gmailのフォルダ名は、ユーザーのローカリゼーション設定に関してローカライズされています。

現在、ローカライズされたフォルダの名前を取得する唯一の方法は、XLISTコマンドを使用することです。

+0

@ Pawel Lesnikowski XLISTコマンドについて詳しく教えてください。どうすればローカライズされたフォルダ名を取得できますか?ありがとう.. – Ragini

+0

XLISTは、GoogleがIMAPプロトコルに追加した拡張機能の1つです。これはLISTコマンドと非常によく似ています。応答には、クライアントがフォルダの意図された目的を識別できるようにする追加のフラグが含まれています。ここでサンプルの回答を見つけることができます:http://www.limilabs.com/blog/localized-gmail-imap-folders私はJava開発者ではありませんので、javaを使用してこのコマンドを発行する方法を説明することはできません。 mail –

+0

@ Pawel Lesnikowskiもう一度お返事ありがとうございます。リンクは非常に便利です。私は正しいフォルダ名を持っており、正常に動作します... – Ragini

0

Imはこのことができます不明な点があれば、私はGmailのアカウントがすなわち、異なるメールボックスを持つインスタンスを見てきました。..

Gmailのアカウント1: -

[[Google Mail]] 
[[Google Mail]/All Mail] 
[[Google Mail]/Bin] 
[[Google Mail]/Drafts] 
[[Google Mail]/Important] 
[[Google Mail]/Sent Mail] 
[[Google Mail]/Spam] 
[[Google Mail]/Starred] 

Gmailアカウント2: -

[[Gmail]] 
[[Gmail]/All Mail] 
[[Gmail]/Bin] 
[[Gmail]/Drafts] 
[[Gmail]/Important] 
[[Gmail]/Sent Mail] 
[[Gmail]/Spam] 
[[Gmail]/Starred] 
5
package com.technicalkeeda; 

import java.io.File; 
import java.io.FileInputStream; 
import java.util.Properties; 

import javax.mail.Folder; 
import javax.mail.Message; 
import javax.mail.Session; 
import javax.mail.Store; 

public class GmailInbox { 

public static void main(String[] args) { 
    GmailInbox gmail = new GmailInbox(); 
    gmail.read(); 
} 

public void read() { 
    Properties props = new Properties(); 
    try { 
    props.load(new FileInputStream(new File("C:\\smtp.properties"))); 
    Session session = Session.getDefaultInstance(props, null); 

    Store store = session.getStore("imaps"); 
    store.connect("smtp.gmail.com", "*************@gmail.com","your_password"); 

    Folder inbox = store.getFolder("inbox"); 
    inbox.open(Folder.READ_ONLY); 
    int messageCount = inbox.getMessageCount(); 

    System.out.println("Total Messages:- " + messageCount); 

    Message[] messages = inbox.getMessages(); 
    System.out.println("------------------------------"); 
    for (int i = 0; i < 10; i++) { 
     System.out.println("Mail Subject:- " + messages[i].getSubject());  
    } 
    inbox.close(true); 
    store.close(); 

    } catch (Exception e) { 
    e.printStackTrace(); 
    } 
} 

} 
+0

smtp.propertiesに入れるものは何ですか? – vaibhavcool20

関連する問題