当前位置: 首页 > 面试题库 >

使用IMAP(Javamail API)从gmail访问电子邮件

莫宝
2023-03-14
问题内容

我正在尝试在JavaMail
API的帮助下通过IMAP访问来自Gmail帐户的电子邮件。我想知道为什么代码对一个电子邮件帐户有效,而对另一个电子邮件帐户无效。

我可以访问Inbox两个电子邮件帐户的文件夹。但是对于其中一个电子邮件帐户,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","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(); }
        }

    }



}

问题答案:

是否有一个帐户使用非英语用户界面?

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

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



 类似资料:
  • 我有一个IMAP服务器主机名:xyz.com.我的SMTP主机名是:comcast.net. 现在,当我通过Outlook发送电子邮件时,它会自动将我的ID[发件人ID]显示为:myusername@xyz.com而不是myusername@comcast.net. 我想用JavaMail API实现同样的目标。 当我使用JavaMail API时,它将发送者显示为myusername@comca

  • 问题内容: 我想为手机开发gtalk应用程序 请告诉我用于访问J2ME的gmail帐户的库的名称 问题答案: 您的Question标题说您要访问gmail电子邮件,但在说明中说要开发gtalk应用程序。 如果您正在寻找gtalk客户端开发,请查看以下资源 为什么需要为手机开发gtalk客户端,已经有很多gtalk了。要学习,您可以尝试使用开源应用程序来开始。 MGtalk:用于移动项目的Googl

  • 我能够通过IMAP连接到Gmail并进行解析,但是在电子邮件正文中,我获得了Gmail特定的内容,例如

  • 因此,我实际上是试图通过IMAP使用Node连接到Outlook/Exchange电子邮件帐户。 使用旧的Live Connect API,我可以使用OAuth2令牌(https://msdn.microsoft.com/en-us/windows/desktop/DN440163)执行IMAP命令。但这似乎对Exchange帐户不起作用,因为试图用这些帐户执行Oauth流只会带来一个错误“此Mi

  • 问题内容: 我正在尝试使用从Android的AccountManager接收的令牌而不是使用用户名和密码来实现IMAP gmail客户端。 Google为该IMAP示例提供了oauth2 http://code.google.com/p/google-mail- oauth2-tools/source/browse/#svn%2Ftrunk%2Fjava%2Fcom%2Fgoogle%2Fgoog

  • 如何在数据库中存储该电子邮件的唯一ID。 我尝试了$概述=imap_fetch_overview($inbox,$email_number,0);我收到了一堆数字,但问题是当其中一封电子邮件被删除时,数字会发生变化。 如何正确存储?MD5消息还是什么? 基本上,我试图在我的个人网络应用程序上接收电子邮件,在那里我可以管理和访问我自己的电子邮件。它使用imap调用gmail。 无论如何,我可以在哪里