2012-02-13 66 views
20

Tôi đang cố gắng truy cập email từ tài khoản Gmail thông qua IMAP với sự trợ giúp của API JavaMail. Tôi đã tự hỏi tại sao mã hoạt động cho một tài khoản email nhưng không hoạt động cho một tài khoản khác.Truy cập email từ gmail bằng IMAP (javamail API)

Tôi có thể truy cập thư mục Inbox của cả hai tài khoản email. Nhưng đối với một trong các tài khoản email, các thư mục khác như SPAM([Gmail]/Spam) không thể truy cập được và nó ném một ngoại lệ FolderNotFoundException. Ai có thể vui lòng giải thích những gì đang xảy ra không?

Cảm ơn bạn trước.

Đây là mã:

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

Wow. Những công việc này! :-) –

+0

Cảm ơn người đàn ông. :-) – kukis

Trả lời

12

là một trong những tài khoản sử dụng giao diện người dùng không phải tiếng Anh bởi bất kỳ cơ hội?

Tên thư mục Gmail được bản địa hóa theo cài đặt bản địa hóa người dùng.

Hiện tại, cách duy nhất để lấy tên của thư mục được bản địa hóa là sử dụng lệnh XLIST.

+0

@ Pawel Lesnikowski Bạn có thể vui lòng giải thích lệnh XLIST là gì không và làm thế nào tôi có thể sử dụng nó để lấy tên thư mục được bản địa hoá? Thanks .. – Ragini

+0

XLIST là một trong các tiện ích được thêm vào giao thức IMAP của Google. Nó rất giống với lệnh LIST. Phản hồi của nó bao gồm các cờ bổ sung, cho phép khách hàng xác định mục đích dự định của thư mục. Bạn có thể tìm thấy một câu trả lời mẫu ở đây: http://www.limilabs.com/blog/localized-gmail-imap-folders Tôi không phải là nhà phát triển Java, vì vậy tôi không thể chỉ cho bạn cách phát hành lệnh này bằng cách sử dụng java. mail –

+0

@ Pawel Lesnikowski Cảm ơn một lần nữa..Liên kết bạn đã cung cấp là rất hữu ích .. Tôi có đúng tên thư mục và chúng hoạt động tốt ... – Ragini

0

Im không chắc chắn nếu điều này sẽ giúp, nhưng tôi đã nhìn thấy trường hợp tài khoản gmail có hộp thư khác nhau tức là ..

tài khoản Gmail 1: -

Tài khoản
[[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

những gì cần đặt trong smtp.properties? – vaibhavcool20

Các vấn đề liên quan