Search in sources :

Example 21 with Folder

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

the class ImapMailReceiverTests method receiveMarkAsReadAndDelete.

@Test
public void receiveMarkAsReadAndDelete() throws Exception {
    AbstractMailReceiver receiver = new ImapMailReceiver();
    ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(true);
    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);
    given(folder.getPermanentFlags()).willReturn(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 };
    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();
    verify(msg1, times(1)).setFlag(Flag.SEEN, true);
    verify(msg2, times(1)).setFlag(Flag.SEEN, true);
    verify(receiver, times(1)).deleteMessages(Mockito.any());
}
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) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 22 with Folder

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

the class ImapMailReceiverTests method receiveAndDontMarkAsReadButDelete.

@Test
public void receiveAndDontMarkAsReadButDelete() throws Exception {
    AbstractMailReceiver receiver = new ImapMailReceiver();
    receiver.setShouldDeleteMessages(true);
    ((ImapMailReceiver) receiver).setShouldMarkMessagesAsRead(false);
    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);
    Message msg1 = mock(MimeMessage.class);
    Message msg2 = mock(MimeMessage.class);
    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.afterPropertiesSet();
    receiver.receive();
    verify(msg1, times(0)).setFlag(Flag.SEEN, true);
    verify(msg2, times(0)).setFlag(Flag.SEEN, true);
    verify(msg1, times(1)).setFlag(Flag.DELETED, true);
    verify(msg2, times(1)).setFlag(Flag.DELETED, true);
}
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) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 23 with Folder

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

the class ImapMailReceiverTests method receiveAndIgnoreMarkAsReadDontDelete.

@Test
public void receiveAndIgnoreMarkAsReadDontDelete() throws Exception {
    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(Folder.class);
    given(folder.getPermanentFlags()).willReturn(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 };
    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();
    verify(msg1, times(1)).setFlag(Flag.SEEN, true);
    verify(msg2, times(1)).setFlag(Flag.SEEN, true);
    verify(receiver, times(0)).deleteMessages(Mockito.any());
}
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) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 24 with Folder

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

the class ImapMailReceiverTests method testAttachments.

@Test
public void testAttachments() throws Exception {
    final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
    Folder folder = testAttachmentsGuts(receiver);
    Message[] messages = (Message[]) receiver.receive();
    Object content = messages[0].getContent();
    assertThat(((Multipart) content).getBodyPart(0).getContent().toString().trim()).isEqualTo("bar");
    assertThat(((Multipart) content).getBodyPart(1).getContent().toString().trim()).isEqualTo("foo");
    assertThat(messages[0].getFolder()).isSameAs(folder);
}
Also used : MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 25 with Folder

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

the class ImapMailReceiver method waitForNewMessages.

/**
 * This method is unique to the IMAP receiver and only works if IMAP IDLE
 * is supported (see RFC 2177 for more detail).
 * @throws MessagingException Any MessagingException.
 */
public void waitForNewMessages() throws MessagingException {
    openFolder();
    Folder folder = getFolder();
    Assert.state(folder instanceof IMAPFolder, () -> "folder is not an instance of [" + IMAPFolder.class.getName() + "]");
    IMAPFolder imapFolder = (IMAPFolder) folder;
    if (imapFolder.hasNewMessages()) {
        return;
    } else if (!folder.getPermanentFlags().contains(Flags.Flag.RECENT) && searchForNewMessages().length > 0) {
        return;
    }
    try {
        this.pingTask = this.scheduler.schedule(this.idleCanceler, new Date(System.currentTimeMillis() + this.cancelIdleInterval));
        if (imapFolder.isOpen()) {
            imapFolder.idle(true);
        }
    } finally {
        if (this.pingTask != null) {
            this.pingTask.cancel(true);
        }
    }
}
Also used : IMAPFolder(com.sun.mail.imap.IMAPFolder) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) Date(java.util.Date)

Aggregations

Folder (jakarta.mail.Folder)27 Message (jakarta.mail.Message)18 Flags (jakarta.mail.Flags)16 Test (org.junit.jupiter.api.Test)16 BeanFactory (org.springframework.beans.factory.BeanFactory)15 MimeMessage (jakarta.mail.internet.MimeMessage)14 Field (java.lang.reflect.Field)14 IMAPFolder (com.sun.mail.imap.IMAPFolder)12 DirectFieldAccessor (org.springframework.beans.DirectFieldAccessor)9 ServerSetupTest (com.icegreen.greenmail.util.ServerSetupTest)8 MessagingException (jakarta.mail.MessagingException)7 Store (jakarta.mail.Store)4 SearchTerm (jakarta.mail.search.SearchTerm)4 XPathException (org.exist.xquery.XPathException)4 IntegerValue (org.exist.xquery.value.IntegerValue)4 NotTerm (jakarta.mail.search.NotTerm)3 Method (java.lang.reflect.Method)3 URLName (jakarta.mail.URLName)2 FolderClosedException (jakarta.mail.FolderClosedException)1 Session (jakarta.mail.Session)1