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

📄 mailimpl.java

📁 java mail,java mailjava mailjava mailjava mail
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**************************************************************** * 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.james.core;import org.apache.avalon.framework.activity.Disposable;import org.apache.avalon.framework.container.ContainerUtil;import org.apache.mailet.Mail;import org.apache.mailet.MailAddress;import org.apache.mailet.RFC2822Headers;import javax.mail.Address;import javax.mail.MessagingException;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;import javax.mail.internet.ParseException;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.OptionalDataException;import java.io.OutputStream;import java.io.Serializable;import java.util.ArrayList;import java.util.Collection;import java.util.Date;import java.util.HashMap;import java.util.Iterator;/** * <P>Wraps a MimeMessage adding routing information (from SMTP) and some simple * API enhancements.</P> * <P>From James version > 2.2.0a8 "mail attributes" have been added. * Backward and forward compatibility is supported: * messages stored in file repositories <I>without</I> attributes by James version <= 2.2.0a8 * will be processed by later versions as having an empty attributes hashmap; * messages stored in file repositories <I>with</I> attributes by James version > 2.2.0a8 * will be processed by previous versions, ignoring the attributes.</P> * * @version CVS $Revision: 494012 $ $Date: 2007-01-08 11:23:58 +0100 (Mo, 08 Jan 2007) $ */public class MailImpl implements Disposable, Mail {        /**     * We hardcode the serialVersionUID so that from James 1.2 on,     * MailImpl will be deserializable (so your mail doesn't get lost)     */    public static final long serialVersionUID = -4289663364703986260L;    /**     * The error message, if any, associated with this mail.     */    private String errorMessage;    /**     * The state of this mail, which determines how it is processed.     */    private String state;    /**     * The MimeMessage that holds the mail data.     */    private MimeMessage message;    /**     * The sender of this mail.     */    private MailAddress sender;    /**     * The collection of recipients to whom this mail was sent.     */    private Collection recipients;    /**     * The identifier for this mail message     */    private String name;    /**     * The remote host from which this mail was sent.     */    private String remoteHost = "localhost";    /**     * The remote address from which this mail was sent.     */    private String remoteAddr = "127.0.0.1";    /**     * The last time this message was updated.     */    private Date lastUpdated = new Date();    /**     * Attributes added to this MailImpl instance     */    private HashMap attributes;    /**     * A constructor that creates a new, uninitialized MailImpl     */    public MailImpl() {        setState(Mail.DEFAULT);        attributes = new HashMap();    }    /**     * A constructor that creates a MailImpl with the specified name,     * sender, and recipients.     *     * @param name the name of the MailImpl     * @param sender the sender for this MailImpl     * @param recipients the collection of recipients of this MailImpl     */    public MailImpl(String name, MailAddress sender, Collection recipients) {        this();        this.name = name;        this.sender = sender;        this.recipients = null;        // Copy the recipient list        if (recipients != null) {            Iterator theIterator = recipients.iterator();            this.recipients = new ArrayList();            while (theIterator.hasNext()) {                this.recipients.add(theIterator.next());            }        }    }    /**     * @param mail     * @param newName     * @throws MessagingException     */    public MailImpl(Mail mail, String newName) throws MessagingException {        this(newName, mail.getSender(), mail.getRecipients(), mail.getMessage());        setRemoteHost(mail.getRemoteHost());        setRemoteAddr(mail.getRemoteAddr());        setLastUpdated(mail.getLastUpdated());        try {            if (mail instanceof MailImpl) {                setAttributesRaw((HashMap) cloneSerializableObject(((MailImpl) mail).getAttributesRaw()));            } else {                HashMap attribs = new HashMap();                for (Iterator i = mail.getAttributeNames(); i.hasNext(); ) {                    String hashKey = (String) i.next();                    attribs.put(hashKey,cloneSerializableObject(mail.getAttribute(hashKey)));                }                setAttributesRaw(attribs);            }        } catch (IOException e) {            // should never happen for in memory streams            setAttributesRaw(new HashMap());        } catch (ClassNotFoundException e) {            // should never happen as we just serialized it            setAttributesRaw(new HashMap());        }    }    /**     * A constructor that creates a MailImpl with the specified name,     * sender, recipients, and message data.     *     * @param name the name of the MailImpl     * @param sender the sender for this MailImpl     * @param recipients the collection of recipients of this MailImpl     * @param messageIn a stream containing the message source     */    public MailImpl(String name, MailAddress sender, Collection recipients, InputStream messageIn)        throws MessagingException {        this(name, sender, recipients);        MimeMessageSource source = new MimeMessageInputStreamSource(name, messageIn);        this.setMessage(new MimeMessageCopyOnWriteProxy(source));    }    /**     * A constructor that creates a MailImpl with the specified name,     * sender, recipients, and MimeMessage.     *     * @param name the name of the MailImpl     * @param sender the sender for this MailImpl     * @param recipients the collection of recipients of this MailImpl     * @param message the MimeMessage associated with this MailImpl     */    public MailImpl(String name, MailAddress sender, Collection recipients, MimeMessage message) throws MessagingException {        this(name, sender, recipients);        this.setMessage(new MimeMessageCopyOnWriteProxy(message));    }    /**     * A constructor which will attempt to obtain sender and recipients from the headers of the MimeMessage supplied.     * @param message - a MimeMessage from which to construct a Mail     */    public MailImpl(MimeMessage message) throws MessagingException {        this();        MailAddress sender = getReturnPath(message);        Collection recipients = null;        Address[] addresses = message.getRecipients(MimeMessage.RecipientType.TO);        if (addresses != null) {            recipients = new ArrayList();            for (int i = 0; i < addresses.length; i++) {                try {                    recipients.add(new MailAddress(new InternetAddress(addresses[i].toString(), false)));                } catch (ParseException pe) {                    // RFC 2822 section 3.4 allows To: fields without <>                    // Let's give this one more try with <>.                    try {                        recipients.add(new MailAddress("<" + new InternetAddress(addresses[i].toString()).toString() + ">"));                    } catch (ParseException _) {                        throw new MessagingException("Could not parse address: " + addresses[i].toString() + " from " + message.getHeader(RFC2822Headers.TO, ", "), pe);                    }                }            }        }        this.name = message.toString();        this.sender = sender;        this.recipients = recipients;        this.setMessage(message);    }    /**     * Gets the MailAddress corresponding to the existing "Return-Path" of     * <I>message</I>.     * If missing or empty returns <CODE>null</CODE>,     */    private MailAddress getReturnPath(MimeMessage message) throws MessagingException {        MailAddress mailAddress = null;        String[] returnPathHeaders = message.getHeader(RFC2822Headers.RETURN_PATH);        String returnPathHeader = null;        if (returnPathHeaders != null) {            returnPathHeader = returnPathHeaders[0];            if (returnPathHeader != null) {                returnPathHeader = returnPathHeader.trim();                if (!returnPathHeader.equals("<>")) {                    try {                        mailAddress = new MailAddress(new InternetAddress(returnPathHeader, false));                    } catch (ParseException pe) {                        throw new MessagingException("Could not parse address: " + returnPathHeader + " from " + message.getHeader(RFC2822Headers.RETURN_PATH, ", "), pe);                    }                }            }        }        return mailAddress;    }    /**     * Duplicate the MailImpl.     *     * @return a MailImpl that is a duplicate of this one     */    public Mail duplicate() {        return duplicate(name);    }    /**     * Duplicate the MailImpl, replacing the mail name with the one     * passed in as an argument.     *     * @param newName the name for the duplicated mail     *     * @return a MailImpl that is a duplicate of this one with a different name     */    public Mail duplicate(String newName) {        try {            return new MailImpl(this, newName);        } catch (MessagingException me) {            // Ignored.  Return null in the case of an error.        }        return null;    }    /**     * Get the error message associated with this MailImpl.     *     * @return the error message associated with this MailImpl     */    public String getErrorMessage() {        return errorMessage;    }    /**     * Get the MimeMessage associated with this MailImpl.     *     * @return the MimeMessage associated with this MailImpl     */    public MimeMessage getMessage() throws MessagingException {        return message;    }        /**     * Set the name of this MailImpl.     *     * @param name the name of this MailImpl     */    public void setName(String name) {        this.name = name;    }    /**     * Get the name of this MailImpl.     *     * @return the name of this MailImpl     */    public String getName() {        return name;    }    /**     * Get the recipients of this MailImpl.     *     * @return the recipients of this MailImpl     */    public Collection getRecipients() {

⌨️ 快捷键说明

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