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.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 }