如何更改mule的imap邮件获取顺序?

时间:2013-04-29 19:43:46

标签: imap mule esb

我有一个IMAP连接来使用Mule获取电子邮件。我遇到了一个问题。

以下是我的两个简单要求:

  1. 我想以相反的顺序提取电子邮件。 (最新的第一个)
  2. 忽略SEEN消息但不删除它们。
  3. 我正在查看mule(3.3.1)使用的代码: org.mule.transport.email.RetrieveMessageReceiver.poll()。

    代码似乎是从消息1中获取消息。

    348: Message[] messages = folder.getMessages(1, batchSize);
    

    此处获取的消息将在循环中处理:

    org.mule.transport.email.RetrieveMessageReceiver.messagesAdded(MessageCountEvent)

    142: if (!messages[i].getFlags().contains(Flags.Flag.DELETED)
    143:      && !messages[i].getFlags().contains(Flags.Flag.SEEN))
    

    这整个逻辑正在做的是它试图读取旧的未读消息。代码返回到第348行并执行

    folder.getMessages(1, batchSize);
    

    再次,并得到相同的消息,它一直在等待。如何更改提取顺序。

    仅供参考:使用MS Exchange进行IMAP

1 个答案:

答案 0 :(得分:0)

不确定为什么你说Mule试图读“旧的未读消息”?它实际上只是尝试读取未读消息,即不是DELETED或SEEN。

无论如何,从理论上讲,Mulesque对消息进行排序的方法是使用resequencer。遗憾的是,邮件消息接收者没有设置任何所需的控制属性,以便让Mule将收到的消息作为单个批处理,这样就无法工作。

因此,我能想到的唯一解决方案是扩展org.mule.transport.email.RetrieveMessageReceiver并使用<service-overrides />子元素在IMAP连接器上注册您的自定义版本。