Search in sources :

Example 1 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailReceiverTests method testIdleChannelAdapterException.

@Test
public void testIdleChannelAdapterException() throws Exception {
    ImapIdleChannelAdapter adapter = this.context.getBean("simpleAdapter", ImapIdleChannelAdapter.class);
    // ImapMailReceiver receiver = (ImapMailReceiver) TestUtils.getPropertyValue(adapter, "mailReceiver");
    DirectChannel channel = new DirectChannel();
    channel.subscribe(new AbstractReplyProducingMessageHandler() {

        @Override
        protected Object handleRequestMessage(org.springframework.messaging.Message<?> requestMessage) {
            throw new RuntimeException("Failed");
        }
    });
    adapter.setOutputChannel(channel);
    QueueChannel errorChannel = new QueueChannel();
    adapter.setErrorChannel(errorChannel);
    adapter.setReconnectDelay(1);
    AbstractMailReceiver receiver = new ImapMailReceiver();
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    Field folderField = AbstractMailReceiver.class.getDeclaredField("folder");
    folderField.setAccessible(true);
    Folder folder = mock(IMAPFolder.class);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    willAnswer(invocation -> true).given(folder).isOpen();
    willAnswer(invocation -> null).given(receiver).openFolder();
    DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
    adapterAccessor.setPropertyValue("mailReceiver", receiver);
    MimeMessage mailMessage = mock(MimeMessage.class);
    Flags flags = mock(Flags.class);
    given(mailMessage.getFlags()).willReturn(flags);
    final Message[] messages = new Message[] { mailMessage };
    willAnswer(invocation -> messages).given(receiver).searchForNewMessages();
    willAnswer(invocation -> null).given(receiver).fetchMessages(messages);
    adapter.start();
    org.springframework.messaging.Message<?> replMessage = errorChannel.receive(10000);
    assertThat(replMessage).isNotNull();
    assertThat(((Exception) replMessage.getPayload()).getCause().getMessage()).isEqualTo("Failed");
    adapter.stop();
}
Also used : QueueChannel(org.springframework.integration.channel.QueueChannel) MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) DirectChannel(org.springframework.integration.channel.DirectChannel) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) Field(java.lang.reflect.Field) MimeMessage(jakarta.mail.internet.MimeMessage) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) AbstractReplyProducingMessageHandler(org.springframework.integration.handler.AbstractReplyProducingMessageHandler) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 2 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailReceiverTests method receiveAndMarkAsReadDontDeleteGuts.

private AbstractMailReceiver receiveAndMarkAsReadDontDeleteGuts(AbstractMailReceiver receiver, Message msg1, Message msg2) throws NoSuchFieldException, IllegalAccessException, MessagingException {
    ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(true);
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    Field folderField = AbstractMailReceiver.class.getDeclaredField("folder");
    folderField.setAccessible(true);
    Folder folder = mock(Folder.class);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    final Message[] messages = new Message[] { msg1, msg2 };
    willAnswer(invocation -> {
        DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock());
        int folderOpenMode = (int) accessor.getPropertyValue("folderOpenMode");
        if (folderOpenMode != Folder.READ_WRITE) {
            throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode");
        }
        return null;
    }).given(receiver).openFolder();
    willAnswer(invocation -> messages).given(receiver).searchForNewMessages();
    willAnswer(invocation -> null).given(receiver).fetchMessages(messages);
    receiver.receive();
    return receiver;
}
Also used : Field(java.lang.reflect.Field) MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder)

Example 3 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailReceiverTests method testMessageHistory.

@Test
public void testMessageHistory() throws Exception {
    ImapIdleChannelAdapter adapter = this.context.getBean("simpleAdapter", ImapIdleChannelAdapter.class);
    adapter.setReconnectDelay(1);
    AbstractMailReceiver receiver = new ImapMailReceiver();
    receiver = spy(receiver);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    DirectFieldAccessor adapterAccessor = new DirectFieldAccessor(adapter);
    adapterAccessor.setPropertyValue("mailReceiver", receiver);
    MimeMessage mailMessage = mock(MimeMessage.class);
    Flags flags = mock(Flags.class);
    given(mailMessage.getFlags()).willReturn(flags);
    final Message[] messages = new Message[] { mailMessage };
    willAnswer(invocation -> {
        DirectFieldAccessor accessor = new DirectFieldAccessor((invocation.getMock()));
        IMAPFolder folder = mock(IMAPFolder.class);
        accessor.setPropertyValue("folder", folder);
        given(folder.isOpen()).willReturn(true);
        given(folder.hasNewMessages()).willReturn(true);
        return null;
    }).given(receiver).openFolder();
    willAnswer(invocation -> messages).given(receiver).searchForNewMessages();
    willAnswer(invocation -> null).given(receiver).fetchMessages(messages);
    PollableChannel channel = this.context.getBean("channel", PollableChannel.class);
    adapter.start();
    org.springframework.messaging.Message<?> replMessage = channel.receive(10000);
    MessageHistory history = MessageHistory.read(replMessage);
    assertThat(history).isNotNull();
    Properties componentHistoryRecord = TestUtils.locateComponentInHistory(history, "simpleAdapter", 0);
    assertThat(componentHistoryRecord).isNotNull();
    assertThat(componentHistoryRecord.get("type")).isEqualTo("mail:imap-idle-channel-adapter");
    adapter.stop();
}
Also used : MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) IMAPFolder(com.sun.mail.imap.IMAPFolder) Flags(jakarta.mail.Flags) Properties(java.util.Properties) MessageHistory(org.springframework.integration.history.MessageHistory) MimeMessage(jakarta.mail.internet.MimeMessage) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) PollableChannel(org.springframework.messaging.PollableChannel) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 4 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailReceiverTests method testAttachmentsGuts.

