Search in sources :

Example 1 with Folder

use of jakarta.mail.Folder in project exist by eXist-db.

the class MessageListFunctions method getMessageList.

// ***************************************************************************
// *
// *    Function Implementation Methods
// *
// ***************************************************************************/
private Sequence getMessageList(Sequence[] args, Sequence contextSequence) throws XPathException {
    Message[] msgList;
    // was a folder handle specified?
    if (args[0].isEmpty()) {
        throw (new XPathException(this, "Folder handle not specified"));
    }
    // get the Folder
    long folderHandle = ((IntegerValue) args[0].itemAt(0)).getLong();
    Folder folder = MailModule.retrieveFolder(context, folderHandle);
    if (folder == null) {
        throw (new XPathException(this, "Invalid Folder handle specified"));
    }
    try {
        msgList = folder.getMessages();
        prefetchMessages(folder, msgList);
    } catch (MessagingException me) {
        throw (new XPathException(this, "Failed to get mail list", me));
    }
    return (new IntegerValue(MailModule.storeMessageList(context, msgList, folderHandle)));
}
Also used : Message(jakarta.mail.Message) XPathException(org.exist.xquery.XPathException) MessagingException(jakarta.mail.MessagingException) IntegerValue(org.exist.xquery.value.IntegerValue) Folder(jakarta.mail.Folder)

Example 2 with Folder

use of jakarta.mail.Folder in project exist by eXist-db.

the class MailFolderFunctions method closeMailFolder.

private Sequence closeMailFolder(Sequence[] args, Sequence contextSequence) throws XPathException {
    // was a folder handle specified?
    if (args[0].isEmpty()) {
        throw (new XPathException(this, "Folder handle not specified"));
    }
    boolean expunge = ((BooleanValue) args[1].itemAt(0)).effectiveBooleanValue();
    // get the Folder
    long folderHandle = ((IntegerValue) args[0].itemAt(0)).getLong();
    Folder folder = MailModule.retrieveFolder(context, folderHandle);
    if (folder == null) {
        throw (new XPathException(this, "Invalid Folder handle specified"));
    }
    try {
        folder.close(expunge);
    } catch (MessagingException me) {
        throw (new XPathException(this, "Failed to close mail folder", me));
    } finally {
        MailModule.removeFolder(context, folderHandle);
    }
    return (Sequence.EMPTY_SEQUENCE);
}
Also used : XPathException(org.exist.xquery.XPathException) MessagingException(jakarta.mail.MessagingException) BooleanValue(org.exist.xquery.value.BooleanValue) IntegerValue(org.exist.xquery.value.IntegerValue) Folder(jakarta.mail.Folder)

Example 3 with Folder

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

the class ImapMailReceiverTests method testNullMessages.

@Test
public void testNullMessages() throws Exception {
    Message message1 = mock(Message.class);
    Message message2 = mock(Message.class);
    final Message[] messages1 = new Message[] { null, null, message1 };
    final Message[] messages2 = new Message[] { message2 };
    final SearchTermStrategy searchTermStrategy = mock(SearchTermStrategy.class);
    class TestReceiver extends ImapMailReceiver {

        private boolean firstDone;

        private TestReceiver() {
            setSearchTermStrategy(searchTermStrategy);
        }

        @Override
        protected Folder getFolder() {
            Folder folder = mock(Folder.class);
            given(folder.isOpen()).willReturn(true);
            try {
                given(folder.getMessages()).willReturn(!this.firstDone ? messages1 : messages2);
            } catch (MessagingException ignored) {
            }
            return folder;
        }

        @Override
        public Message[] receive() throws MessagingException {
            Message[] messages = searchForNewMessages();
            this.firstDone = true;
            return messages;
        }
    }
    ImapMailReceiver receiver = new TestReceiver();
    Message[] received = (Message[]) receiver.receive();
    assertThat(received.length).isEqualTo(1);
    assertThat(received[0]).isSameAs(message1);
    received = (Message[]) receiver.receive();
    assertThat(received.length).isEqualTo(1);
    assertThat(received).isSameAs(messages2);
    assertThat(received[0]).isSameAs(message2);
}
Also used : MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) MessagingException(jakarta.mail.MessagingException) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 4 with Folder

use of jakarta.mail.Folder 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 5 with Folder

use of jakarta.mail.Folder 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)

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