Search in sources :

Example 6 with Flags

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

the class ImapMailSearchTermsTests method validateSearchTermsWhenShouldMarkAsReadNoExistingFlagsGuts.

public void validateSearchTermsWhenShouldMarkAsReadNoExistingFlagsGuts(String userFlag, ImapMailReceiver receiver) throws NoSuchFieldException, IllegalAccessException, InvocationTargetException {
    receiver.setShouldMarkMessagesAsRead(true);
    receiver.setBeanFactory(mock(BeanFactory.class));
    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();
    SearchTerm searchTerms = (SearchTerm) compileSearchTerms.invoke(receiver, flags);
    assertThat(searchTerms instanceof NotTerm).isTrue();
    NotTerm notTerm = (NotTerm) searchTerms;
    Flags siFlags = new Flags();
    siFlags.add(userFlag);
    assertThat(((FlagTerm) notTerm.getTerm()).getFlags()).isEqualTo(siFlags);
}
Also used : Field(java.lang.reflect.Field) FlagTerm(jakarta.mail.search.FlagTerm) 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)

Example 7 with Flags

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

the class ImapMailReceiver method searchForNewMessages.

/**
 * Retrieves new messages from this receiver's folder. This implementation
 * creates a {@link SearchTerm} that searches for all messages in the
 * folder that are {@link jakarta.mail.Flags.Flag#RECENT RECENT}, not
 * {@link jakarta.mail.Flags.Flag#ANSWERED ANSWERED}, and not
 * {@link jakarta.mail.Flags.Flag#DELETED DELETED}. The search term is used
 * to {@link Folder#search(SearchTerm) search} for new messages.
 * @return the new messages
 * @throws MessagingException in case of JavaMail errors
 */
@Override
protected Message[] searchForNewMessages() throws MessagingException {
    Folder folderToUse = getFolder();
    Flags supportedFlags = folderToUse.getPermanentFlags();
    SearchTerm searchTerm = compileSearchTerms(supportedFlags);
    if (folderToUse.isOpen()) {
        return nullSafeMessages(searchTerm != null ? folderToUse.search(searchTerm) : folderToUse.getMessages());
    }
    throw new MessagingException("Folder is closed");
}
Also used : MessagingException(jakarta.mail.MessagingException) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) SearchTerm(jakarta.mail.search.SearchTerm)

Example 8 with Flags

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

the class Pop3MailReceiverTests method receiveAndDontSetDeleteWithoutUrl.

@Test
public void receiveAndDontSetDeleteWithoutUrl() throws Exception {
    AbstractMailReceiver receiver = new Pop3MailReceiver();
    receiver = spy(receiver);
    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);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    final Message[] messages = new Message[] { msg1, msg2 };
    doAnswer(invocation -> null).when(receiver).openFolder();
    doAnswer(invocation -> messages).when(receiver).searchForNewMessages();
    doAnswer(invocation -> null).when(receiver).fetchMessages(messages);
    receiver.afterPropertiesSet();
    receiver.receive();
    verify(msg1, times(0)).setFlag(Flag.DELETED, true);
    verify(msg2, times(0)).setFlag(Flag.DELETED, true);
}
Also used : Field(java.lang.reflect.Field) Message(jakarta.mail.Message) MimeMessage(jakarta.mail.internet.MimeMessage) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) Test(org.junit.jupiter.api.Test)

Example 9 with Flags

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

the class Pop3MailReceiverTests method receiveAndDelete.

@Test
public void receiveAndDelete() throws Exception {
    AbstractMailReceiver receiver = new Pop3MailReceiver();
    receiver.setShouldDeleteMessages(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);
    when(folder.getPermanentFlags()).thenReturn(new Flags(Flags.Flag.USER));
    folderField.set(receiver, folder);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    final Message[] messages = new Message[] { msg1, msg2 };
    doAnswer(invocation -> {
        DirectFieldAccessor accessor = new DirectFieldAccessor(invocation.getMock());
        int folderOpenMode = (Integer) accessor.getPropertyValue("folderOpenMode");
        if (folderOpenMode != Folder.READ_WRITE) {
            throw new IllegalArgumentException("Folder had to be open in READ_WRITE mode");
        }
        return null;
    }).when(receiver).openFolder();
    doAnswer(invocation -> messages).when(receiver).searchForNewMessages();
    doAnswer(invocation -> null).when(receiver).fetchMessages(messages);
    receiver.afterPropertiesSet();
    receiver.receive();
    verify(msg1, times(1)).setFlag(Flag.DELETED, true);
    verify(msg2, times(1)).setFlag(Flag.DELETED, true);
}
Also used : Field(java.lang.reflect.Field) Message(jakarta.mail.Message) MimeMessage(jakarta.mail.internet.MimeMessage) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) Test(org.junit.jupiter.api.Test)

Example 10 with Flags

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

the class Pop3MailReceiverTests method receiveAndDontSetDeleteWithUrl.

@Test
public void receiveAndDontSetDeleteWithUrl() throws Exception {
    AbstractMailReceiver receiver = new Pop3MailReceiver("pop3://some.host");
    receiver = spy(receiver);
    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);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    final Message[] messages = new Message[] { msg1, msg2 };
    doAnswer(invocation -> null).when(receiver).openFolder();
    doAnswer(invocation -> messages).when(receiver).searchForNewMessages();
    doAnswer(invocation -> null).when(receiver).fetchMessages(messages);
    receiver.afterPropertiesSet();
    receiver.receive();
    verify(msg1, times(0)).setFlag(Flag.DELETED, true);
    verify(msg2, times(0)).setFlag(Flag.DELETED, true);
}
Also used : Field(java.lang.reflect.Field) Message(jakarta.mail.Message) MimeMessage(jakarta.mail.internet.MimeMessage) BeanFactory(org.springframework.beans.factory.BeanFactory) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) 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