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