⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inboxaction.java

📁 CRM源码This file describes some issues that should be implemented in future and how it should be imple
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* * Copyright 2006-2007 Queplix Corp. * * Licensed under the Queplix Public License, Version 1.1.1 (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.queplix.com/solutions/commercial-open-source/queplix-public-license/ * * 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 com.queplix.core.modules.inbox.actions;import com.queplix.core.error.GenericSystemException;import com.queplix.core.modules.attachment.ejb.AttachmentManagerLocal;import com.queplix.core.modules.attachment.ejb.AttachmentManagerLocalHome;import com.queplix.core.modules.eql.ejb.AsyncMDB;import com.queplix.core.modules.inbox.Account;import com.queplix.core.modules.inbox.InboxHelper;import com.queplix.core.modules.inbox.InboxMessage;import com.queplix.core.modules.inbox.ejb.InboxManagerLocal;import com.queplix.core.modules.inbox.utils.DefaultMessageFilter;import com.queplix.core.modules.inbox.utils.InboxMsgBuilder;import com.queplix.core.modules.inbox.utils.InboxPropertyFactory;import com.queplix.core.modules.inbox.utils.InboxProvider;import com.queplix.core.modules.inbox.utils.MailFilter;import com.queplix.core.modules.inbox.utils.ResultSet;import com.queplix.core.modules.inbox.utils.log.SystemLogPublisher;import com.queplix.core.modules.mail.Attachment;import com.queplix.core.integrator.security.LogonSession;import com.queplix.core.modules.services.XAAction;import com.queplix.core.modules.services.XAActionContext;import com.queplix.core.utils.DateHelper;import com.queplix.core.utils.JNDINames;import com.queplix.core.utils.StringHelper;import com.queplix.core.utils.async.ASyncObject;import com.queplix.core.utils.async.ASyncRequest;import com.queplix.core.utils.async.JMSClient;import com.queplix.core.utils.log.AbstractLogger;import com.queplix.core.utils.log.Log;import javax.mail.Message;import javax.mail.MessagingException;import java.io.IOException;import java.util.Date;import java.util.HashMap;import java.util.List;import org.apache.regexp.RE;import org.apache.regexp.RESyntaxException;/** * The service scans incomming emails. * @author Konstantin Mironov * @since 8 Dec 2006 */public class InboxAction extends XAAction {    // ------------------------------------------------------- Fields    // Service and log names.    private String serviceName;    private String logName;    // Required service parameters:    private Account account;    private Long accountID;    // == or ==    private InboxMessage inboxMessage;    // Optional service parameters.    private Integer batchSize;    private Boolean updateAccount;    private LogonSession ls;    private SystemLogPublisher publisher;    // Async client.    private AsyncClient asyncClient;    // AttachmentManager EJB local interface    private AttachmentManagerLocal attachMgr;    private static final AbstractLogger logger = Log.getLog(InboxAction.class);    // ------------------------------------------------------- API methods    /*     * No javadoc     * @see Action#perform     */    public java.io.Serializable perform() {        long time = System.currentTimeMillis();        boolean error = false;        // Initialization.        init();        try {            if (inboxMessage != null) {                // Performing concrete InboxMessage.                __perform(inboxMessage);            } else {                // Performing all set of messages.                __perform();            }        } catch (MessagingException me) {            // Write error log.            error = true;            String msg = "Messaging exception: " + me.getMessage();            publisher.ERROR(msg, accountID);            logger.ERROR(logName + msg, me);        } catch (Throwable t) {            // Write error log.            error = true;            String msg = "Unknown exception: " + t.getMessage();            publisher.ERROR(msg, accountID);            logger.ERROR(logName + msg, t);        } finally {            // The end.            time = (System.currentTimeMillis() - time) / 1000;            if (error) {                // If check failed, mark the account as invalid.                if (Boolean.TRUE.equals(updateAccount)) {                    account.setValidFlag(Boolean.FALSE);                }                String msg = "Service '" + serviceName + "' completed with errors. " +                    "Time = " + time + " sec.";                publisher.WARN(msg, accountID);                logger.WARN(logName + msg);            } else {                // If checked successfully, mark the account as valid.                if (Boolean.TRUE.equals(updateAccount)) {                    account.setValidFlag(Boolean.TRUE);                }                String msg = "Service '" + serviceName + "' finished. Time = " + time + " sec.";                publisher.INFO(msg, accountID);                logger.INFO(logName + msg);            } // if (error)        } // try        return null;    } // perform() : java.io.Serializable    // ------------------------------------------------------- Private methods    /**     * Performs set of messages.     * @throws MessagingException the message has wrong format     * @throws IOException saving error     */    private void __perform() throws MessagingException, IOException {        // Initialization.        int processedMessages = 0;        Date msgMaxServerDate = null;        boolean deleteMailFlag = Boolean.TRUE.equals(account.getDeleteMailFlag());        boolean markEmailAsSeenFlag = Boolean.TRUE.equals(account.getMarkEmailAsSeenFlag());        String lastMessageUID = null;        String lastMessageDigest = null;        // Init Inbox provider.        Class providerClazz = InboxPropertyFactory.getInstance().getInboxProviderClass(account.getProviderName());        InboxProvider provider = (InboxProvider)InboxPropertyFactory.getInstance().getInstance(providerClazz, account, logName, publisher);        try {            // Opening mail session...            provider.open();            // Get mail ResultSet.            DefaultMessageFilter filter = new DefaultMessageFilter(account, provider);            ResultSet rs = provider.getResultSet(filter);            // Messages processing...            Message message;            while((message = rs.next()) != null) {                int id = message.getMessageNumber();                logger.DEBUG(logName + "Building message #" + id);                logger.DEBUG(logName + "      Subject: " + message.getSubject());                // Init Inbox message builder.                Class msgBuilderClazz = InboxPropertyFactory.getInstance().getMessageBuilderClass();                InboxMsgBuilder builder = (InboxMsgBuilder)InboxPropertyFactory.getInstance().                    getInstance(msgBuilderClazz, account, logName, publisher);                builder.setInboxProvider(provider);                // Do build InboxMessage.                InboxMessage im;                try {                    // create InboxMessage object                    im = builder.build(message);                } catch(MessagingException me) {                    // just report problem                    String msg = "Cannot parse message #" + id + " with subject '" +                        message.getSubject() + "' due to messaging exception: " + me.getMessage();                    publisher.ERROR(msg, accountID);                    logger.ERROR(logName + msg, me);                    continue;                } // try                // check message digest                String lastServerMessageDigest = account.getMessageDigest();                String messageDigest = im.getMessageDigest();                if (lastServerMessageDigest != null && messageDigest != null) {                    if (lastServerMessageDigest.compareTo(messageDigest) == 0) {                        // just report problem                        String msg = "Message #" + id + " skipped - message Digect is the same as the Last Message Digect. " +                                "Message Digest: " + messageDigest +                                ". Last Message Digest: " + lastServerMessageDigest;                        publisher.INFO(msg, accountID);                        logger.INFO(logName + msg);                        // Set 'Max message date'.                        Date msgServerDate = provider.getServerDate(message);                        if (msgServerDate != null) {                            if (msgMaxServerDate == null || msgServerDate.after(msgMaxServerDate)) {                                msgMaxServerDate = msgServerDate;                            }                        } // if (msgServerDate != null)                        continue;                    } // if (lastServerMessageDigest.compareTo(messageDigest) == 0)                } // if (messageUID != null && currentUID != null)                // Process parsed message.                try {                    process(id, im);                } catch(Exception ex) {                    // just report problem                    String msg = "Cannot process message #" + id + " with subject '" +                        message.getSubject() + "' due to the issue: " + ex.getMessage();                    publisher.ERROR(msg, accountID);                    logger.ERROR(logName + msg, ex);                    // Set 'Max message date'.                    Date msgServerDate = provider.getServerDate(message);                    if (msgServerDate != null) {                        if (msgMaxServerDate == null || msgServerDate.after(msgMaxServerDate)) {                            msgMaxServerDate = msgServerDate;                        }                    } // if (msgServerDate != null)                    continue;                } // try                // Deleting PROCESSED messages.                if (deleteMailFlag) {                    DEBUG("Set delete flag for #" + id + " message.");                    provider.setDeletedMsgFlag(message);                } else if (markEmailAsSeenFlag) {                    DEBUG("Set seen flag for #" + id + " message.");                    provider.setSeenMsgFlag(message);                } // if (deleteMailFlag)                // Set 'Max message date'.                Date msgServerDate = im.getReceiveTime();                if (msgServerDate != null) {                    if (msgMaxServerDate == null || msgServerDate.after(msgMaxServerDate)) {                        msgMaxServerDate = msgServerDate;                    }                } // if (msgServerDate != null)                // Checking the messages process-at-once limit.                processedMessages++;                if (batchSize != null && processedMessages >= batchSize.intValue()) {                    break;                }                lastMessageUID = im.getMessageUid();                lastMessageDigest = im.getMessageDigest();            } // while            String msg = "Processed " + processedMessages + " message(s).";            if (msgMaxServerDate != null) {                msg += " Last processed message server date: " + DateHelper.formatDate(msgMaxServerDate);            } // if (msgMaxServerDate != null)            publisher.INFO(msg, accountID);            logger.INFO(logName + msg);        } finally {            try {                provider.close(deleteMailFlag); // expunges all deleted messages (if deleteMailFlag = true)                logger.INFO("Folder closed. Delete flag: " + deleteMailFlag);            } catch(Exception ex) {                logger.ERROR("Cannot close folder. Delete flag: " + deleteMailFlag, ex);            } // try            logger.INFO("Check and set last Receive Date");            // Update account's 'Last receive date'.            Date accLastReceiveDate = null;            if (account.getLastReceiveDate() != null)                accLastReceiveDate = account.getLastReceiveDate();            logger.DEBUG("Account 'Last Received Date': " + accLastReceiveDate);            logger.DEBUG("Processed message 'Max Server Date': " + msgMaxServerDate);            if (msgMaxServerDate != null) {                if (accLastReceiveDate == null || msgMaxServerDate.after(accLastReceiveDate)) {                    account.setLastReceiveDate(msgMaxServerDate, lastMessageUID, lastMessageDigest);                } else {                    account.setLastMessageID(lastMessageUID, lastMessageDigest);                } // if (accLastReceiveDate == null || msgMaxServerDate.after(accLastReceiveDate))            } // if (msgMaxServerDate != null)        } // try    } // __perform()    /**     * Performs <code>msg</code> message.     * @param im InboxMessage     * @throws MessagingException the message has wrong format     * @throws IOException saving error     */    private void __perform(InboxMessage im)        throws MessagingException, IOException {        process(1, im);    } // __perform(InboxMessage)    /**     * Process one email message.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -