使用IMAP访问来自Gmail的电子邮件(javamail API) [英] Accessing emails from gmail using IMAP ( javamail API)

查看:194
本文介绍了使用IMAP访问来自Gmail的电子邮件(javamail API)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正尝试通过JavaMail API的帮助通过IMAP访问Gmail帐户中的电子邮件。我想知道为什么代码适用于一个电子邮件帐户,但不适用于另一个。

我可以访问这两个电子邮件帐户的收件箱文件夹。但对于其中一个电子邮件帐户,其他文件夹(如 SPAM([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 =空值;
Store store = null;
String subject = null;
Flag flag = null;
尝试
{
属性props = System.getProperties();
props.setProperty(mail.store.protocol,imaps);

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

store = session.getStore(imaps);
store.connect(imap.googlemail.com,myemailid@gmail.com,密码);

folder =(IMAPFolder)store.getFolder([Gmail] / Spam); //这不适用于其他电子邮件帐户
// folder =(IMAPFolder)store.getFolder(inbox);这适用于电子邮件帐户


if(!folder.isOpen())
folder.open(Folder.READ_WRITE);
Message [] messages = folder.getMessages();
System.out.println(No of Messages:+ folder.getMessageCount());
System.out.println(未读消息的数量:+ folder.getUnreadMessageCount());
System.out.println(messages.length);
for(int i = 0; i< messages.length; i ++)
{

System.out.println(********** ************************************************** *****************);
System.out.println(MESSAGE+(i + 1)+:);
消息msg =消息[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( );
System.out.println(Date:+ msg.getReceivedDate());
System.out.println(Size:+ msg.getSize());
System.out.println(msg.getFlags());
System.out.println(Body:\\\
+ msg.getContent());
System.out。 println(msg.getContentType());

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

}





解决方案

是其中一个帐户使用非engl ish用户界面吗?



Gmail文件夹名称已根据用户本地化设置进行了本地化。

获取本地化文件夹名称的唯一方法是使用XLIST命令。


I am trying to access emails from Gmail accounts through IMAP with the help of the JavaMail API. I was wondering why the code works for one email account but doesn't work for another.

I am able to access the Inbox folder of both email accounts. But for one of the email accounts, other folders like SPAM([Gmail]/Spam) are not able to be accessed and it throws a FolderNotFoundException exception. Could anybody please explain what is going wrong?

Thank you in advance.

Here is the code:

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","myemailid@gmail.com", "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(); }
        }

    }



}

解决方案

Is one of the accounts using non-english UI by any chance?

Gmail folder names are localized with respect to the user localization settings.

Currently the only way to get the name of the localized folder is by using XLIST command.

这篇关于使用IMAP访问来自Gmail的电子邮件(javamail API)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