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