org.springframework.integration.mail.class флаг изменения исключения приведения в почтовом сообщении, полученном с помощью почты интеграции Spring - imap - PullRequest
0 голосов
/ 20 сентября 2019

Я хочу обновить флаг для некоторого сообщения в удаленной папке почты 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 не связаны, поэтому причина ошибки.

1 Ответ

1 голос
/ 20 сентября 2019

Глядя на исходный код IntegrationMimeMessage в AbstractMailReceiver , похоже, не существует способа сделать это.IntegrationMimeMessage оборачивает исходный MimeMessage, но не предоставляет достаточно информации, чтобы вернуться к оригиналу.Существует метод getFolder, который должен позволить вам получить доступ к исходному объекту Folder, и комментарий утверждает, что он существует для этой цели, но без исходного объекта IMAPMessage или исходного номера сообщения вы не можете использовать метод setFlags для объекта Folder..

Вероятно, вам следует подать проблему в отношении spring -gration .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...