天天看點

java gmail imap_使用IMAP(javamail API)通路gmail的電子郵件

借助JavaMail API,我正在嘗試通過IMAP從Gmail帳戶通路電子郵件。我想知道為什麼代碼适用于一個電子郵件帳戶,但不适用于另一個。

我可以通路這兩個電子郵件帳戶的收件箱檔案夾。但是對于其中一個電子郵件帳戶,其他檔案夾(如垃圾郵件(Gmail)/垃圾郵件))無法通路,并會引發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(); }

}

}

}