Search in sources :

Example 1 with Folder

use of javax.mail.Folder in project camel by apache.

the class MailConsumer method processCommit.

/**
     * Strategy to flag the message after being processed.
     *
     * @param mail     the mail message
     * @param exchange the exchange
     */
protected void processCommit(Message mail, Exchange exchange) {
    try {
        // ensure folder is open
        if (!folder.isOpen()) {
            folder.open(Folder.READ_WRITE);
        }
        String uid = (String) exchange.removeProperty(MAIL_MESSAGE_UID);
        // Otherwise setting the DELETE/SEEN flag won't delete the message.
        if (getEndpoint().getConfiguration().getProtocol().startsWith("pop3")) {
            int count = folder.getMessageCount();
            Message found = null;
            LOG.trace("Looking for POP3Message with UID {} from folder with {} mails", uid, count);
            for (int i = 1; i <= count; ++i) {
                Message msg = folder.getMessage(i);
                if (uid.equals(getEndpoint().getMailUidGenerator().generateUuid(getEndpoint(), msg))) {
                    LOG.debug("Found POP3Message with UID {} from folder with {} mails", uid, count);
                    found = msg;
                    break;
                }
            }
            if (found == null) {
                boolean delete = getEndpoint().getConfiguration().isDelete();
                LOG.warn("POP3message not found in folder. Message cannot be marked as " + (delete ? "DELETED" : "SEEN"));
            } else {
                mail = found;
            }
        }
        org.apache.camel.Message in = exchange.getIn();
        MailConfiguration config = getEndpoint().getConfiguration();
        // header values override configuration values
        String copyTo = in.getHeader("copyTo", config.getCopyTo(), String.class);
        boolean delete = in.getHeader("delete", config.isDelete(), boolean.class);
        // Copy message into different imap folder if asked
        if (config.getProtocol().equals(MailUtils.PROTOCOL_IMAP) || config.getProtocol().equals(MailUtils.PROTOCOL_IMAPS)) {
            if (copyTo != null) {
                LOG.trace("IMAP message needs to be copied to {}", copyTo);
                Folder destFolder = store.getFolder(copyTo);
                if (!destFolder.exists()) {
                    destFolder.create(Folder.HOLDS_MESSAGES);
                }
                folder.copyMessages(new Message[] { mail }, destFolder);
                LOG.trace("IMAP message {} copied to {}", mail, copyTo);
            }
        }
        if (delete) {
            LOG.trace("Exchange processed, so flagging message as DELETED");
            mail.setFlag(Flags.Flag.DELETED, true);
        } else {
            LOG.trace("Exchange processed, so flagging message as SEEN");
            mail.setFlag(Flags.Flag.SEEN, true);
        }
        // need to confirm or remove on commit at last
        if (getEndpoint().getIdempotentRepository() != null) {
            if (getEndpoint().isIdempotentRepositoryRemoveOnCommit()) {
                getEndpoint().getIdempotentRepository().remove(uid);
            } else {
                getEndpoint().getIdempotentRepository().confirm(uid);
            }
        }
    } catch (MessagingException e) {
        getExceptionHandler().handleException("Error occurred during committing mail message: " + mail, exchange, e);
    }
}
Also used : Message(javax.mail.Message) MessagingException(javax.mail.MessagingException) Folder(javax.mail.Folder) IMAPFolder(com.sun.mail.imap.IMAPFolder)

Example 2 with Folder

use of javax.mail.Folder in project camel by apache.

the class MailConsumerUnsupportedCharsetTest method prepareMailbox.

private void prepareMailbox() throws Exception {
    // connect to mailbox
    Mailbox.clearAll();
    JavaMailSender sender = new DefaultJavaMailSender();
    Store store = sender.getSession().getStore("imap");
    store.connect("localhost", 25, "jones", "secret");
    Folder folder = store.getFolder("INBOX");
    folder.open(Folder.READ_WRITE);
    folder.expunge();
    Message[] msg = new Message[1];
    MimeMessage mime = new MimeMessage(sender.getSession());
    mime.setContent("Bye World", "text/plain; charset=ThisIsNotAKnownCharset");
    msg[0] = mime;
    folder.appendMessages(msg);
    folder.close(true);
}
Also used : Message(javax.mail.Message) MimeMessage(javax.mail.internet.MimeMessage) MimeMessage(javax.mail.internet.MimeMessage) Store(javax.mail.Store) Folder(javax.mail.Folder)

Example 3 with Folder

use of javax.mail.Folder in project camel by apache.

the class MailDoNotDeleteIfProcessFailsTest method prepareMailbox.

