Package org.apache.servicemix.components.email

Source Code of org.apache.servicemix.components.email.MimeMailPoller

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements.  See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License.  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.servicemix.components.email;

import javax.jbi.JBIException;
import javax.jbi.messaging.DeliveryChannel;
import javax.jbi.messaging.InOnly;
import javax.jbi.messaging.MessageExchangeFactory;
import javax.jbi.messaging.NormalizedMessage;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeMessage;

import org.apache.servicemix.components.util.PollingComponentSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* A polling component which looks for emails in a mail server and sends them
* into the JBI bus as messages, deleting the messages by default when they
* are processed.
*
* @version $Revision$
*/
public class MimeMailPoller extends PollingComponentSupport {
 
  private static Logger logger = LoggerFactory.getLogger(MimeMailPoller.class);
 
  private Session session;
  private String hostName;
  private String userName;
  private String password;
  private String mailBox;
  private boolean debug;
  private int maxFetchSize = 5;
  private MimeMailMarshaler marshaler = new MimeMailMarshaler();

  protected void init() throws JBIException {
    super.init();
    if (session == null)  {
      logger.debug("No Session informed. Using default instance");
      this.session = Session.getDefaultInstance(System.getProperties());
    }
    if (mailBox == null) {
      logger.debug("No mailbox informed. Using INBOX");
      mailBox = "INBOX";
    }
    if (hostName == null) {
      throw new JBIException("HostName not informed");
    }
    if (userName == null) {
      throw new JBIException("UserName not informed");
    }
    if (password == null) {
      throw new JBIException("Password not informed");
    }
    if (maxFetchSize < 1) {
      throw new JBIException("Fetch Size must be at least 1");
    }
  }
 
  /**
   * @return Returns the hostName.
   */
  public String getHostName() {
    return hostName;
  }

  /**
   * @param hostName The hostName to set.
   */
  public void setHostName(String hostName) {
    this.hostName = hostName;
  }

  /**
   * @return Returns the marshaler.
   */
  public MimeMailMarshaler getMarshaler() {
    return marshaler;
  }

  /**
   * @param marshaler The marshaler to set.
   */
  public void setMarshaler(MimeMailMarshaler marshaler) {
    this.marshaler = marshaler;
  }

  public void poll() throws Exception {
    Store store = null;
    Folder folder = null;
    try {
      session.setDebug(isDebug());
      store = session.getStore((mailBox.equals("INBOX")) ? "pop3"
          : "imap");
      store.connect(hostName, userName, password);
      folder = store.getFolder(mailBox);
      if (folder == null || !folder.exists()) {
        throw new Exception("Folder not found or invalid: " + mailBox);
      }
      folder.open(Folder.READ_WRITE);
      int msgCount = Math.min(folder.getMessageCount(),maxFetchSize);
      DeliveryChannel channel = getDeliveryChannel();
      MessageExchangeFactory mef = getExchangeFactory();
        for(int i=1; i <= msgCount;i++) {
          MimeMessage mailMsg = (MimeMessage) folder.getMessage(i);
          InOnly io = mef.createInOnlyExchange();
          NormalizedMessage normalizedMessage = io.createMessage();
          this.marshaler.prepareExchange(io,normalizedMessage,mailMsg);
          io.setInMessage(normalizedMessage);
          channel.send(io);
            mailMsg.setFlag(Flags.Flag.DELETED,true);
        }
    } finally {
      try {
        if (folder != null) {
          folder.close(true);
        }
        if (store != null) {
          store.close();
        }
      } catch (Exception ignored) {}
    }
  }

  /**
   * @return Returns the debug.
   */
  public boolean isDebug() {
    return debug;
  }

  /**
   * @param debug
   *            The debug to set.
   */
  public void setDebug(boolean debug) {
    this.debug = debug;
  }

  /**
   * @return Returns the mailBox.
   */
  public String getMailBox() {
    return mailBox;
  }

  /**
   * @param mailBox
   *            The mailBox to set.
   */
  public void setMailBox(String mailBox) {
    this.mailBox = mailBox;
  }

  /**
   * @return Returns the password.
   */
  public String getPassword() {
    return password;
  }

  /**
   * @param password
   *            The password to set.
   */
  public void setPassword(String password) {
    this.password = password;
  }

  /**
   * @return Returns the userName.
   */
  public String getUserName() {
    return userName;
  }

  /**
   * @param userName
   *            The userName to set.
   */
  public void setUserName(String userName) {
    this.userName = userName;
  }

  /**
   * @return Returns the session.
   */
  public Session getSession() {
    return session;
  }

  /**
   * @param session
   *            The session to set.
   */
  public void setSession(Session session) {
    this.session = session;
  }

  /**
   * @return Returns the maxFetchSize.
   */
  public int getMaxFetchSize() {
    return maxFetchSize;
  }

  /**
   * @param maxFetchSize The maxFetchSize to set.
   */
  public void setMaxFetchSize(int maxFetchSize) {
    this.maxFetchSize = maxFetchSize;
  }

}
TOP

Related Classes of org.apache.servicemix.components.email.MimeMailPoller

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.