Spring integration org.springframework.integration.mail.class在使用spring integration mail-imap接收的邮件消息上转换异常标志
我想更新远程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
- 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];