private void prepareMailbox() throws Exception {
    // connect to mailbox
    Mailbox.clearAll();
    JavaMailSender sender = new DefaultJavaMailSender();
    Store store = sender.getSession().getStore("imap");
    store.connect("localhost", 25, "claus", "secret");
    Folder folder = store.getFolder("INBOX");
    folder.open(Folder.READ_WRITE);
    folder.expunge();
    // inserts two new messages
    Message[] msg = new Message[2];
    msg[0] = new MimeMessage(sender.getSession());
    msg[0].setText("Message 1");
    msg[0].setHeader("Message-ID", "0");
    msg[0].setFlag(Flags.Flag.SEEN, false);
    msg[1] = new MimeMessage(sender.getSession());
    msg[1].setText("Message 2");
    msg[0].setHeader("Message-ID", "1");
    msg[1].setFlag(Flags.Flag.SEEN, true);
    folder.appendMessages(msg);
    folder.close(true);
}
Also used : Message(javax.mail.Message) MimeMessage(javax.mail.internet.MimeMessage) MimeMessage(javax.mail.internet.MimeMessage) Store(javax.mail.Store) Folder(javax.mail.Folder)

Example 4 with Folder

use of javax.mail.Folder in project camel by apache.

the class NestedMimeMessageConsumeTest method prepareMailbox.

private void prepareMailbox(String user) throws MessagingException {
    // connect to mailbox
    JavaMailSender sender = new DefaultJavaMailSender();
    Store store = sender.getSession().getStore("pop3");
    store.connect("localhost", 25, user, "secret");
    Folder folder = store.getFolder("INBOX");
    folder.open(Folder.READ_WRITE);
    folder.expunge();
    InputStream is = getClass().getResourceAsStream("/nested-multipart.elm");
    Message hurzMsg = new MimeMessage(sender.getSession(), is);
    Message[] messages = new Message[] { hurzMsg };
    // insert one signed message
    folder.appendMessages(messages);
    folder.close(true);
}
Also used : Message(javax.mail.Message) MimeMessage(javax.mail.internet.MimeMessage) MimeMessage(javax.mail.internet.MimeMessage) InputStream(java.io.InputStream) Store(javax.mail.Store) Folder(javax.mail.Folder)

Example 5 with Folder

use of javax.mail.Folder in project camel by apache.

the class MailProcessOnlyUnseenMessagesTest method prepareMailbox.

private void prepareMailbox() throws Exception {
    // connect to mailbox
    Mailbox.clearAll();
    JavaMailSender sender = new DefaultJavaMailSender();
    Store store = sender.getSession().getStore("imap");
    store.connect("localhost", 25, "claus", "secret");
    Folder folder = store.getFolder("INBOX");
    folder.open(Folder.READ_WRITE);
    folder.expunge();
    // inserts two messages with the SEEN flag
    Message[] msg = new Message[2];
    msg[0] = new MimeMessage(sender.getSession());
    msg[0].setText("Message 1");
    msg[0].setHeader("Message-ID", "0");
    msg[0].setFlag(Flags.Flag.SEEN, true);
    msg[1] = new MimeMessage(sender.getSession());
    msg[1].setText("Message 2");
    msg[0].setHeader("Message-ID", "1");
    msg[1].setFlag(Flags.Flag.SEEN, true);
    folder.appendMessages(msg);
    folder.close(true);
}
Also used : Message(javax.mail.Message) MimeMessage(javax.mail.internet.MimeMessage) MimeMessage(javax.mail.internet.MimeMessage) Store(javax.mail.Store) Folder(javax.mail.Folder)

Aggregations

Folder (javax.mail.Folder)117 Message (javax.mail.Message)73 Store (javax.mail.Store)51 MessagingException (javax.mail.MessagingException)43 MimeMessage (javax.mail.internet.MimeMessage)42 Flags (javax.mail.Flags)20 Session (javax.mail.Session)18 IMAPFolder (com.sun.mail.imap.IMAPFolder)17 Test (org.junit.Test)17 Properties (java.util.Properties)16 BeanFactory (org.springframework.beans.factory.BeanFactory)15 IOException (java.io.IOException)14 Field (java.lang.reflect.Field)14 MockEndpoint (org.apache.camel.component.mock.MockEndpoint)11 ProcessingException (org.eclipse.scout.rt.platform.exception.ProcessingException)10 ArrayList (java.util.ArrayList)9 DirectFieldAccessor (org.springframework.beans.DirectFieldAccessor)9 Date (java.util.Date)8 LongRunningIntegrationTest (org.springframework.integration.test.support.LongRunningIntegrationTest)8 NoSuchProviderException (javax.mail.NoSuchProviderException)6