Package org.projectforge.meb

Source Code of org.projectforge.meb.MebMailClient

/////////////////////////////////////////////////////////////////////////////
//
// Project ProjectForge Community Edition
//         www.projectforge.org
//
// Copyright (C) 2001-2014 Kai Reinhard (k.reinhard@micromata.de)
//
// ProjectForge is dual-licensed.
//
// This community edition is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License as published
// by the Free Software Foundation; version 3 of the License.
//
// This community edition is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
// Public License for more details.
//
// You should have received a copy of the GNU General Public License along
// with this program; if not, see http://www.gnu.org/licenses/.
//
/////////////////////////////////////////////////////////////////////////////

package org.projectforge.meb;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.StringReader;
import java.util.Date;

import javax.mail.Flags;
import javax.mail.MessagingException;

import org.projectforge.core.ConfigXml;
import org.projectforge.mail.Mail;
import org.projectforge.mail.MailAccount;
import org.projectforge.mail.MailAccountConfig;
import org.projectforge.mail.MailFilter;

/**
* Gets the messages from a mail account and assigns them to the MEB user's inboxes.
* @author Kai Reinhard (k.reinhard@micromata.de)
*
*/
public class MebMailClient
{
  private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(MebMailClient.class);

  private MebDao mebDao;

  /**
   *
   * @param onlyRecentMails If true then only unseen mail will be got from the mail server and afterwards they will be set as seen.
   * @return Number of new imported messages.
   */
  public synchronized int getNewMessages(final boolean onlyRecentMails, final boolean markRecentMailsAsSeen)
  {
    int counter = 0;
    final MailFilter filter = new MailFilter();
    if (onlyRecentMails == true) {
      filter.setOnlyRecent(true);
    }
    final MailAccountConfig cfg = ConfigXml.getInstance().getMebMailAccount();
    if (cfg == null || cfg.getHostname() == null) {
      // No mail account configured.
      return 0;
    }
    final MailAccount mailAccount = new MailAccount(cfg);
    try {
      // If mark messages as seen is set then open mbox read-write.
      mailAccount.connect("INBOX", markRecentMailsAsSeen);
      final Mail[] mails = mailAccount.getMails(filter);
      if (mails != null) {
        for (final Mail mail : mails) {
          final MebEntryDO entry = new MebEntryDO();
          entry.setDate(mail.getDate());
          final String content = mail.getContent();
          final BufferedReader reader = new BufferedReader(new StringReader(content.trim()));
          try {
            StringBuffer buf = null;
            while (reader.ready() == true) {
              final String line = reader.readLine();
              if (line == null) {
                break;
              }
              if (line.startsWith("date=") == true) {
                if (line.length() > 5) {
                  final String dateString = line.substring(5);
                  final Date date = MebDao.parseDate(dateString);
                  entry.setDate(date);
                }
              } else if (line.startsWith("sender=") == true) {
                if (line.length() > 7) {
                  final String sender = line.substring(7);
                  entry.setSender(sender);
                }
              } else if (line.startsWith("msg=") == true) {
                if (line.length() > 4) {
                  final String msg = line.substring(4);
                  buf = new StringBuffer();
                  buf.append(msg);
                }
              } else if (buf != null) {
                buf.append(line);
              } else {
                entry.setSender(line); // First row is the sender.
                buf = new StringBuffer(); // The message follows.
              }
            }
            if (buf != null) {
              entry.setMessage(buf.toString().trim());
            }
          } catch (IOException ex) {
            log.fatal("Exception encountered " + ex, ex);
          }
          if (mebDao.checkAndAddEntry(entry, "MAIL") == true) {
            counter++;
          }
          if (markRecentMailsAsSeen == true) {
            try {
              mail.getMessage().setFlag(Flags.Flag.SEEN, true);
              //mail.getMessage().saveChanges();
            } catch (MessagingException ex) {
              log.error("Exception encountered while setting message flag SEEN as true: " + ex, ex);
            }
          }
          // log.info(mail);
        }
      }
      return counter;
    } finally {
      mailAccount.disconnect();
    }
  }

  public void setMebDao(MebDao mebDao)
  {
    this.mebDao = mebDao;
  }
}
TOP

Related Classes of org.projectforge.meb.MebMailClient

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.