Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring integration org.springframework.integration.mail.class在使用spring integration mail-imap接收的邮件消息上转换异常标志_Spring Integration_Jakarta Mail_Imap - Fatal编程技术网

Spring integration org.springframework.integration.mail.class在使用spring integration mail-imap接收的邮件消息上转换异常标志

Spring integration org.springframework.integration.mail.class在使用spring integration mail-imap接收的邮件消息上转换异常标志,spring-integration,jakarta-mail,imap,Spring Integration,Jakarta Mail,Imap,我想更新远程imap邮件文件夹中某些邮件的标志。 我正在使用 spring集成邮件4.2.6.1版本 javamail com.sun.mail 为了实现这一目标,我使用了一个邮件入站通道适配器: <mail:inbound-channel-adapter id="mailsGiaLetteAdapter" store-uri="imaps://${maildispatcher.daemon.legalmail.user}:${maildispatcher.daemon

我想更新远程imap邮件文件夹中某些邮件的标志。 我正在使用

  • spring集成邮件4.2.6.1版本
  • javamail com.sun.mail
为了实现这一目标,我使用了一个邮件入站通道适配器:

<mail:inbound-channel-adapter
    id="mailsGiaLetteAdapter"
    store-uri="imaps://${maildispatcher.daemon.legalmail.user}:${maildispatcher.daemon.legalmail.password}@${maildispatcher.daemon.legalmail.imap.host}:${maildispatcher.daemon.legalmail.imap.port}/INBOX" 
    channel="emailsGiaLetteChannel" 
    auto-startup="true" 
    should-delete-messages="false"   
    should-mark-messages-as-read="true" 
    java-mail-properties="javaMailProperties" 
    search-term-strategy="mailGiaLetteSearchTermStrategy"
    >
        <int:poller  fixed-rate="5000" max-messages-per-poll="1000" >
            <int:transactional  synchronization-factory="syncFactoryImpostazioneDelleMailComeDaLeggere" />
    </int:poller>

 </mail:inbound-channel-adapter>
这是一张iterface

真正的实现是

  IntegrationMimeMessage
中定义的私有类

org.springframework.integration.mail.AbstractMailReceiver
我尝试将java邮件库更新到最后一个版本

要将看到的邮件标志从true更改为false,请执行以下操作:

 // message is a MimeMessage implemented with IntegrationMimeMessage
 Folder folder = message.getFolder();
 folder.open(Folder.READ_WRITE);
 MimeMessage[] messages = {message};
        Flags flags = new Flags(Flag.SEEN);
        folder.setFlags(messages,flags , false);
我收到一个ClassCastException

  org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage cannot be cast to com.sun.mail.imap.IMAPMessage
在javamail method Utility.toMessageSet中:

   org.springframework.integration.mail.AbstractMailReceiver$IntegrationMimeMessage cannot be cast to com.sun.mail.imap.IMAPMessage
at com.sun.mail.imap.Utility.toMessageSet(Utility.java:61)
at com.sun.mail.imap.Utility.toMessageSetSorted(Utility.java:138)
at com.sun.mail.imap.IMAPFolder.setFlags(IMAPFolder.java:1415)
at it.assimoco.maildispatcher.daemon.legalmail.ProcessorePerImpostareLeMailComeDaLeggere.afterCommit(ProcessorePerImpostareLeMailComeDaLeggere.java:32)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
尤其是在method Utility.toMessageSet中,此强制转换会导致错误:

   java.mail.Message msg = (IMAPMessage)msgs[i];
问题是

  • 作为参数到达toMessageSet方法的IntegrationMimMessage扩展了MimMessage
  • ImapMessage扩展了mimessage

但是IntegrationMimMessage和ImapMimMessage是不相关的,因此错误的原因是。

查看中IntegrationMimMessage的源代码,似乎没有办法做到这一点。IntegrationMimMessage正在包装原始的MimMessage,但没有公开足够的信息以返回原始。有一个getFolder方法应该允许您访问原始文件夹对象,并且注释声称它是为此目的而存在的,但是如果没有原始IMAPMessage对象或原始邮件编号,则无法对文件夹对象使用setFlags方法


您可能应该针对提交一个问题。

请告诉我们,您是否可以将项目升级到最新的
4.3.21
,以及该版本如何使用?关键是
4.2.x
已经不受支持了。建议每个人至少升级到最新的
4.3.x
   java.mail.Message msg = (IMAPMessage)msgs[i];