Search in sources :

Example 16 with Folder

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

the class MessageListFunctions method searchMessageList.

private Sequence searchMessageList(Sequence[] args, Sequence contextSequence) throws XPathException {
    Message[] msgList;
    // was a folder handle specified?
    if (args[0].isEmpty() || args[1].isEmpty()) {
        throw (new XPathException(this, "Folder handle or Search Terms 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"));
    }
    Node searchTermsXML = ((NodeValue) args[1].itemAt(0)).getNode();
    try {
        msgList = folder.search(parseSearchTerms(searchTermsXML));
        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 : NodeValue(org.exist.xquery.value.NodeValue) Message(jakarta.mail.Message) XPathException(org.exist.xquery.XPathException) MessagingException(jakarta.mail.MessagingException) IntegerValue(org.exist.xquery.value.IntegerValue) Node(org.w3c.dom.Node) Folder(jakarta.mail.Folder)

Example 17 with Folder

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

the class MailFolderFunctions method getMailFolder.

private Sequence getMailFolder(Sequence[] args, Sequence contextSequence) throws XPathException {
    Folder folder;
    // was a store handle specified?
    if (args[0].isEmpty() || args[1].isEmpty()) {
        throw (new XPathException(this, "Store handle and/or folder name not specified"));
    }
    // get the Store
    long storeHandle = ((IntegerValue) args[0].itemAt(0)).getLong();
    Store store = MailModule.retrieveStore(context, storeHandle);
    if (store == null) {
        throw (new XPathException(this, "Invalid Store handle specified"));
    }
    // get the Folder Name
    String name = args[1].getStringValue();
    try {
        folder = store.getFolder(name);
        folder.open(Folder.READ_WRITE);
    } catch (MessagingException me) {
        throw (new XPathException(this, "Failed to open mail folder", me));
    }
    return (new IntegerValue(MailModule.storeFolder(context, folder)));
}
Also used : XPathException(org.exist.xquery.XPathException) MessagingException(jakarta.mail.MessagingException) IntegerValue(org.exist.xquery.value.IntegerValue) Store(jakarta.mail.Store) Folder(jakarta.mail.Folder)

Example 18 with Folder

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

the class AbstractMailReceiver method receive.

@Override
public Object[] receive() throws jakarta.mail.MessagingException {
    // NOSONAR - guarded with the getReadHoldCount()
    this.folderReadLock.lock();
    try {
        try {
            Folder folderToCheck = getFolder();
            if (folderToCheck == null || !folderToCheck.isOpen()) {
                this.folderReadLock.unlock();
                this.folderWriteLock.lock();
                try {
                    openFolder();
                    this.folderReadLock.lock();
                } finally {
                    this.folderWriteLock.unlock();
                }
            }
            return convertMessagesIfNecessary(searchAndFilterMessages());
        } finally {
            if (this.autoCloseFolder) {
                closeFolder();
            }
        }
    } finally {
        if (this.folderLock.getReadHoldCount() > 0) {
            this.folderReadLock.unlock();
        }
    }
}
Also used : Folder(jakarta.mail.Folder)

Example 19 with Folder

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

the class ImapMailReceiverTests method testImapLifecycleForRaceCondition.

// see INT-1801
@Test
public void testImapLifecycleForRaceCondition() throws Exception {
    for (int i = 0; i < 100; i++) {
        final ImapMailReceiver receiver = new ImapMailReceiver("imap://foo");
        Store store = mock(Store.class);
        Folder folder = mock(Folder.class);
        given(folder.exists()).willReturn(true);
        given(folder.isOpen()).willReturn(true);
        given(folder.search(Mockito.any())).willReturn(new 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();
        new Thread(() -> {
            try {
                receiver.receive();
            } catch (jakarta.mail.MessagingException e) {
                if (e.getCause() instanceof NullPointerException) {
                    failed.getAndIncrement();
                }
            }
        }).start();
        new Thread(() -> {
            try {
                receiver.destroy();
            } catch (Exception ignore) {
            // ignore
            }
        }).start();
    }
    assertThat(failed.get()).isEqualTo(0);
}
Also used : MessagingException(jakarta.mail.MessagingException) URLName(jakarta.mail.URLName) Store(jakarta.mail.Store) Flags(jakarta.mail.Flags) Folder(jakarta.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder) AddressException(jakarta.mail.internet.AddressException) MessagingException(jakarta.mail.MessagingException) IOException(java.io.IOException) FolderClosedException(jakarta.mail.FolderClosedException) DirectFieldAccessor(org.springframework.beans.DirectFieldAccessor) BeanFactory(org.springframework.beans.factory.BeanFactory) Test(org.junit.jupiter.api.Test) ServerSetupTest(com.icegreen.greenmail.util.ServerSetupTest)

Example 20 with Folder

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

the class ImapMailReceiverTests method receiveAndDontMarkAsRead.

@Test
public void receiveAndDontMarkAsRead() throws Exception {
    AbstractMailReceiver receiver = new ImapMailReceiver();
    ((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 -> 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);
}
Also used : Field(java.lang.reflect.Field) MimeMessage(jakarta.mail.internet.MimeMessage) Message(jakarta.mail.Message) 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)

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