View Javadoc

1   /*
2    * Copyright 2001-2005 The Apache Software Foundation
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *     http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.apache.commons.net.smtp;
17  
18  /***
19   * This class is used to construct a bare minimum
20   * acceptable header for an email message.  To construct more
21   * complicated headers you should refer to RFC 822.  When the
22   * Java Mail API is finalized, you will be
23   * able to use it to compose fully compliant Internet text messages.
24   * <p>
25   * The main purpose of the class is to faciliatate the mail sending
26   * process, by relieving the programmer from having to explicitly format
27   * a simple message header.  For example:
28   * <pre>
29   * writer = client.sendMessageData();
30   * if(writer == null) // failure
31   *   return false;
32   * header =
33   *    new SimpleSMTPHeader("foobar@foo.com", "foo@bar.com" "Just testing");
34   * header.addCC("bar@foo.com");
35   * header.addHeaderField("Organization", "Foobar, Inc.");
36   * writer.write(header.toString());
37   * writer.write("This is just a test");
38   * writer.close();
39   * if(!client.completePendingCommand()) // failure
40   *   return false;
41   * </pre>
42   * <p>
43   * <p>
44   * @author Daniel F. Savarese
45   * @see SMTPClient
46   ***/
47  
48  public class SimpleSMTPHeader
49  {
50      private String __subject, __from, __to;
51      private StringBuffer __headerFields, __cc;
52  
53      /***
54       * Creates a new SimpleSMTPHeader instance initialized with the given
55       * from, to, and subject header field values.
56       * <p>
57       * @param from  The value of the <code>From:</code> header field.  This
58       *              should be the sender's email address.
59       * @param to    The value of the <code>To:</code> header field.  This
60       *              should be the recipient's email address.
61       * @param subject  The value of the <code>Subject:</code> header field.
62       *              This should be the subject of the message.
63       ***/
64      public SimpleSMTPHeader(String from, String to, String subject)
65      {
66          __to = to;
67          __from = from;
68          __subject = subject;
69          __headerFields = new StringBuffer();
70          __cc = null;
71      }
72  
73      /***
74       * Adds an arbitrary header field with the given value to the article
75       * header.  These headers will be written before the From, To, Subject, and
76       * Cc fields when the SimpleSMTPHeader is convertered to a string.
77       * An example use would be:
78       * <pre>
79       * header.addHeaderField("Organization", "Foobar, Inc.");
80       * </pre>
81       * <p>
82       * @param headerField  The header field to add, not including the colon.
83       * @param value  The value of the added header field.
84       ***/
85      public void addHeaderField(String headerField, String value)
86      {
87          __headerFields.append(headerField);
88          __headerFields.append(": ");
89          __headerFields.append(value);
90          __headerFields.append('\n');
91      }
92  
93  
94      /***
95       * Add an email address to the CC (carbon copy or courtesy copy) list.
96       * <p>
97       * @param address The email address to add to the CC list.
98       ***/
99      public void addCC(String address)
100     {
101         if (__cc == null)
102             __cc = new StringBuffer();
103         else
104             __cc.append(", ");
105 
106         __cc.append(address);
107     }
108 
109 
110     /***
111      * Converts the SimpleSMTPHeader to a properly formatted header in
112      * the form of a String, including the blank line used to separate
113      * the header from the article body.  The header fields CC and Subject
114      * are only included when they are non-null.
115      * <p>
116      * @return The message header in the form of a String.
117      ***/
118     public String toString()
119     {
120         StringBuffer header = new StringBuffer();
121 
122         if (__headerFields.length() > 0)
123             header.append(__headerFields.toString());
124 
125         header.append("From: ");
126         header.append(__from);
127         header.append("\nTo: ");
128         header.append(__to);
129 
130         if (__cc != null)
131         {
132             header.append("\nCc: ");
133             header.append(__cc.toString());
134         }
135 
136         if (__subject != null)
137         {
138             header.append("\nSubject: ");
139             header.append(__subject);
140         }
141 
142         header.append('\n');
143         header.append('\n');
144 
145         return header.toString();
146     }
147 }
148 
149 
150