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