Subversion Repositories SmartDukaan

Rev

Rev 4537 | Rev 21881 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

/**
 * 
 */
package in.shop2020.util;

import in.shop2020.model.v1.user.UserContextException;

import java.text.ParseException;
import java.util.Properties;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.thrift.TException;

/**
 * @author mandeep
 * 
 */
public class EmailReader {
    private static final String PROCESSED_FLAG = "processed";

    private static final Log log = LogFactory.getLog(EmailReader.class);

    Store                    store;

    private EmailReader(String username, String password) {
        Properties props = System.getProperties();
        props.setProperty("mail.store.protocol", "imaps");
        try {
            Session session = Session.getDefaultInstance(props, null);
            store = session.getStore("imaps");
            store.connect("imap.gmail.com", username, password);
        } catch (NoSuchProviderException e) {
            log.error("Error getting store", e);
        } catch (MessagingException e) {
            log.error("Error while connecting", e);
        }
    }

    public Folder getInboxFolder() throws MessagingException {
        return store.getFolder("inbox");
    }

    /**
     * @param args
     * @throws MessagingException
     * @throws ParseException
     * @throws TException
     * @throws UserContextException 
     */
    public static void main(String[] args) throws MessagingException,
            ParseException, TException, UserContextException {
        EmailReader helpEmailReader = new EmailReader("help@shop2020.in", "5h0p2o2o");
        Folder inbox = helpEmailReader.getInboxFolder();
        inbox.open(Folder.READ_WRITE);
        CRMEmailProcessor crmEmailProcessor = new CRMEmailProcessor();

        for (Message message : inbox.search(new FlagTerm(new Flags(PROCESSED_FLAG), false)))
        {
            boolean isRead = false;
            try {
                log.info("Processing Email from : " + message.getFrom() + "with subject: " + message.getSubject());
                isRead = message.getFlags().contains(Flags.Flag.SEEN);
                crmEmailProcessor.processEmail(message);
                Flags flags = new Flags(PROCESSED_FLAG);
                message.setFlags(flags, true);
                message.setFlag(Flags.Flag.SEEN, isRead);
            } catch (Exception e) {
                log.error("Could not process message: " + message, e);
                Flags flags = new Flags(PROCESSED_FLAG);
                message.setFlags(flags, true);
                message.setFlag(Flags.Flag.SEEN, true);
            }
        }
        log.info("No message left to process, closing Inbox");
        inbox.close(false);
        helpEmailReader.store.close();
    }
}