Интеграция Spring всегда помечает полученные сообщения как прочитанные

#java #gmail #spring-integration #imap

#java #gmail #spring-интеграция #imap

Вопрос:

Я получаю входящие сообщения в свою учетную запись gmail с помощью Spring integration mail. Сообщения принимаются без проблем, но в моей учетной записи gmail они всегда помечаются как прочитанные. Вот моя конфигурация XML:

 <int:channel id="receiveChannel"/>
replace 'userid and 'password' with the real values
<int-mail:imap-idle-channel-adapter id="customAdapter"
                                    store-uri="imaps://proximahaiz@gmail.com:myPassword@imap.gmail.com:993/inbox"
                                    channel="receiveChannel"
                                    auto-startup="true"
                                    should-delete-messages="false"
                                    should-mark-messages-as-read="false"
                                    java-mail-properties="javaMailProperties"
/>


<util:properties id="javaMailProperties">
    <prop key="mail.imap.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
    <prop key="mail.imap.socketFactory.fallback">false</prop>
    <prop key="mail.store.protocol">imaps</
    <prop key="mail.debug">false</prop>
</
  

Я добавил параметр should-mark-messages-as-read = «false», но все получаемые сообщения по-прежнему помечаются как прочитанные.
Я использую версию Spring Integration версии 4.2.9.RELEASE.
Это мой java-код:

 public class GmailInboundImapIdleAdapterServiceImpl implements GmailInboundImapIdleAdapterService {
private static Logger logger = Logger.getLogger(GmailInboundImapIdleAdapterServiceImpl.class);
private static String MAIL_SUBJECT = "mail_subject";
private static String MAIL_FROM = "mail_from";
private static EmailParser emailParser = new EmailParser();
@Autowired
private EmailReceiverService emailReceiverService;


@Override
public void startReceiveEmails() {
    ApplicationContext acProxy = new ClassPathXmlApplicationContext("/integration/gmail-imap-idle-config-proxytest.xml");
    DirectChannel inputChannelProxy = acProxy.getBean("receiveChannel", DirectChannel.class);

    inputChannelProxy.subscribe(new MessageHandler() {
        @Override
        public void handleMessage(Message<?> message) throws MessagingException {
            initMessageReceiving(message);
        }
    });
}
  

Что мне сделать, чтобы оставлять сообщения, помеченные как непрочитанные, в учетной записи gmail после того, как я получил их в свое приложение?

журналы из отладки

Ответ №1:

Измените mail.debug свойство java на true .

Если для флага should mark messages read установлено значение false, адаптер не должен устанавливать Seen флаг, который можно подтвердить, просмотрев выходные данные отладки.

В этом случае Gmail может не соблюдать протокол IMAP и использовать некоторые другие критерии для пометки сообщения как прочитанного.

Комментарии:

1. И для этого необходимо использовать ВЫБОРКУ. ПРОСМОТР, а не ВЫБОРКА, или ПРОВЕРКА, а не ВЫБОР.

2. Спасибо за быстрый ответ. Загруженные журналы, разве вы не можете их увидеть и сказать, что не так?

3. Вам нужно показать больше журнала; это показывает только поиск. Разве вы не можете загрузить все это в виде текстового файла?