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 }