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.List; 8 import java.util.Map; 9 10 import javax.mail.internet.AddressException; 11 import javax.mail.internet.InternetAddress; 12 13 /*** 14 * ¥á¡¼¥?¡£ 15 * 16 * @author Tomohiro Otsuka 17 * @version $Id: Mail.java,v 1.3 2004/09/05 16:15:35 otsuka Exp $ 18 */ 19 public class Mail { 20 21 /*** <code>ISO-2022-JP</code> */ 22 public static final String JIS_CHARSET = "ISO-2022-JP"; 23 24 private String charset = JIS_CHARSET; 25 26 private String text; 27 28 private InternetAddress from; 29 30 private String subject; 31 32 private List to; 33 34 private List cc; 35 36 private List bcc; 37 38 private InternetAddress returnPath; 39 40 private InternetAddress replyTo; 41 42 private String importance; 43 44 private Map xHeaders; 45 46 /*** 47 * ¥³¥ó¥¹¥È¥é¥¯¥¿¡£ 48 */ 49 public Mail() {} 50 51 /*** 52 * ¥³¥ó¥¹¥È¥é¥¯¥¿¡£ 53 * °¸Àè¤äº¹½Ð¿Í¤Î̾Á°¤ò¥¨¥ó¥³¡¼¥É¤¹¤?»?¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É¤ò»ØÄꤷ¤Þ¤¹¡£ 54 * ¥Ç¥Õ¥©¥?¥È¤Ï<code>ISO-2022-JP</code>¤Ç¤¹¡£ 55 * <p> 56 * Æ?Ëܸ?´Ä¶¤ÇÍøÍѤ¹¤?¾?¹ç¤ÏÄ̾?Êѹ¹¤¹¤?ɬÍפϤ¢¤ê¤Þ¤»¤ó¡£ 57 * 58 * @param charset ¥¨¥ó¥³¡¼¥É¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É 59 */ 60 public Mail(String charset) { 61 this(); 62 this.charset = charset; 63 } 64 65 /*** 66 * ¥¨¥ó¥³¡¼¥É¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É¤òÊÖ¤·¤Þ¤¹¡£ 67 * 68 * @return ¥¨¥ó¥³¡¼¥É¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É 69 */ 70 public String getCharset() { 71 return charset; 72 } 73 74 /*** 75 * ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£ 76 * °ú¿ô¤Ç»ØÄ?²Äǽ¤ÊÃͤϡÖhigh¡×¡¢¡Önormal¡×¡¢¡Ölow¡×¤Î¤¤¤º¤?¤«¤Ç¤¹¡£ 77 * 78 * @param importance ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¡£¡Öhigh¡×¡¢¡Önormal¡×¡¢¡Ölow¡×¤Î¤¤¤º¤?¤«¡£ 79 * @throws IllegalArgumentException »ØÄ?²Äǽ¤ÊÃͰʳ°¤¬»ØÄꤵ¤?¤¿¾?¹? 80 * 81 * @see Mail.Importance 82 */ 83 public void setImportance(String importance) throws IllegalArgumentException { 84 if ("high".equals(importance) || "normal".equals(importance) || "low".equals(importance)) { 85 this.importance = importance; 86 } else { 87 throw new IllegalArgumentException("'" + importance + "'¤Ï¡¢¥á¡¼¥?½ÅÍ×Å٤ˤϻØÄê¤Ç¤¤Ê¤¤ÃͤǤ¹¡£"); 88 } 89 } 90 91 /*** 92 * ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¤òÊÖ¤·¤Þ¤¹¡£ 93 * ÃͤϡÖhigh¡×¡¢¡Önormal¡×¡¢¡Ölow¡×¤Î¤¤¤º¤?¤«¤Ç¤¹¡£ 94 * 95 * @return ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¡£¡Öhigh¡×¡¢¡Önormal¡×¡¢¡Ölow¡×¤Î¤¤¤º¤?¤«¡£ 96 */ 97 public String getImportance() { 98 return importance; 99 } 100 101 /*** 102 * ¥á¡¼¥?¤ÎÁ÷¿®À襢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£ 103 * 104 * @param email Á÷¿®À襢¥É¥?¥¹ 105 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹? 106 */ 107 public void addTo(String email) throws IllegalArgumentException { 108 if (to == null) { 109 to = new ArrayList(); 110 } 111 try { 112 to.add(new InternetAddress(email)); 113 } catch (AddressException e) { 114 throw new IllegalArgumentException(e.getMessage()); 115 } 116 } 117 118 /*** 119 * ¥á¡¼¥?¤ÎÁ÷¿®Àè̾¤È¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£ 120 * ̾Á°¤ÏJIS_CHARSET¤Ç¥¨¥ó¥³¡¼¥É¤µ¤?¤Þ¤¹¡£ 121 * 122 * @param email Á÷¿®À襢¥É¥?¥¹ 123 * @param name Á÷¿®Àè̾ 124 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹? 125 */ 126 public void addTo(String email, String name) throws IllegalArgumentException { 127 if (to == null) { 128 to = new ArrayList(); 129 } 130 try { 131 to.add(new InternetAddress(email, name, charset)); 132 } catch (UnsupportedEncodingException e) { 133 throw new IllegalArgumentException(e.getMessage()); 134 } 135 } 136 137 /*** 138 * ¥á¡¼¥?¤ÎÁ÷¿®À襢¥É¥?¥¹¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£ 139 * Á÷¿®À襢¥É¥?¥¹¤¬°?·?¤â¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¤È¤¤Ï¶õ¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£ 140 * 141 * @return Á÷¿®À襢¥É¥?¥¹¤ÎÇÛÎ? 142 */ 143 public InternetAddress[] getTo() { 144 if (to == null) { 145 return new InternetAddress[0]; 146 } 147 return (InternetAddress[])to.toArray(new InternetAddress[to.size()]); 148 } 149 150 /*** 151 * CC¤Î¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£ 152 * 153 * @param email CC¤Î¥¢¥É¥?¥¹ 154 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹? 155 */ 156 public void addCc(String email) throws IllegalArgumentException { 157 if (cc == null) { 158 cc = new ArrayList(); 159 } 160 try { 161 cc.add(new InternetAddress(email)); 162 } catch (AddressException e) { 163 throw new IllegalArgumentException(e.getMessage()); 164 } 165 } 166 167 /*** 168 * CC¤Î°¸Ì¾¤È¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£ 169 * ̾Á°¤ÏJIS_CHARSET¤Ç¥¨¥ó¥³¡¼¥É¤µ¤?¤Þ¤¹¡£ 170 * 171 * @param email CC¤Î¥¢¥É¥?¥¹ 172 * @param name CC¤Î°¸Ì¾ 173 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹? 174 */ 175 public void addCc(String email, String name) throws IllegalArgumentException { 176 if (cc == null) { 177 cc = new ArrayList(); 178 } 179 try { 180 cc.add(new InternetAddress(email, name, charset)); 181 } catch (UnsupportedEncodingException e) { 182 throw new IllegalArgumentException(e.getMessage()); 183 } 184 } 185 186 /*** 187 * ¥á¡¼¥?¤ÎCC¥¢¥É¥?¥¹¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£ 188 * CC¥¢¥É¥?¥¹¤¬°?·?¤â¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¤È¤¤Ï¶õ¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£ 189 * 190 * @return CC¥¢¥É¥?¥¹¤ÎÇÛÎ? 191 */ 192 public InternetAddress[] getCc() { 193 if (cc == null) { 194 return new InternetAddress[0]; 195 } 196 return (InternetAddress[])cc.toArray(new InternetAddress[cc.size()]); 197 } 198 199 /*** 200 * BCC¤Î¥¢¥É¥?¥¹¤òÄɲä·¤Þ¤¹¡£ 201 * 202 * @param email BCC¤Î¥¢¥É¥?¥¹ 203 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹? 204 */ 205 public void addBcc(String email) throws IllegalArgumentException { 206 if (bcc == null) { 207 bcc = new ArrayList(); 208 } 209 try { 210 bcc.add(new InternetAddress(email)); 211 } catch (AddressException e) { 212 throw new IllegalArgumentException(e.getMessage()); 213 } 214 } 215 216 /*** 217 * ¥á¡¼¥?¤ÎBCC¥¢¥É¥?¥¹¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£ 218 * BCC¥¢¥É¥?¥¹¤¬°?·?¤â¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¤È¤¤Ï¶õ¤ÎÇÛÎó¤òÊÖ¤·¤Þ¤¹¡£ 219 * 220 * @return BCC¥¢¥É¥?¥¹¤ÎÇÛÎ? 221 */ 222 public InternetAddress[] getBcc() { 223 if (bcc == null) { 224 return new InternetAddress[0]; 225 } 226 return (InternetAddress[])bcc.toArray(new InternetAddress[bcc.size()]); 227 } 228 229 /*** 230 * ¥á¡¼¥?¤Îº¹½Ð¿Í¥¢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£ 231 * 232 * @param email º¹½Ð¿Í¥¢¥É¥?¥¹ 233 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹? 234 */ 235 public void setFrom(String email) throws IllegalArgumentException { 236 try { 237 from = new InternetAddress(email); 238 } catch (AddressException e) { 239 throw new IllegalArgumentException(e.getMessage()); 240 } 241 } 242 243 /*** 244 * ¥á¡¼¥?¤Îº¹½Ð¿Í̾¤È¥¢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£ 245 * ̾Á°¤ÏJIS_CHARSET¤Ç¥¨¥ó¥³¡¼¥É¤µ¤?¤Þ¤¹¡£ 246 * 247 * @param email º¹½Ð¿Í¥¢¥É¥?¥¹ 248 * @param name º¹½Ð¿Í̾ 249 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹? 250 */ 251 public void setFrom(String email, String name) throws IllegalArgumentException { 252 try { 253 from = new InternetAddress(email, name, charset); 254 } catch (UnsupportedEncodingException e) { 255 throw new IllegalArgumentException(e.getMessage()); 256 } 257 } 258 259 /*** 260 * ¥á¡¼¥?¤Îº¹½Ð¿Í¥¢¥É¥?¥¹¤òÊÖ¤·¤Þ¤¹¡£¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¾?¹ç¤Ïnull¤òÊÖ¤·¤Þ¤¹¡£ 261 * 262 * @return ¥á¡¼¥?¤Îº¹½Ð¿Í¥¢¥É¥?¥¹ 263 */ 264 public InternetAddress getFrom() { 265 return from; 266 } 267 268 /*** 269 * Return-Path¥¢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£ 270 * 271 * @param email Return-Path¥¢¥É¥?¥¹ 272 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹? 273 */ 274 public void setReturnPath(String email) throws IllegalArgumentException { 275 try { 276 returnPath = new InternetAddress(email); 277 } catch (AddressException e) { 278 throw new IllegalArgumentException(e.getMessage()); 279 } 280 } 281 282 /*** 283 * Return-Path¥¢¥É¥?¥¹¤òÊÖ¤·¤Þ¤¹¡£ 284 * 285 * @return Return-Path¥¢¥É¥?¥¹ 286 */ 287 public InternetAddress getReturnPath() { 288 return returnPath; 289 } 290 291 /*** 292 * ÊÖ¿®À襢¥É¥?¥¹¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£ 293 * 294 * @param email ÊÖ¿®À襢¥É¥?¥¹ 295 * @throws IllegalArgumentException ÉÔÀµ¤Ê¥Õ¥©¡¼¥Þ¥Ã¥È¤Î¥¢¥É¥?¥¹¤¬»ØÄꤵ¤?¤¿¾?¹? 296 */ 297 public void setReplyTo(String email) throws IllegalArgumentException { 298 try { 299 replyTo = new InternetAddress(email); 300 } catch (AddressException e) { 301 throw new IllegalArgumentException(e.getMessage()); 302 } 303 } 304 305 /*** 306 * ¥á¡¼¥?¤ÎÊÖ¿®À襢¥É¥?¥¹¤òÊÖ¤·¤Þ¤¹¡£¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¾?¹ç¤Ïnull¤òÊÖ¤·¤Þ¤¹¡£ 307 * 308 * @return ÊÖ¿®À襢¥É¥?¥¹ 309 */ 310 public InternetAddress getReplyTo() { 311 return replyTo; 312 } 313 314 /*** 315 * ¥á¡¼¥?¤Î·?̾¤òÊÖ¤·¤Þ¤¹¡£¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¾?¹ç¤Ï¶õʸ»úÎó¤òÊÖ¤·¤Þ¤¹¡£ 316 * 317 * @return ¥á¡¼¥?¤Î·?̾ 318 */ 319 public String getSubject() { 320 if (subject == null) { 321 return ""; 322 } 323 return subject; 324 } 325 326 /*** 327 * ¥á¡¼¥?¤Î·?̾¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£ 328 * 329 * @param subject ¥á¡¼¥?¤Î·?̾ 330 */ 331 public void setSubject(String subject) { 332 this.subject = subject; 333 } 334 335 /*** 336 * ¥á¡¼¥?ËÜʸ¤òÊÖ¤·¤Þ¤¹¡£ 337 * ËÜʸ¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¾?¹ç¤Ï¶õʸ»úÎó¤òÊÖ¤·¤Þ¤¹¡£ 338 * 339 * @return ¥á¡¼¥?ËÜʸ 340 */ 341 public String getText() { 342 if (text == null) { 343 return ""; 344 } 345 return text; 346 } 347 348 /*** 349 * ¥á¡¼¥?ËÜʸ¤ò¥»¥Ã¥È¤·¤Þ¤¹¡£ 350 * 351 * @param text ¥á¡¼¥?ËÜʸ 352 */ 353 public void setText(String text) { 354 this.text = text; 355 } 356 357 /*** 358 * ¥á¡¼¥?¥Ø¥Ã¥À¤ËǤ°Õ¤Î¥Ø¥Ã¥À¤òÄɲä·¤Þ¤¹¡£ 359 * Ǥ°Õ¥Ø¥Ã¥À¤Ï¡ÖX-key: value¡×¤Î¥Õ¥©¡¼¥Þ¥Ã¥È¤Ç¥á¡¼¥?¥Ø¥Ã¥À¤ËÁȤ߹?¤Þ¤?¤Þ¤¹¡£ 360 * 361 * @param key Ǥ°Õ¥Ø¥Ã¥À̾¡£Æ¬¤¬"X-"¤Ç»Ï¤Þ¤Ã¤Æ¤¤¤Ê¤±¤?¤Ð¡¢¼«Æ°Åª¤ËÉÕÍ¿¤µ¤?¤Þ¤¹¡£ 362 * @param value Ǥ°Õ¥Ø¥Ã¥À¤ÎÃÍ 363 */ 364 public void addXHeader(String key, String value) { 365 if (xHeaders == null) { 366 xHeaders = new HashMap(); 367 } 368 if (key.startsWith("X-")) { 369 xHeaders.put(key, value); 370 } else { 371 xHeaders.put("X-" + key, value); 372 } 373 } 374 375 /*** 376 * ¥á¡¼¥?¤ÎǤ°Õ¥Ø¥Ã¥À̾¤ÈÃͤÎMap¥¤¥ó¥¹¥¿¥ó¥¹¤òÊÖ¤·¤Þ¤¹¡£ 377 * Ǥ°Õ¥Ø¥Ã¥À¤¬°?·?¤â¥»¥Ã¥È¤µ¤?¤Æ¤¤¤Ê¤¤¤È¤¤Ïnull¤òÊÖ¤·¤Þ¤¹¡£ 378 * <p> 379 * ¤³¤ÎMap¥¤¥ó¥¹¥¿¥ó¥¹¤Ø¤Î½¤Àµ¤Ï¤Ç¤¤Þ¤»¤ó¡£(unmodifiableMap¤Ë¤Ê¤Ã¤Æ¤¤¤Þ¤¹¡£) 380 * 381 * @return ¥á¡¼¥?¤ÎǤ°Õ¥Ø¥Ã¥À̾¤ÈÃͤÎMap¥¤¥ó¥¹¥¿¥ó¥¹¡£¤Þ¤¿¤Ïnull¡£ 382 */ 383 public Map getXHeaders() { 384 if (xHeaders == null) { 385 return null; 386 } 387 return Collections.unmodifiableMap(xHeaders); 388 } 389 390 /*** 391 * @see java.lang.Object#toString() 392 */ 393 public String toString() { 394 StringBuffer sb = new StringBuffer("Mail: "); 395 sb.append("from=").append(this.from == null ? "null" : this.from.toUnicodeString()).append( 396 "; "); 397 sb.append("replyTo=") 398 .append(this.replyTo == null ? "null" : this.replyTo.toUnicodeString()) 399 .append("; "); 400 sb.append("to=").append(arrayToCommaDelimitedString(this.to)).append("; "); 401 sb.append("cc=").append(arrayToCommaDelimitedString(this.cc)).append("; "); 402 sb.append("bcc=").append(arrayToCommaDelimitedString(this.bcc)).append("; "); 403 sb.append("subject=").append(this.subject).append("; "); 404 sb.append("text=").append(this.text); 405 return sb.toString(); 406 } 407 408 /*** 409 * @param list 410 * @return 411 */ 412 private String arrayToCommaDelimitedString(List list) { 413 if (list == null) { 414 return "null"; 415 } else { 416 StringBuffer sb = new StringBuffer(); 417 for (int i = 0, num = list.size(); i < num; i++) { 418 if (i > 0) { 419 sb.append(", "); 420 } 421 sb.append(((InternetAddress)list.get(i)).toUnicodeString()); 422 } 423 return sb.toString(); 424 } 425 } 426 427 /*** 428 * ¥á¡¼¥?¤Î½ÅÍ×ÅÙ¡£Ä?¿ô¤Î¤ß¤òÄ?µÁ¡£ 429 * 430 * @author Tomohiro Otsuka 431 * @version $Id: Mail.java,v 1.3 2004/09/05 16:15:35 otsuka Exp $ 432 */ 433 public static class Importance { 434 435 /*** ½ÅÍ×ÅÙ¡Ö¹â¡× */ 436 public static final String HIGH = "high"; 437 438 /*** ½ÅÍ×ÅÙ¡ÖÃæ¡× */ 439 public static final String NORMAL = "normal"; 440 441 /*** ½ÅÍ×ÅÙ¡ÖÄã¡× */ 442 public static final String LOW = "low"; 443 444 } 445 }