首页 > 解决方案 > Java Mail:从 Message 中获取 UniqueID

问题描述

我需要来自消息对象的uniqueID才能将其保存在我的数据库中。之后,我可以在我的数据库中搜索此 UID,并可以添加其他属性,例如“emailTrackingActive”等。

a) 是否有可能获得电子邮件收件箱的整个 UID,还是总是只针对每个文件夹?目前我得到了这个,你可以在代码中看到。

目前我正在执行以下操作,正如您在代码中看到的那样:发送消息后,我将消息复制到“已发送”文件夹中,然后我想获取 UID 并将其保存在数据库中。

使用“EmailHelperClass”,我得到了商店等。我认为应该很清楚,我不会发布此代码......

private void copyIntoSentAndSaveInDatabase(EmailHelperClass email, final Message msg){

    final Store store = email.getMailConfiguration().getWriteStore();

    final Folder folder = (Folder) store.getFolder("Sent");
    if (folder.exists() == false) {
        folder.create(Folder.HOLDS_MESSAGES);
    }
    folder.open(Folder.READ_WRITE);
    folder.appendMessages(new Message[] { msg });

    // Get UniqueID
    UIDFolder uf = (UIDFolder) folder;
    Long messageId = uf.getUID(msg);

    // Todo Update in DB etc
}

但现在我收到以下错误消息:

java.util.NoSuchElementException:消息不属于此文件夹

这里有什么问题?

标签: javaemailjakarta-mail

解决方案


大家好,您需要将文件夹更改为 IMAPFolder

final Store store = email.getMailConfiguration().getWriteStore();

final IMAPFolder folder = (IMAPFolder) store.getFolder("Sent");
folder.open(Folder.READ_WRITE)

在此文件夹的帮助下获取您的所有消息,我编写了以下方法来获取消息的 UID

private long getMessagesUID(UIDFolder folder,javax.mail.message message){
     try{
      return folder.getUID(message)
       }catch(Exception ex)
       {
       ex.printStackTrace();
       }

如有任何疑问,请告诉我。


推荐阅读