inboxhelper.java

来自「CRM源码This file describes some issues tha」· Java 代码 · 共 331 行

JAVA
331
字号
/* * 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;import com.queplix.core.error.GenericSystemException;import com.queplix.core.integrator.security.LogonSession;import com.queplix.core.modules.config.utils.SysPropertyManager;import com.queplix.core.modules.inbox.ejb.InboxManagerLocal;import com.queplix.core.modules.inbox.ejb.InboxManagerLocalHome;import com.queplix.core.utils.StringHelper;import com.queplix.core.utils.DateHelper;import com.queplix.core.utils.JNDINames;import com.queplix.core.utils.cache.CacheObjectManager;import org.apache.regexp.RE;import org.apache.regexp.RESyntaxException;import java.util.Date;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/** * Inbox Helper. * @author Konstantin Mironov * @since 8 Dec 2006 */public class InboxHelper {    // Generic mail-related constants.    // ===============================    /** Mailer property. */    public static final String MAILER_PROPERTY = "DEFAULT_MAILER";    /** Sender property. */    public static final String SENDER_PROPERTY = "DEFAULT_SENDER";    /** Mail header to name the mailer software. */    public static final String HEADER_X_MAILER = "X-Mailer";    /** Mail header for the object-bound messages. */    public static final String HEADER_X_TIKET = "X-Tiket";    /** Mail header for the encoding. */    public static final String CONTENT_TRANSFER_ENCODING = "CONTENT-TRANSFER-ENCODING";    public static final String CONTENT_TRANSFER_ENCODING_BASE64 = "BASE64";    public static final String CONTENT_ID_CAPTION = "cid:";    public static final String CONTENT_TYPE_HTML = "TEXT/HTML";    public static final String CONTENT_TYPE_PLAIN = "TEXT/PLAIN";    public static final String CONTENT_TYPE_TEXT = "TEXT";    public static final String CONTENT_TYPE_MESSAGE = "MESSAGE/RFC822";    public static final String CONTENT_TYPE_ALTERNATIVE = "MULTIPART/ALTERNATIVE";    /**  */    public static final String SERVLET_UPLOAD_NAME = "../attachmentUpload/getpridf?process_id=";    public static final String SERVLET_UPLOAD_FILENAME = "&filename=";    /** Supported account IDs. */    public static final String ACCOUNT_POP3 = "POP3";    public static final String ACCOUNT_IMAP4 = "IMAP";    public static final String[] ACCOUNTS = {ACCOUNT_POP3, ACCOUNT_IMAP4};    public static final int EMAIL_MESSAGE = 0;    public static final int ALERT_MESSAGE = 1;    // Deleted state for delete_flag field    public static final int DELETE_FLAG = 1;    /**     * Pattern variable to find image insertion in mail body.     */    public static final String IMAGE_PATTERN = "<img\\s+src=['\"]([^'\"]+)['\"]\\s+attachedId=['\"]([^'\"]+)['\"]";    //public static final String IMAGE_PATTERN_INCOM = "<img\\s+.*[\\r\\n]*src=['\"]([^\">]*)";    public static final String IMAGE_PATTERN_INCOM = "<img\\s+.*[\\r\\n]*src=[\\w]*['\"]([^\">]*)";    public static final String IMAGE_PATTERN_OUT_EMAIL = "<img\\s.*src=\"(.+)\"";    public static final String TAG_A_PATTERN = "<a\\s+.*[\\r\\n]*href=\"(.+)\"";    public static final String TAG_A_TARGET = " target=\"_blank\"";    public static final String INDICATION_PREFIX_HTML = "<center><label style=\"font-family:Arial;font-weight:bold;font-size:10pt\">";    public static final String[] MONTHS = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};    public static final String INDICATION_POSTFIX_HTML = "</label></center>";    public static final String DELIMITER_HTML = "<br>";    private static final InboxManagerLocal MANAGER_LOCAL =            (InboxManagerLocal)new CacheObjectManager().getLocalObject(JNDINames.InboxManager, InboxManagerLocalHome.class);    // Static mail-related methods.    // ============================    //    // Build URI.    //    public static final String toURI( Account account ) {        return toURI( account.getProviderName(),                      account.getServer(),                      account.getPort(),                      account.getFolderName(),                      account.getName() );    }    public static final String toURI( String proto, String host ) {        return toURI( proto, host, null );    }    public static final String toURI( String proto, String host, Integer port ) {        return toURI( proto, host, port, null );    }    public static final String toURI( String proto,                                      String host,                                      Integer port,                                      String folderName ) {        return toURI( proto, host, port, folderName, null );    }    public static final String toURI( String proto,                                      String host,                                      Integer port,                                      String folderName,                                      String name ) {        String s = proto + "://";        if( name != null ) {            s += name + "@";        }        s += host;        if( port != null ) {            s += ":" + port;        }        if( folderName != null ) {            s += "/" + folderName;        }        return s;    }    /**     * Returns mailer specified in system properties.     * @return String     */    public static String getMailer() {        return SysPropertyManager.getProperty( MAILER_PROPERTY );    }    /**     * Returns default sender.     * @return String     */    public static String getDefSender() {        return getDefSender( null );    }    /**     * Returns default sender.     * @param ls LogonSession     * @return String     */    public static String getDefSender( LogonSession ls ) {        String defaultSender = null;        if( ls != null ) {            defaultSender = ls.getUser().getEmail();        }        if( StringHelper.isEmpty( defaultSender ) ) {            defaultSender = SysPropertyManager.getProperty( SENDER_PROPERTY );        }        if( StringHelper.isEmpty( defaultSender ) ) {            throw new NullPointerException( "No mail default sender specified in property file." );        }        return defaultSender;    }    /**     * Checks if <code>fileName</code> attachment is in mail content.     * @param fileName full attachment name     * @return boolean     */    public static boolean isContentAttachment( String fileName ) {        if( fileName == null ) {            return false;        } else {            return fileName.toLowerCase().startsWith( CONTENT_ID_CAPTION );        }    }    /**     * Returns attachment's 'Content-ID' header value.     * @param fileName full attachment name     * @return String     */    public static String getContentId( String fileName ) {        if( fileName == null || fileName.length() < CONTENT_ID_CAPTION.length() ) {            return null;        } else {            return fileName.substring( CONTENT_ID_CAPTION.length() );        }    }    /**     * Retruns normilized attachment name.     * Retrive file name from <code>fileName</code>.     * Example:     *      Content-ID: <image001.jpg@01C62295.60D0B580>     * @param fileName full attachment name     * @param uniqueID unique ID to generate unique attachment name.     * @return String     */    public static String normalizeAttachmentName( String fileName, int uniqueID ) {        if( StringHelper.isEmpty( fileName ) ) {            return generateUniqueAttachName( uniqueID );        }        if( !isContentAttachment( fileName ) ) {            return fileName;        }        String contentId = getContentId( fileName );        RE re;        try {            re = new RE( "[\\w\\u002E\\u002D\\s\\[\\]']+", RE.MATCH_CASEINDEPENDENT );        } catch( RESyntaxException rex ) {            throw new GenericSystemException( "Regexp exception: " + rex.getMessage(), rex );        }        String name;        if( re.match( contentId ) ) {            name = contentId.substring( re.getParenStart( 0 ), re.getParenEnd( 0 ) );        } else {            name = contentId;        }        /** @todo [alb] test MimeUtility#encodeText with Russian chars                 if( name != null ) {            // Set encoded file name.            try {                name = MimeUtility.encodeText( name );            } catch( UnsupportedEncodingException ex ) {                throw new GenericSystemException( "Encoding exception: " + ex.getMessage(), ex );            }                 }         */        return name;    }    /**     * The method returns unique key for a message     * @param message Inbox Message object     * @return digest string     */    public static String getMessageDigest(InboxMessage message) {        String msgDigest;        if (message == null && message.getBody() == null) {            return StringHelper.EMPTY_VALUE;        } // if (message == null || message.getBody() == null)        try {            MessageDigest digestObject = MessageDigest.getInstance("MD5");            digestObject.update(message.getBody().getBytes("UTF-8"));            byte[] digest = digestObject.digest();            StringBuffer sbNewDigest = new StringBuffer();            for (int i = 0; i < digest.length; i++) {                int newByte = digest[i] + 128;                String nextByte = Integer.toHexString(newByte).toUpperCase();                if (nextByte.length() == 1) {                    nextByte = "0" + nextByte;                } // if (nextByte.length() == 1)                sbNewDigest.append(nextByte);            } // for (int i = 0; i < digest.length; i++)            msgDigest = sbNewDigest.toString();        } catch (NoSuchAlgorithmException ex) {            msgDigest = StringHelper.EMPTY_VALUE;        } catch (Exception ex) {            msgDigest = StringHelper.EMPTY_VALUE;        } // try        return msgDigest;    } // getMessageDigest(InboxMessage message) : String    /**     * Returns new unique name for attachment.     * @param uniqueID int     * @return String     */    public static String generateUniqueAttachName( int uniqueID ) {        return "Att" + uniqueID;    }    public static String getDateAsString() {        Date currentDate = DateHelper.getNowDate();        String dateAsString = ", " +                addLeadingZero(currentDate.getDate()) +                " " +                MONTHS[currentDate.getMonth()] +                " " +                (currentDate.getYear() + 1900) +                " " +                addLeadingZero(currentDate.getHours()) +                ":" +                addLeadingZero(currentDate.getMinutes())        ;        return dateAsString;    } // getDateAsString() : String    /**     * Gets InboxManager EJB reference.     *     * @return InboxManager remote object.     */    public static InboxManagerLocal getInboxManager() {        return MANAGER_LOCAL;        //(InboxManagerLocal)getLocalObject(SEJNDINames.InboxManager, InboxManagerLocalHome.class);    } // getInboxManager() : InboxManagerLocal    private static String addLeadingZero(int n) {        return n > 9 ? Integer.toString(n) : "0" + n;    } // addLeadingZero(int) : String} // class InboxHelper

⌨️ 快捷键说明

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