Package com.canoo.webtest.plugins.emailtest

Source Code of com.canoo.webtest.plugins.emailtest.EmailHelper

// Released under the Canoo Webtest license.
package com.canoo.webtest.plugins.emailtest;

import java.util.Properties;

import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.NoSuchProviderException;

import org.apache.log4j.Logger;

import com.canoo.webtest.util.ConversionUtil;

/**
* Helper class for processing email messages.
*
* @author Paul King
* @author Luca Scheuring
* @author lofi@mountproc.org
*/
public class EmailHelper
{
    private static final Logger LOG = Logger.getLogger(EmailHelper.class);

    /**
     * log into Email server and fetch mails (only headers)
     *
     * @return message array
     */
    Message[] getMessages(final Folder folder) throws MessagingException {
        // Get the message wrappers
        final Message[] msgs = folder.getMessages();
        LOG.debug("Login to Email server successful, " + msgs.length + " message(s) on server");
        return msgs;
    }

    Message getMessage(final int id, final Folder folder) throws MessagingException {
        // Get the message wrappers
        final Message[] msgs = getMessages(folder);
        for (int i = 0; i < msgs.length; i++) {
            if (msgs[i].getMessageNumber() == id) {
                return msgs[i];
            }
        }
        return null;
    }

    /**
     * Mark a message for deletion (message gets deleted when closing inbox)
     *
     * @param m message to be deleted
     */
    void markForDelete(final Message m) throws MessagingException {
        m.setFlag(Flags.Flag.DELETED, true);
        LOG.debug("Message " + m.getMessageNumber() + " marked for delete");
    }

    Folder getInboxFolder(final EmailConfigInfo info) throws MessagingException {
        int port = -1;
        String server = info.getServer();
        final int colonPosn = server.indexOf(":");
        if (colonPosn != -1) {
            port = extractPort(server, colonPosn);
            server = server.substring(0, colonPosn);
        }
        processDelayIfNeeded(info.getDelay());

        // Get the default session
        final Session session = getSessionInstance(System.getProperties());

        // Get an email message store, and connect to it
        final Store store = getStore(session, info.getType());
        store.connect(server, port, info.getUsername(), info.getPassword());

        // Try to get the default folder
        Folder folder = store.getDefaultFolder();
        if (folder == null) {
            throw new MessagingException("No default folder");
        }

        // ...and its INBOX
        folder = folder.getFolder("INBOX");
        if (folder == null) {
            throw new MessagingException("No INBOX");
        }

        // Open the folder with r/w-access
        folder.open(Folder.READ_WRITE);
        return folder;
    }

    private static int extractPort(final String server, final int colonPosn) throws MessagingException {
        final String portStr = server.substring(colonPosn + 1);
        try {
            return Integer.parseInt(portStr);
        } catch (NumberFormatException e) {
            throw new MessagingException("Port must be numeric, illegal value: " + portStr);
        }
    }

    private static void processDelayIfNeeded(final String delayStr) throws MessagingException {
        if (delayStr != null) {
            try {
                final int delay = ConversionUtil.convertToInt(delayStr, 0);
                Thread.sleep(delay * 1000);
            } catch (NumberFormatException nfe) {
                throw new MessagingException("Delay must be numeric, illegal value: " + delayStr);
            } catch (InterruptedException ie) {/* ignore */
            }
        }
    }

    protected Store getStore(final Session session, final String type) throws NoSuchProviderException {
        return session.getStore(type);
    }

    protected Session getSessionInstance(final Properties properties) {
        return Session.getInstance(properties);
    }

    /**
     * log out of email server. expunge if deleteOnServer is true
     */
    void logout(final Folder folder, final boolean deleteOnServer) {
        try {
            if (folder != null) {
                LOG.debug("closing INBOX...");
                folder.close(deleteOnServer);
            }
        } catch (MessagingException e) {
            LOG.warn("Failed to close INBOX folder.", e);
        }
    }
}
TOP

Related Classes of com.canoo.webtest.plugins.emailtest.EmailHelper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.