【问题标题】:How to read the latest thread of an email in gmail using JavaMail?如何使用 JavaMail 阅读 gmail 中电子邮件的最新线程?
【发布时间】:2012-05-16 16:57:54
【问题描述】:

为了在我们的应用程序中测试通知,我正在使用 JavaMail 验证这些通知。我测试了带有和不带有附件的通知。对于没有附件的电子邮件,第一个测试运行良好。验证后,我会删除该电子邮件并从应用程序中发送另一个带有附件的通知。现在我面临这个问题。因为我的收件箱有 1 封电子邮件,但有两个线程(第一封没有附件的电子邮件和最新的带附件的电子邮件都有相同的主题,因此最终在同一封电子邮件中有两个线程)。我的代码会抛出一个错误,因为它需要一封带有附件的电子邮件,但读取的是没有附件的电子邮件。这意味着之前的通知没有被正确删除?我就是这样做的:

//If all messages are read, mark the latest read message as deleted
if(folder.getUnreadMessageCount() == 0){
    message.setFlag(Flags.Flag.DELETED, true);
}

//If any message is marked deleted, delete that message from folder
if(message.isSet(Flags.Flag.DELETED)){
    folder.expunge();
}

我还添加了以下内容以 100% 确保第一个通知被永久删除:

folder.close(true);

我错过了什么吗?或者有没有办法区分电子邮件中的线程?

【问题讨论】:

    标签: gmail jakarta-mail


    【解决方案1】:

    看起来您正确地删除了消息,但最好打开会话调试并查看协议跟踪以了解实际情况。有关说明,请参阅JavaMail FAQ

    【讨论】:

    • 我找到了成功删除电子邮件的替代方法。我没有将邮件标记为已删除,而是将它们移动到垃圾箱文件夹中。做到了!无需删除。 //获取垃圾箱文件夹,复制被读取的邮件 Folder tank = store.getFolder("[Gmail]/Trash");垃圾.打开(文件夹.READ_WRITE); //如果所有消息都读完,删除最新消息 if(folder.getUnreadMessageCount() == 0){ folder.copyMessages(new Message[] {m​​essage},trash); }
    【解决方案2】:

    试过了,效果很好。

    //Get Trash folder to copy messages that are read 
    Folder trash = store.getFolder("[Gmail]/Trash");
    trash.open(folder.READ_WRITE);
    
    //If all messages are read, delete the latest message 
    if(folder.getUnreadMessageCount() == 0)
    {
        folder.copyMessages(new Message[] {message}, trash);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-15
      • 1970-01-01
      • 2022-08-23
      • 2019-02-23
      • 2015-07-30
      • 1970-01-01
      • 1970-01-01
      • 2018-05-11
      相关资源
      最近更新 更多