当前位置: 首页 > 知识库问答 >
问题:

使用Javamail从Gmail检索上次发送的邮件

卢嘉誉
2023-03-14

我正在尝试使用Javamail api获取Gmail中最近发送的邮件。这是代码-

Properties props = System.getProperties();
props.setProperty("mail.store.protocol", "imap");

try{
    Session session = Session.getDefaultInstance(props, null);
    Store store = session.getStore("imap");
    store.connect(mailbox, mailId, passwod);

    sent  = store.getFolder("[Gmail]/Sent Mail");
    int totalSentMails = sent.getMessageCount();

    sent.open(Folder.READ_ONLY);


    Message sentmesage = sent.getMessage(totalSentMails);
}
catch (NoSuchProviderException e){
      e.printStackTrace();
      System.exit(1);
}

由于getMessage计数返回的数字远远大于实际邮件,因此我得到了一个IndexOutOfBoundsException。

如何使用javamail api从Gmail获取已发送邮件的确切数量?我得到的错误是 -

java.lang.IndexOutOfBoundsException: 1986 > 1970

1986是上述获取的totalSentMails的值,1970是实际发送的邮件数

共有1个答案

姬旭
2023-03-14

**

**

    Properties props = new Properties();

    props.setProperty("mail.store.protocol", "imaps");

    try {
        Session session = Session.getInstance(props, null);
        Store store = session.getStore();
        store.connect("imap.gmail.com", "xxxxxxx@gmail.com", "gmailpassword");
        Folder[] folderList = store.getFolder("[Gmail]").list();
        for (int i = 0; i < folderList.length; i++) {
            System.out.println(folderList[i].getFullName());
        }
        Folder inbox = store.getFolder("[Gmail]/Sent Mail");
        inbox.open(Folder.READ_ONLY);
        Message msg = inbox.getMessage(inbox.getMessageCount());
        Address[] in = msg.getFrom();
        for (Address address : in) {
            System.out.println("FROM:" + address.toString());
        }
        Multipart mp = (Multipart) msg.getContent();
        BodyPart bp = mp.getBodyPart(0);
        System.out.println("Bcc User NAme :"+InternetAddress.toString(msg.getRecipients(Message.RecipientType.BCC)));
        System.out.println("SENT DATE:" + msg.getSentDate());
        System.out.println("SUBJECT:" + msg.getSubject());
        System.out.println("CONTENT:" + bp.getContent());
    } catch (Exception mex) {
        mex.printStackTrace();
    }

伙计们,这个代码运行得很好..享受:)

 类似资料:
  • 问题内容: 我正在尝试阅读我的消息,我可以获取它来打印标题,但发件人和内容显示得很滑稽。这是我用来显示消息的代码: 输出如下: 为什么不打印出from语句的实际电子邮件地址?为什么不打印出实际的身体内容?(我只是在纯文本中很有趣。) 整个代码: 谢谢! 问题答案: 对于纯文本和html消息: 对于分段消息:

  • 问题内容: 我正在使用JavaMail在Android应用程序中阅读邮件。我试图涵盖所有组合,即在“自定义服务器” /“ Gmail ID” /“ Live ID”上发送/接收的邮件。 从GMail WITH Attachment发送的某些邮件中出现问题。我可以收到附件,但是内容返回 这是用于接收和阅读消息的代码: 我对有问题的邮件的了解: 还返回名称,即以这种格式出现FirstName Last

  • 本文向大家介绍基于java使用JavaMail发送邮件,包括了基于java使用JavaMail发送邮件的使用技巧和注意事项,需要的朋友参考一下 一、邮件的相关概念 邮件协议。主要包括: SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件 POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件 IM

  • 这是我发送邮件的代码 我在tomcat的lib文件夹中添加了和。我将eclipse与Tomcat7、JRE7和Struts2一起使用。通过Java发送邮件时出现以下控制台错误:

  • 目前,我的代码使用IMAP(imaps)和JavaMail访问我的Gmail收件箱,目的是阅读从最新到最旧发送给我自己的电子邮件,识别哪些电子邮件具有. zip或. xap格式的附件。如果找到,电子邮件的主题会显示出来,并询问我是否要下载附件。 如果我单击否,它会继续搜索。如果我单击是,它会调用createFolder方法来创建一个目录,将附件保存在那里,然后提取它。 问题:我收件箱中最近的一封电

  • 问题内容: 我正在使用javamail,但无法从Gmail电子邮件中获取HTML。我有以下内容: 上面所有方法都可以,但是我无法打印或获取实际的HTML或文本电子邮件。我只是得到某种InputStream,如何轻松处理以获得原始的电子邮件HTML? 我也尝试遍历消息,但这并没有使我走得太远: } 谢谢大家的帮助。 问题答案: 该对象包含电子邮件的正文。您需要阅读整个流,才能阅读整个消息。例如,该S