View Javadoc

1   package com.ozacc.mail;
2   
3   import java.io.UnsupportedEncodingException;
4   import java.util.ArrayList;
5   import java.util.Collections;
6   import java.util.HashMap;
7   import java.util.Iterator;
8   import java.util.List;
9   import java.util.Map;
10  
11  import javax.mail.internet.AddressException;
12  import javax.mail.internet.InternetAddress;
13  
14  import com.ozacc.mail.impl.Cp932;
15  
16  /***
17   * ¥á¡¼¥?¡£
18   * 
19   * @since 1.0
20   * @author Tomohiro Otsuka
21   * @version $Id: Mail.java,v 1.7 2004/09/14 00:04:57 otsuka Exp $
22   */
23  public class Mail {
24  
25  	/*** <code>ISO-2022-JP</code> */
26  	public static final String JIS_CHARSET = "ISO-2022-JP";
27  
28  	public static final String DOCTYPE_PUBLIC = "-//OZACC//DTD MAIL//EN";
29  
30  	public static final String DOCTYPE_SYSTEM = "http://www.ozacc.com/library/dtd/ozacc-mail.dtd";
31  
32  	private String charset = JIS_CHARSET;
33  
34  	private String text;
35  
36  	private InternetAddress from;
37  
38  	private String subject;
39  
40  	private List to;
41  
42  	private List cc;
43  
44  	private List bcc;
45  
46  	private InternetAddress returnPath;
47  
48  	private InternetAddress replyTo;
49  
50  	private String importance;
51  
52  	private Map xHeaders;
53  
54  	/***
55  	 * ¥³¥ó¥¹¥È¥é¥¯¥¿¡£
56  	 */
57  	public Mail() {}
58  
59  	/***
60  	 * ¥³¥ó¥¹¥È¥é¥¯¥¿¡£
61  	 * °¸Àè¤äº¹½Ð¿Í¤Î̾Á°¤ò¥¨¥ó¥³¡¼¥É¤¹¤?»?¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É¤ò»ØÄꤷ¤Þ¤¹¡£
62  	 * ¥Ç¥Õ¥©¥?¥È¤Ï<code>ISO-2022-JP</code>¤Ç¤¹¡£
63  	 * <p>
64  	 * Æ?Ëܸ?´Ä¶­¤ÇÍøÍѤ¹¤?¾?¹ç¤ÏÄ̾?Êѹ¹¤¹¤?ɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
65  	 * 
66  	 * @param charset ¥¨¥ó¥³¡¼¥É¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É
67  	 */
68  	public Mail(String charset) {
69  		this();
70  		this.charset = charset;
71  	}
72  
73  	/***
74  	 * ¥³¥Ô¡¼¥³¥ó¥¹¥È¥é¥¯¥¿¡£
75  	 * 
76  	 * @since 1.0.2
77  	 * 
78  	 * @param original ¥³¥Ô¡¼¸µ¤ÎMail¥¤¥ó¥¹¥¿¥ó¥¹
79  	 */
80  	public Mail(Mail original) {
81  		this.bcc = original.bcc;
82  		this.cc = original.cc;
83  		this.charset = original.charset;
84  		this.from = original.from;
85  		this.importance = original.importance;
86  		this.replyTo = original.replyTo;
87  		this.returnPath = original.returnPath;
88  		this.subject = original.subject;
89  		this.text = original.text;
90  		this.to = original.to;
91  		this.xHeaders = original.xHeaders;
92  	}
93  
94  	/***
95  	 * ¥¨¥ó¥³¡¼¥É¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É¤òÊÖ¤·¤Þ¤¹¡£
96  	 * 
97  	 * @return ¥¨¥ó¥³¡¼¥É¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É
98  	 */
99  	public String getCharset() {
100 		return charset;
101 	}
102 
103 	/***
104 	 * ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
105 	 * °ú¿ô¤Ç»ØÄ?²Äǽ¤ÊÃͤϡÖhigh¡×¡¢¡Önormal¡×¡¢¡Ölow¡×¤Î¤¤¤º¤?¤«¤Ç¤¹¡£
106 	 * 
107 	 * @param importance ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¡£¡Öhigh¡×¡¢¡Önormal¡×¡¢¡Ölow¡×¤Î¤¤¤º¤?¤«¡£
108 	 * @throws IllegalArgumentException »ØÄ?²Äǽ¤ÊÃͰʳ°¤¬»ØÄꤵ¤?¤¿¾?¹?
109 	 * 
110 	 * @see Mail.Importance
111 	 */
112 	public void setImportance(String importance) throws IllegalArgumentException {
113 		if ("high".equals(importance) || "normal".equals(importance) || "low".equals(importance)) {
114 			this.importance = importance;
115 		} else {
116 			throw new IllegalArgumentException("'" + importance + "'¤Ï¡¢¥á¡¼¥?½ÅÍ×Å٤ˤϻØÄê¤Ç¤­¤Ê¤¤ÃͤǤ¹¡£");
117 		}
118 	}
119 
120 	/***
121 	 * ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¤òÊÖ¤·¤Þ¤¹¡£
122 	 * ÃͤϡÖhigh¡×¡¢¡Önormal¡×¡¢¡Ölow¡×¤Î¤¤¤º¤?¤«¤Ç¤¹¡£
123 	 * 
124 	 * @return ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¡£¡Öhigh¡×¡¢¡Önormal¡×¡¢¡Ölow¡×¤Î¤¤¤º¤?¤«¡£
125 	 */
126 	public String getImportance() {
127 		return importance;
128 	}
129 
130 	/***
131 	 * ¥á¡¼¥?¤ÎÁ÷¿®À襢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£
132 	 * 
133 	 * @param address Á÷¿®À襢¥É¥?¥¹
134 	 */
135 	public void addTo(InternetAddress address) {
136 		if (to == null) {
137 			to = new ArrayList();
138 		}
139 		to.add(address);
140 	}
141 
142 	/***
143 	 * ¥á¡¼¥?¤ÎÁ÷¿®À襢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£
144 	 * 
145 	 * @param email Á÷¿®À襢¥É¥?¥¹
146 	 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹?
147 	 */
148 	public void addTo(String email) throws IllegalArgumentException {
149 		try {
150 			addTo(new InternetAddress(email));
151 		} catch (AddressException e) {
152 			throw new IllegalArgumentException(e.getMessage());
153 		}
154 	}
155 
156 	/***
157 	 * ¥á¡¼¥?¤ÎÁ÷¿®Àè̾¤È¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£
158 	 * ̾Á°¤ÏJIS_CHARSET¤Ç¥¨¥ó¥³¡¼¥É¤µ¤?¤Þ¤¹¡£
159 	 * 
160 	 * @param email Á÷¿®À襢¥É¥?¥¹
161 	 * @param name Á÷¿®Àè̾
162 	 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹?
163 	 */
164 	public void addTo(String email, String name) throws IllegalArgumentException {
165 		if (charset.equals(JIS_CHARSET)) {
166 			name = Cp932.toJIS(name);
167 		}
168 		try {
169 			addTo(new InternetAddress(email, name, charset));
170 		} catch (UnsupportedEncodingException e) {
171 			throw new IllegalArgumentException(e.getMessage());
172 		}
173 	}
174 
175 	/***
176 	 * ¥á¡¼¥?¤ÎÁ÷¿®À襢¥É¥?¥¹¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£
177 	 * Á÷¿®À襢¥É¥?¥¹¤¬°?·?¤â¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¤È¤­¤Ï¶õ¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£
178 	 * 
179 	 * @return Á÷¿®À襢¥É¥?¥¹¤ÎÇÛÎ?
180 	 */
181 	public InternetAddress[] getTo() {
182 		if (to == null) {
183 			return new InternetAddress[0];
184 		}
185 		return (InternetAddress[])to.toArray(new InternetAddress[to.size()]);
186 	}
187 
188 	/***
189 	 * CC¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£
190 	 * 
191 	 * @param address CC¤Î¥¢¥É¥?¥¹
192 	 */
193 	public void addCc(InternetAddress address) {
194 		if (cc == null) {
195 			cc = new ArrayList();
196 		}
197 		cc.add(address);
198 	}
199 
200 	/***
201 	 * CC¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£
202 	 * 
203 	 * @param email CC¤Î¥¢¥É¥?¥¹
204 	 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹?
205 	 */
206 	public void addCc(String email) throws IllegalArgumentException {
207 		try {
208 			addCc(new InternetAddress(email));
209 		} catch (AddressException e) {
210 			throw new IllegalArgumentException(e.getMessage());
211 		}
212 	}
213 
214 	/***
215 	 * CC¤Î°¸Ì¾¤È¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£
216 	 * ̾Á°¤ÏJIS_CHARSET¤Ç¥¨¥ó¥³¡¼¥É¤µ¤?¤Þ¤¹¡£
217 	 * 
218 	 * @param email CC¤Î¥¢¥É¥?¥¹
219 	 * @param name CC¤Î°¸Ì¾
220 	 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹?
221 	 */
222 	public void addCc(String email, String name) throws IllegalArgumentException {
223 		if (charset.equals(JIS_CHARSET)) {
224 			name = Cp932.toJIS(name);
225 		}
226 		try {
227 			addCc(new InternetAddress(email, name, charset));
228 		} catch (UnsupportedEncodingException e) {
229 			throw new IllegalArgumentException(e.getMessage());
230 		}
231 	}
232 
233 	/***
234 	 * ¥á¡¼¥?¤ÎCC¥¢¥É¥?¥¹ÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£
235 	 * CC¥¢¥É¥?¥¹¤¬°?·?¤â¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¤È¤­¤Ï¶õ¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£
236 	 * 
237 	 * @return CC¥¢¥É¥?¥¹¤ÎÇÛÎ?
238 	 */
239 	public InternetAddress[] getCc() {
240 		if (cc == null) {
241 			return new InternetAddress[0];
242 		}
243 		return (InternetAddress[])cc.toArray(new InternetAddress[cc.size()]);
244 	}
245 
246 	/***
247 	 * BCC¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£
248 	 * 
249 	 * @param address BCC¤Î¥¢¥É¥?¥¹
250 	 */
251 	public void addBcc(InternetAddress address) {
252 		if (bcc == null) {
253 			bcc = new ArrayList();
254 		}
255 		bcc.add(address);
256 	}
257 
258 	/***
259 	 * BCC¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£
260 	 * 
261 	 * @param email BCC¤Î¥¢¥É¥?¥¹
262 	 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹?
263 	 */
264 	public void addBcc(String email) throws IllegalArgumentException {
265 		try {
266 			addBcc(new InternetAddress(email));
267 		} catch (AddressException e) {
268 			throw new IllegalArgumentException(e.getMessage());
269 		}
270 	}
271 
272 	/***
273 	 * ¥á¡¼¥?¤ÎBCC¥¢¥É¥?¥¹¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£
274 	 * BCC¥¢¥É¥?¥¹¤¬°?·?¤â¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¤È¤­¤Ï¶õ¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£
275 	 * 
276 	 * @return BCC¥¢¥É¥?¥¹¤ÎÇÛÎ?
277 	 */
278 	public InternetAddress[] getBcc() {
279 		if (bcc == null) {
280 			return new InternetAddress[0];
281 		}
282 		return (InternetAddress[])bcc.toArray(new InternetAddress[bcc.size()]);
283 	}
284 
285 	/***
286 	 * ¥á¡¼¥?¤Îº¹½Ð¿Í¥¢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
287 	 * 
288 	 * @param address º¹½Ð¿Í¥¢¥É¥?¥¹
289 	 */
290 	public void setFrom(InternetAddress address) {
291 		from = address;
292 	}
293 
294 	/***
295 	 * ¥á¡¼¥?¤Îº¹½Ð¿Í¥¢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
296 	 * 
297 	 * @param email º¹½Ð¿Í¥¢¥É¥?¥¹
298 	 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹?
299 	 */
300 	public void setFrom(String email) throws IllegalArgumentException {
301 		try {
302 			setFrom(new InternetAddress(email));
303 		} catch (AddressException e) {
304 			throw new IllegalArgumentException(e.getMessage());
305 		}
306 	}
307 
308 	/***
309 	 * ¥á¡¼¥?¤Îº¹½Ð¿Í̾¤È¥¢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
310 	 * ̾Á°¤ÏJIS_CHARSET¤Ç¥¨¥ó¥³¡¼¥É¤µ¤?¤Þ¤¹¡£
311 	 * 
312 	 * @param email º¹½Ð¿Í¥¢¥É¥?¥¹
313 	 * @param name º¹½Ð¿Í̾
314 	 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹?
315 	 */
316 	public void setFrom(String email, String name) throws IllegalArgumentException {
317 		if (charset.equals(JIS_CHARSET)) {
318 			name = Cp932.toJIS(name);
319 		}
320 		try {
321 			setFrom(new InternetAddress(email, name, charset));
322 		} catch (UnsupportedEncodingException e) {
323 			throw new IllegalArgumentException(e.getMessage());
324 		}
325 	}
326 
327 	/***
328 	 * ¥á¡¼¥?¤Îº¹½Ð¿Í¥¢¥É¥?¥¹¤òÊÖ¤·¤Þ¤¹¡£¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¾?¹ç¤Ïnull¤òÊÖ¤·¤Þ¤¹¡£
329 	 * 
330 	 * @return ¥á¡¼¥?¤Îº¹½Ð¿Í¥¢¥É¥?¥¹
331 	 */
332 	public InternetAddress getFrom() {
333 		return from;
334 	}
335 
336 	/***
337 	 * Return-Path¥¢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
338 	 * 
339 	 * @param address Return-Path¥¢¥É¥?¥¹
340 	 */
341 	public void setReturnPath(InternetAddress address) {
342 		returnPath = address;
343 	}
344 
345 	/***
346 	 * Return-Path¥¢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
347 	 * 
348 	 * @param email Return-Path¥¢¥É¥?¥¹
349 	 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹?
350 	 */
351 	public void setReturnPath(String email) throws IllegalArgumentException {
352 		try {
353 			setReturnPath(new InternetAddress(email));
354 		} catch (AddressException e) {
355 			throw new IllegalArgumentException(e.getMessage());
356 		}
357 	}
358 
359 	/***
360 	 * Return-Path¥¢¥É¥?¥¹¤òÊÖ¤·¤Þ¤¹¡£
361 	 * 
362 	 * @return Return-Path¥¢¥É¥?¥¹
363 	 */
364 	public InternetAddress getReturnPath() {
365 		return returnPath;
366 	}
367 
368 	/***
369 	 * ÊÖ¿®À襢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
370 	 * 
371 	 * @param address ÊÖ¿®À襢¥É¥?¥¹
372 	 */
373 	public void setReplyTo(InternetAddress address) {
374 		replyTo = address;
375 	}
376 
377 	/***
378 	 * ÊÖ¿®À襢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
379 	 * 
380 	 * @param email ÊÖ¿®À襢¥É¥?¥¹
381 	 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹?
382 	 */
383 	public void setReplyTo(String email) throws IllegalArgumentException {
384 		try {
385 			setReplyTo(new InternetAddress(email));
386 		} catch (AddressException e) {
387 			throw new IllegalArgumentException(e.getMessage());
388 		}
389 	}
390 
391 	/***
392 	 * ¥á¡¼¥?¤ÎÊÖ¿®À襢¥É¥?¥¹¤òÊÖ¤·¤Þ¤¹¡£¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¾?¹ç¤Ïnull¤òÊÖ¤·¤Þ¤¹¡£
393 	 * 
394 	 * @return ÊÖ¿®À襢¥É¥?¥¹
395 	 */
396 	public InternetAddress getReplyTo() {
397 		return replyTo;
398 	}
399 
400 	/***
401 	 * ¥á¡¼¥?¤Î·?̾¤òÊÖ¤·¤Þ¤¹¡£¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¾?¹ç¤Ï¶õʸ»úÎó¤òÊÖ¤·¤Þ¤¹¡£
402 	 * 
403 	 * @return ¥á¡¼¥?¤Î·?̾
404 	 */
405 	public String getSubject() {
406 		if (subject == null) {
407 			return "";
408 		}
409 		return subject;
410 	}
411 
412 	/***
413 	 * ¥á¡¼¥?¤Î·?̾¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
414 	 * 
415 	 * @param subject ¥á¡¼¥?¤Î·?̾
416 	 */
417 	public void setSubject(String subject) {
418 		this.subject = subject;
419 	}
420 
421 	/***
422 	 * ¥á¡¼¥?ËÜʸ¤òÊÖ¤·¤Þ¤¹¡£
423 	 * ËÜʸ¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¾?¹ç¤Ï¶õʸ»úÎó¤òÊÖ¤·¤Þ¤¹¡£
424 	 * 
425 	 * @return ¥á¡¼¥?ËÜʸ
426 	 */
427 	public String getText() {
428 		if (text == null) {
429 			return "";
430 		}
431 		return text;
432 	}
433 
434 	/***
435 	 * ¥á¡¼¥?ËÜʸ¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£
436 	 * 
437 	 * @param text ¥á¡¼¥?ËÜʸ
438 	 */
439 	public void setText(String text) {
440 		this.text = text;
441 	}
442 
443 	/***
444 	 * ¥á¡¼¥?¥Ø¥Ã¥À¤ËǤ°Õ¤Î¥Ø¥Ã¥À¤òÄɲä·¤Þ¤¹¡£
445 	 * Ǥ°Õ¥Ø¥Ã¥À¤Ï¡ÖX-key: value¡×¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¥á¡¼¥?¥Ø¥Ã¥À¤ËÁȤ߹?¤Þ¤?¤Þ¤¹¡£
446 	 *  
447 	 * @param key Ǥ°Õ¥Ø¥Ã¥À̾¡£Æ¬¤¬"X-"¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤Ê¤±¤?¤Ð¡¢¼«Æ°Åª¤ËÉÕÍ¿¤µ¤?¤Þ¤¹¡£
448 	 * @param value Ǥ°Õ¥Ø¥Ã¥À¤ÎÃÍ
449 	 */
450 	public void addXHeader(String key, String value) {
451 		if (xHeaders == null) {
452 			xHeaders = new HashMap();
453 		}
454 		if (key.startsWith("X-")) {
455 			xHeaders.put(key, value);
456 		} else {
457 			xHeaders.put("X-" + key, value);
458 		}
459 	}
460 
461 	/***
462 	 * ¥á¡¼¥?¤ÎǤ°Õ¥Ø¥Ã¥À̾¤ÈÃͤÎMap¥¤¥ó¥¹¥¿¥ó¥¹¤òÊÖ¤·¤Þ¤¹¡£
463 	 * Ǥ°Õ¥Ø¥Ã¥À¤¬°?·?¤â¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¤È¤­¤Ïnull¤òÊÖ¤·¤Þ¤¹¡£
464 	 * <p>
465 	 * ¤³¤ÎMap¥¤¥ó¥¹¥¿¥ó¥¹¤Ø¤Î½¤Àµ¤Ï¤Ç¤­¤Þ¤»¤ó¡£(unmodifiableMap¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£)
466 	 * 
467 	 * @return ¥á¡¼¥?¤ÎǤ°Õ¥Ø¥Ã¥À̾¤ÈÃͤÎMap¥¤¥ó¥¹¥¿¥ó¥¹¡£¤Þ¤¿¤Ïnull¡£
468 	 */
469 	public Map getXHeaders() {
470 		if (xHeaders == null) {
471 			return null;
472 		}
473 		return Collections.unmodifiableMap(xHeaders);
474 	}
475 
476 	/***
477 	 * ¥á¡¼¥?ÆâÍÆ¤ò½ÐÎϤ·¤Þ¤¹¡£<br>
478 	 * ¥á¡¼¥?¤Î¥½¡¼¥¹¤Ë»÷¤¿¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç½ÐÎϤµ¤?¤Þ¤¹¡£
479 	 * 
480 	 * @see java.lang.Object#toString()
481 	 */
482 	public String toString() {
483 		StringBuffer buf = new StringBuffer(1000);
484 		buf.append("Mail\n");
485 		buf.append("Return-Path: ").append(returnPath).append("\n");
486 		buf.append("From: ").append(from != null ? from.toUnicodeString() : null).append("\n");
487 		buf.append("To: ").append(arrayToCommaDelimitedString(to)).append("\n");
488 		buf.append("Cc: ").append(arrayToCommaDelimitedString(cc)).append("\n");
489 		buf.append("Bcc: ").append(arrayToCommaDelimitedString(bcc)).append("\n");
490 		buf.append("Subject: ").append(subject).append("\n");
491 
492 		if (xHeaders != null) {
493 			for (Iterator itr = xHeaders.keySet().iterator(); itr.hasNext();) {
494 				String header = (String)itr.next();
495 				String value = (String)xHeaders.get(header);
496 				buf.append(header).append(": ").append(value).append("\n");
497 			}
498 		}
499 
500 		buf.append("\n");
501 		buf.append(text);
502 
503 		return buf.toString();
504 	}
505 
506 	/***
507 	 * @param list
508 	 * @return 
509 	 */
510 	private String arrayToCommaDelimitedString(List list) {
511 		if (list == null) {
512 			return "null";
513 		} else {
514 			StringBuffer sb = new StringBuffer();
515 			for (int i = 0, num = list.size(); i < num; i++) {
516 				if (i > 0) {
517 					sb.append(", ");
518 				}
519 				sb.append(((InternetAddress)list.get(i)).toUnicodeString());
520 			}
521 			return sb.toString();
522 		}
523 	}
524 
525 	/***
526 	 * ¥»¥Ã¥È¤µ¤?¤Æ¤¤¤?Á÷¿®À襢¥É¥?¥¹(To¥¢¥É¥?¥¹)¤òÁ´¤Æ¥¯¥?¥¢¤·¤Þ¤¹¡£
527 	 *
528 	 * @since 1.0.2
529 	 */
530 	public void clearTo() {
531 		to = null;
532 	}
533 
534 	/***
535 	 * ¥»¥Ã¥È¤µ¤?¤Æ¤¤¤?CC¥¢¥É¥?¥¹¤òÁ´¤Æ¥¯¥?¥¢¤·¤Þ¤¹¡£
536 	 *
537 	 * @since 1.0.2
538 	 */
539 	public void clearCc() {
540 		cc = null;
541 	}
542 
543 	/***
544 	 * ¥»¥Ã¥È¤µ¤?¤Æ¤¤¤?BCC¥¢¥É¥?¥¹¤òÁ´¤Æ¥¯¥?¥¢¤·¤Þ¤¹¡£
545 	 *
546 	 * @since 1.0.2
547 	 */
548 	public void clearBcc() {
549 		bcc = null;
550 	}
551 
552 	/***
553 	 * ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¡£Ä?¿ô¤Î¤ß¤òÄ?µÁ¡£
554 	 * 
555 	 * @author Tomohiro Otsuka
556 	 * @version $Id: Mail.java,v 1.7 2004/09/14 00:04:57 otsuka Exp $
557 	 */
558 	public static class Importance {
559 
560 		/*** ½ÅÍ×ÅÙ¡Ö¹â¡× */
561 		public static final String HIGH = "high";
562 
563 		/*** ½ÅÍ×ÅÙ¡ÖÃæ¡× */
564 		public static final String NORMAL = "normal";
565 
566 		/*** ½ÅÍ×ÅÙ¡ÖÄã¡× */
567 		public static final String LOW = "low";
568 
569 	}
570 }