org.springframework.integration.mail.class 在使用 spring 集成邮件 - imap 接收的邮件消息上投射异常更改标志
org.springframework.integration.mail.class cast exception changing flag on a mailmessage received with spring integration mail - imap
我想更新远程 imap 邮件文件夹中某些邮件的标志。
我正在使用
- spring-集成邮件 4.2.6.RELEASE
- java邮件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>
我成功获取了searchTermStrategy过滤的消息
我获得了
的集合
javax.mail.internet.MimeMessage
这是一个界面。
真正的实现是
的实例
IntegrationMimeMessage
中定义的私有 class
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
在java邮件方法中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)
特别是在方法 Utility.toMessageSet 中 此转换导致错误:
java.mail.Message msg = (IMAPMessage)msgs[i];
问题是
- 作为 toMessageSet 方法的参数到达的 IntegrationMimeMessage 扩展了 MimeMessage
- ImapMessage 扩展了 MimeMessage
但 IntegrationMimeMessage 和 ImapMimeMessage 不相关,因此是错误原因。
查看AbstractMailReceiver中IntegrationMimeMessage的源代码,似乎没有办法做到这一点。 IntegrationMimeMessage 正在包装原始的 MimeMessage,但没有公开足够的信息来返回原始信息。有一个 getFolder 方法应该允许您访问原始 Folder 对象,评论声称它为此目的而存在,但是没有原始 IMAPMessage 对象或原始消息编号,您不能在 Folder 对象上使用 setFlags 方法.
您可能应该针对 spring-integration 提出问题。
我想更新远程 imap 邮件文件夹中某些邮件的标志。 我正在使用
- spring-集成邮件 4.2.6.RELEASE
- java邮件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>
我成功获取了searchTermStrategy过滤的消息
我获得了
的集合javax.mail.internet.MimeMessage
这是一个界面。
真正的实现是
的实例 IntegrationMimeMessage
中定义的私有 class
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
在java邮件方法中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)
特别是在方法 Utility.toMessageSet 中 此转换导致错误:
java.mail.Message msg = (IMAPMessage)msgs[i];
问题是
- 作为 toMessageSet 方法的参数到达的 IntegrationMimeMessage 扩展了 MimeMessage
- ImapMessage 扩展了 MimeMessage
但 IntegrationMimeMessage 和 ImapMimeMessage 不相关,因此是错误原因。
查看AbstractMailReceiver中IntegrationMimeMessage的源代码,似乎没有办法做到这一点。 IntegrationMimeMessage 正在包装原始的 MimeMessage,但没有公开足够的信息来返回原始信息。有一个 getFolder 方法应该允许您访问原始 Folder 对象,评论声称它为此目的而存在,但是没有原始 IMAPMessage 对象或原始消息编号,您不能在 Folder 对象上使用 setFlags 方法.
您可能应该针对 spring-integration 提出问题。