1 package com.ozacc.mail.impl; 2 3 import java.io.UnsupportedEncodingException; 4 import java.util.Iterator; 5 import java.util.Map; 6 7 import javax.mail.MessagingException; 8 import javax.mail.internet.InternetAddress; 9 import javax.mail.internet.MimeMessage; 10 import javax.mail.internet.MimeUtility; 11 12 import com.ozacc.mail.Mail; 13 14 /*** 15 * MimeMessage¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®¤¹¤?¥¯¥é¥¹¡£ 16 * 17 * @author Tomohiro Otsuka 18 * @version $Id: MimeMessageBuilder.java,v 1.3 2004/09/10 07:34:51 otsuka Exp $ 19 */ 20 public class MimeMessageBuilder { 21 22 private MimeMessage message; 23 24 private String charset = Mail.JIS_CHARSET; 25 26 private boolean hasRecipient = false; 27 28 /*** 29 * ¥³¥ó¥¹¥È¥é¥¯¥¿¡£ 30 * ¥Ç¥Õ¥©¥?¥È¤Îʸ»ú¥³¡¼¥É ISO-2022-JP ¤¬¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ë»ÈÍѤµ¤?¤Þ¤¹¡£ 31 * 32 * @param mimeMessage 33 */ 34 public MimeMessageBuilder(MimeMessage mimeMessage) { 35 this.message = mimeMessage; 36 } 37 38 /*** 39 * ¥³¥ó¥¹¥È¥é¥¯¥¿¡£ 40 * ËÜʸ¤ä·?̾¤Î¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É¤ò»ØÄꤷ¤Þ¤¹¡£ 41 * 42 * @param mimeMessage 43 * @param charset ¥¨¥ó¥³¡¼¥Ç¥£¥ó¥°¤Ë»ÈÍѤ¹¤?ʸ»ú¥³¡¼¥É 44 */ 45 public MimeMessageBuilder(MimeMessage mimeMessage, String charset) { 46 this.message = mimeMessage; 47 this.charset = charset; 48 } 49 50 /*** 51 * ¥³¥ó¥¹¥È¥é¥¯¥¿¤Î°ú¿ô¤ÇÅϤµ¤?¤¿MimeMessage¤ò¤½¤Î¤Þ¤ÞÊÖ¤·¤Þ¤¹¡£ 52 * 53 * @return MimeMessage 54 */ 55 public MimeMessage getMimeMessage() { 56 return this.message; 57 } 58 59 /*** 60 * »ØÄꤵ¤?¤¿¥á¡¼¥?¤«¤éMimeMessage¤òÀ¸À®¤·¤Þ¤¹¡£ 61 * 62 * @param mail MimeMessage¤Î¥½¡¼¥¹¤È¤Ê¤?Mail 63 * @throws MessagingException 64 * @throws UnsupportedEncodingException 65 */ 66 public void buildMimeMessage(Mail mail) throws UnsupportedEncodingException, MessagingException { 67 68 setFrom(mail); 69 70 setSubject(mail); 71 72 setText(mail); 73 74 setTo(mail); 75 76 setCc(mail); 77 78 setBcc(mail); 79 80 setReplyTo(mail); 81 82 setXHeaders(mail); 83 84 setImportance(mail); 85 86 if (!hasRecipient) { 87 throw new MessagingException("°¸Àè¤Î»ØÄ꤬¤¢¤ê¤Þ¤»¤ó¡£To¡¢Cc¡¢Bcc¤Î¤¤¤º¤?¤«°?¤Ä¤Ï»ØÄꤹ¤?ɬÍפ¬¤¢¤ê¤Þ¤¹¡£"); 88 } 89 90 } 91 92 /*** 93 * @param mail 94 * @throws MessagingException 95 */ 96 private void setXHeaders(Mail mail) throws MessagingException { 97 Map headers = mail.getXHeaders(); 98 if (headers == null) { 99 return; 100 } 101 102 Iterator itr = headers.keySet().iterator(); 103 while (itr.hasNext()) { 104 String key = (String)itr.next(); 105 String value = (String)headers.get(key); 106 message.setHeader(key, value); 107 } 108 } 109 110 /*** 111 * @param mail 112 * @throws MessagingException 113 */ 114 private void setImportance(Mail mail) throws MessagingException { 115 if (mail.getImportance() != null) { 116 message.setHeader("Importance", mail.getImportance()); 117 118 int level = 3; 119 if (Mail.Importance.HIGH.equals(mail.getImportance())) { 120 level = 1; 121 } else if (Mail.Importance.LOW.equals(mail.getImportance())) { 122 level = 5; 123 } 124 message.setHeader("X-Priority", String.valueOf(level)); 125 } 126 } 127 128 /*** 129 * @param mail 130 * @throws MessagingException 131 */ 132 private void setReplyTo(Mail mail) throws MessagingException { 133 if (mail.getReplyTo() != null) { 134 message.setReplyTo(new InternetAddress[] { mail.getReplyTo() }); 135 } 136 } 137 138 /*** 139 * @param mail 140 * @throws MessagingException 141 */ 142 private void setBcc(Mail mail) throws MessagingException { 143 if (mail.getBcc().length > 0) { 144 message.setRecipients(MimeMessage.RecipientType.BCC, mail.getBcc()); 145 hasRecipient = true; 146 } 147 } 148 149 /*** 150 * @param mail 151 * @throws MessagingException 152 */ 153 private void setCc(Mail mail) throws MessagingException { 154 if (mail.getCc().length > 0) { 155 message.setRecipients(MimeMessage.RecipientType.CC, mail.getCc()); 156 hasRecipient = true; 157 } 158 } 159 160 /*** 161 * @param mail 162 * @throws MessagingException 163 */ 164 private void setTo(Mail mail) throws MessagingException { 165 if (mail.getTo().length > 0) { 166 message.setRecipients(MimeMessage.RecipientType.TO, mail.getTo()); 167 hasRecipient = true; 168 } 169 } 170 171 /*** 172 * ËÜʸ¤ò¥»¥Ã¥È¡£ 173 * <p> 174 * NOTE: ËÜʸ¤ÎºÇ¸å¤Ë²?¹Ô¤¬¤Ê¤¤¤ÈMozilla·Ï¤Î¥á¡¼¥é¡¼¤ÇºÇ½ª¹Ô¤ÎÆ?Ëܸ?¤¬Ê¸»ú²½¤±¤·¤Æ¤·¤Þ¤¦°Ù¡¢ 175 * message.setText¤Î°ú¿ô¤ÇºÇ¸å¤Ë\n¤òÄɲ䷤Ƥ¤¤?¡£ 176 * 177 * @param mail 178 * @throws MessagingException 179 */ 180 private void setText(Mail mail) throws MessagingException { 181 if (charset != null) { 182 message.setText(mail.getText() + "\n", charset); 183 if (charset.equalsIgnoreCase(Mail.JIS_CHARSET)) { 184 message.setHeader("Content-Transfer-Encoding", "7bit"); 185 } 186 } else { 187 message.setText(mail.getText()); 188 } 189 } 190 191 /*** 192 * @param mail 193 * @throws MessagingException 194 * @throws UnsupportedEncodingException 195 */ 196 private void setSubject(Mail mail) throws UnsupportedEncodingException, MessagingException { 197 if (charset != null) { 198 if (charset.equalsIgnoreCase(Mail.JIS_CHARSET)) { 199 message.setSubject(MimeUtility.encodeText(mail.getSubject(), charset, "B")); 200 } else { 201 message.setSubject(mail.getSubject(), charset); 202 } 203 } else { 204 message.setSubject(mail.getSubject()); 205 } 206 } 207 208 /*** 209 * @param mail 210 * @throws MessagingException 211 */ 212 private void setFrom(Mail mail) throws MessagingException { 213 message.setFrom(mail.getFrom()); 214 } 215 216 }