    001    /*
    002     * Licensed to the Apache Software Foundation (ASF) under one or more
    003     * contributor license agreements.  See the NOTICE file distributed with
    004     * this work for additional information regarding copyright ownership.
    005     * The ASF licenses this file to You under the Apache License, Version 2.0
    006     * (the "License"); you may not use this file except in compliance with
    007     * the License.  You may obtain a copy of the License at
    008     *
    009     *      http://www.apache.org/licenses/LICENSE-2.0
    010     *
    011     * Unless required by applicable law or agreed to in writing, software
    012     * distributed under the License is distributed on an "AS IS" BASIS,
    013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    014     * See the License for the specific language governing permissions and
    015     * limitations under the License.
    016     */
    017
    018    package org.apache.commons.net.smtp;
    019
    020    /***
    021     * This class is used to construct a bare minimum
    022     * acceptable header for an email message.  To construct more
    023     * complicated headers you should refer to RFC 822.  When the
    024     * Java Mail API is finalized, you will be
    025     * able to use it to compose fully compliant Internet text messages.
    026     * <p>
    027     * The main purpose of the class is to faciliatate the mail sending
    028     * process, by relieving the programmer from having to explicitly format
    029     * a simple message header.  For example:
    030     * <pre>
    031     * writer = client.sendMessageData();
    032     * if(writer == null) // failure
    033     *   return false;
    034     * header =
    035     *    new SimpleSMTPHeader("foobar@foo.com", "foo@bar.com" "Just testing");
    036     * header.addCC("bar@foo.com");
    037     * header.addHeaderField("Organization", "Foobar, Inc.");
    038     * writer.write(header.toString());
    039     * writer.write("This is just a test");
    040     * writer.close();
    041     * if(!client.completePendingCommand()) // failure
    042     *   return false;
    043     * </pre>
    044     * <p>
    045     * <p>
    046     * @author Daniel F. Savarese
    047     * @see SMTPClient
    048     ***/
    049
    050    public class SimpleSMTPHeader
    051    {
    052        private String __subject, __from, __to;
    053        private StringBuffer __headerFields, __cc;
    054
    055        /***
    056         * Creates a new SimpleSMTPHeader instance initialized with the given
    057         * from, to, and subject header field values.
    058         * <p>
    059         * @param from  The value of the <code>From:</code> header field.  This
    060         *              should be the sender's email address.
    061         * @param to    The value of the <code>To:</code> header field.  This
    062         *              should be the recipient's email address.
    063         * @param subject  The value of the <code>Subject:</code> header field.
    064         *              This should be the subject of the message.
    065         ***/
    066        public SimpleSMTPHeader(String from, String to, String subject)
    067        {
    068            __to = to;
    069            __from = from;
    070            __subject = subject;
    071            __headerFields = new StringBuffer();
    072            __cc = null;
    073        }
    074
    075        /***
    076         * Adds an arbitrary header field with the given value to the article
    077         * header.  These headers will be written before the From, To, Subject, and
    078         * Cc fields when the SimpleSMTPHeader is convertered to a string.
    079         * An example use would be:
    080         * <pre>
    081         * header.addHeaderField("Organization", "Foobar, Inc.");
    082         * </pre>
    083         * <p>
    084         * @param headerField  The header field to add, not including the colon.
    085         * @param value  The value of the added header field.
    086         ***/
    087        public void addHeaderField(String headerField, String value)
    088        {
    089            __headerFields.append(headerField);
    090            __headerFields.append(": ");
    091            __headerFields.append(value);
    092            __headerFields.append('\n');
    093        }
    094
    095
    096        /***
    097         * Add an email address to the CC (carbon copy or courtesy copy) list.
    098         * <p>
    099         * @param address The email address to add to the CC list.
    100         ***/
    101        public void addCC(String address)
    102        {
    103            if (__cc == null)
    104                __cc = new StringBuffer();
    105            else
    106                __cc.append(", ");
    107
    108            __cc.append(address);
    109        }
    110
    111
    112        /***
    113         * Converts the SimpleSMTPHeader to a properly formatted header in
    114         * the form of a String, including the blank line used to separate
    115         * the header from the article body.  The header fields CC and Subject
    116         * are only included when they are non-null.
    117         * <p>
    118         * @return The message header in the form of a String.
    119         ***/
    120        @Override
    121        public String toString()
    122        {
    123            StringBuilder header = new StringBuilder();
    124
    125            if (__headerFields.length() > 0)
    126                header.append(__headerFields.toString());
    127
    128            header.append("From: ");
    129            header.append(__from);
    130            header.append("\nTo: ");
    131            header.append(__to);
    132
    133            if (__cc != null)
    134            {
    135                header.append("\nCc: ");
    136                header.append(__cc.toString());
    137            }
    138
    139            if (__subject != null)
    140            {
    141                header.append("\nSubject: ");
    142                header.append(__subject);
    143            }
    144
    145            header.append('\n');
    146            header.append('\n');
    147
    148            return header.toString();
    149        }
    150    }
    151
    152
    153