View Javadoc

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 }