private Folder testAttachmentsGuts(final ImapMailReceiver receiver) throws MessagingException, IOException {
    Store store = mock(Store.class);
    Folder folder = mock(Folder.class);
    given(folder.exists()).willReturn(true);
    given(folder.isOpen()).willReturn(true);
    Message message = new MimeMessage(null, new ClassPathResource("test.mail").getInputStream());
    given(folder.search(Mockito.any())).willReturn(new Message[] { message });
    given(store.getFolder(Mockito.any(URLName.class))).willReturn(folder);
    given(folder.getPermanentFlags()).willReturn(new Flags(Flags.Flag.USER));
    DirectFieldAccessor df = new DirectFieldAccessor(receiver);
    df.setPropertyValue("store", store);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    return folder;
}
Also used : MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) MimeMessage(jakarta.mail.internet.MimeMessage) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) URLName(jakarta.mail.URLName) BeanFactory(org.springframework.beans.factory.BeanFactory) Store(jakarta.mail.Store) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) ClassPathResource(org.springframework.core.io.ClassPathResource)

Example 5 with Flags

use of jakarta.mail.Flags in project spring-integration by spring-projects.

the class ImapMailSearchTermsTests method validateSearchTermsWhenShouldMarkAsReadWithExistingFlags.

@Test
public void validateSearchTermsWhenShouldMarkAsReadWithExistingFlags() throws Exception {
    ImapMailReceiver receiver = new ImapMailReceiver();
    receiver.setShouldMarkMessagesAsRead(true);
    receiver.setBeanFactory(mock(BeanFactory.class));
    receiver.afterPropertiesSet();
    Field folderField = AbstractMailReceiver.class.getDeclaredField("folder");
    folderField.setAccessible(true);
    Folder folder = mock(Folder.class);
    when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    Method compileSearchTerms = ReflectionUtils.findMethod(receiver.getClass(), "compileSearchTerms", Flags.class);
    compileSearchTerms.setAccessible(true);
    Flags flags = new Flags();
    flags.add(Flag.ANSWERED);
    SearchTerm searchTerms = (SearchTerm) compileSearchTerms.invoke(receiver, flags);
    assertThat(searchTerms instanceof AndTerm).isTrue();
    AndTerm andTerm = (AndTerm) searchTerms;
    SearchTerm[] terms = andTerm.getTerms();
    assertThat(terms.length).isEqualTo(2);
    NotTerm notTerm = (NotTerm) terms[0];
    assertThat(((FlagTerm) notTerm.getTerm()).getFlags().contains(Flag.ANSWERED)).isTrue();
    notTerm = (NotTerm) terms[1];
    Flags siFlags = new Flags();
    siFlags.add(AbstractMailReceiver.DEFAULT_SI_USER_FLAG);
    assertThat(((FlagTerm) notTerm.getTerm()).getFlags().contains(siFlags)).isTrue();
}
Also used : AndTerm(jakarta.mail.search.AndTerm) Field(java.lang.reflect.Field) NotTerm(jakarta.mail.search.NotTerm) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Method(java.lang.reflect.Method) Folder(jakarta.mail.Folder) SearchTerm(jakarta.mail.search.SearchTerm) Test(org.junit.jupiter.api.Test)

Aggregations

Flags (jakarta.mail.Flags)24 BeanFactory (org.springframework.beans.factory.BeanFactory)19 Test (org.junit.jupiter.api.Test)17 Folder (jakarta.mail.Folder)16 Message (jakarta.mail.Message)16 Field (java.lang.reflect.Field)16 MimeMessage (jakarta.mail.internet.MimeMessage)15 IMAPFolder (com.sun.mail.imap.IMAPFolder)13 DirectFieldAccessor (org.springframework.beans.DirectFieldAccessor)12 ServerSetupTest (com.icegreen.greenmail.util.ServerSetupTest)11 Store (jakarta.mail.Store)5 URLName (jakarta.mail.URLName)5 SearchTerm (jakarta.mail.search.SearchTerm)5 MessagingException (jakarta.mail.MessagingException)3 FlagTerm (jakarta.mail.search.FlagTerm)3 NotTerm (jakarta.mail.search.NotTerm)3 Method (java.lang.reflect.Method)3 QueueChannel (org.springframework.integration.channel.QueueChannel)3 FolderClosedException (jakarta.mail.FolderClosedException)2 AddressException (jakarta.mail.internet.AddressException)2