Я хочу обновить флаг для некоторого сообщения в удаленной папке почты imap.Я использую
- spring -gration-mail 4.2.6.RELEASE
- javamail com.sun.mail
Для достижения этой цели яm используя почтовый адаптер входящего канала:
<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
частного класса, определенного в
org.springframework.integration.mail.AbstractMailReceiver
Я пытался обновить почтовую библиотеку Java до самого последнего.
Чтобы изменить почтовый флаг Seen с 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 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];
Проблема в том, что
- IntegrationMimeMessage, который поступает в качестве параметра в метод toMessageSet, расширяет MimeMessage
- ImapMessage расширяетMimeMessage
, но IntegrationMimeMessage и ImapMimeMessage не связаны, поэтому причина ошибки.