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 }