001: //$HeadURL: https://svn.wald.intevation.org/svn/deegree/base/trunk/src/org/deegree/framework/mail/MailHelper.java $
002: /*---------------- FILE HEADER ------------------------------------------
003:
004: This file is part of deegree.
005: Copyright (C) 2001-2008 by:
006: EXSE, Department of Geography, University of Bonn
007: http://www.giub.uni-bonn.de/deegree/
008: lat/lon GmbH
009: http://www.lat-lon.de
010:
011: This library is free software; you can redistribute it and/or
012: modify it under the terms of the GNU Lesser General Public
013: License as published by the Free Software Foundation; either
014: version 2.1 of the License, or (at your option) any later version.
015:
016: This library is distributed in the hope that it will be useful,
017: but WITHOUT ANY WARRANTY; without even the implied warranty of
018: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
019: Lesser General Public License for more details.
020:
021: You should have received a copy of the GNU Lesser General Public
022: License along with this library; if not, write to the Free Software
023: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
024:
025: Contact:
026:
027: Andreas Poth
028: lat/lon GmbH
029: Aennchenstr. 19
030: 53115 Bonn
031: Germany
032: E-Mail: poth@lat-lon.de
033:
034: Prof. Dr. Klaus Greve
035: Department of Geography
036: University of Bonn
037: Meckenheimer Allee 166
038: 53115 Bonn
039: Germany
040: E-Mail: greve@giub.uni-bonn.de
041:
042:
043: ---------------------------------------------------------------------------*/
044: package org.deegree.framework.mail;
045:
046: // J2EE 1.2
047: import java.io.File;
048: import java.util.ArrayList;
049: import java.util.Date;
050: import java.util.List;
051: import java.util.Properties;
052:
053: import javax.mail.Message;
054: import javax.mail.Multipart;
055: import javax.mail.Session;
056: import javax.mail.Transport;
057: import javax.mail.internet.InternetAddress;
058: import javax.mail.internet.MimeBodyPart;
059: import javax.mail.internet.MimeMessage;
060: import javax.mail.internet.MimeMultipart;
061:
062: import org.deegree.framework.log.ILogger;
063: import org.deegree.framework.log.LoggerFactory;
064: import org.deegree.framework.util.CharsetUtils;
065: import org.deegree.framework.util.StringTools;
066: import org.deegree.i18n.Messages;
067:
068: /**
069: * A helper class to create and send mail.
070: *
071: * @author <a href="mailto:tfr@users.sourceforge.net">Torsten Friebe </A>
072: * @author last edited by: $Author: apoth $
073: *
074: * @version $Revision: 9339 $,$Date: 2007-12-27 04:31:52 -0800 (Thu, 27 Dec 2007) $
075: *
076: * @see javax.mail.Message
077: * @see javax.mail.internet.MimeMessage
078: */
079:
080: public final class MailHelper {
081:
082: private static final ILogger LOG = LoggerFactory
083: .getLogger(MailHelper.class);
084:
085: /**
086: * Creates a mail helper to send a message.
087: *
088: */
089: public MailHelper() {
090: }
091:
092: /**
093: * This method creates an email message and sends it using the J2EE mail services
094: *
095: * @param eMess
096: * a email message
097: * @param mailHost
098: * name of the SMTP host
099: *
100: * @throws SendMailException
101: * an exception if the message is undeliverable
102: */
103: public static void createAndSendMail(MailMessage eMess,
104: String mailHost) throws SendMailException {
105: Properties p = System.getProperties();
106: p.put("mail.smtp.host", mailHost);
107: new MailHelper().createAndSendMail(eMess, Session
108: .getDefaultInstance(p));
109: }
110:
111: /**
112: * This method creates an email message and sends it using the J2EE mail services
113: *
114: * @param eMess
115: * a email message
116: * @param mailHost
117: * name of the SMTP host
118: * @param attachment
119: * Object to attach to a mail
120: * @param mimeType
121: * mimetype of the attchment
122: * @throws SendMailException
123: */
124: public static void createAndSendMail(MailMessage eMess,
125: String mailHost, Object[] attachment, String[] mimeType)
126: throws SendMailException {
127: Properties p = System.getProperties();
128: p.put("mail.smtp.host", mailHost);
129: new MailHelper().createAndSendMail(eMess, Session
130: .getDefaultInstance(p), attachment, mimeType);
131: }
132:
133: /**
134: * This method creates an email message and sends it using the J2EE mail services
135: *
136: * @param eMess
137: * a email message
138: * @param mailHost
139: * name of the SMTP host
140: * @param files
141: * files to attach to a mail
142: * @param mimeType
143: * mimetype of the attchment
144: * @throws SendMailException
145: */
146: public static void createAndSendMail(MailMessage eMess,
147: String mailHost, File[] files, String[] mimeType)
148: throws SendMailException {
149: Properties p = System.getProperties();
150: p.put("mail.smtp.host", mailHost);
151: new MailHelper().createAndSendMail(eMess, Session
152: .getDefaultInstance(p), files, mimeType);
153: }
154:
155: /**
156: * This method creates an email message and sends it using the J2EE mail services
157: *
158: * @param eMess
159: * a email message
160: * @param session
161: *
162: * @throws SendMailException
163: * an exception if the message is undeliverable
164: *
165: * @see javax.mail.Transport
166: * @see <a href="http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Resources4.html#63060">J2EE Mail
167: * Session connection </a>
168: */
169: public void createAndSendMail(MailMessage eMess, Session session)
170: throws SendMailException {
171: createAndSendMail(eMess, session, null, null);
172: }
173:
174: /**
175: * This method creates an email message and sends it using the J2EE mail services
176: *
177: * @param eMess
178: * an email message
179: * @param session
180: * @param attachment
181: * Object to attach to a mail
182: * @param mimeType
183: * mimetype of the attchment
184: * @throws SendMailException
185: * an exception if the message is undeliverable
186: */
187: public void createAndSendMail(MailMessage eMess, Session session,
188: Object[] attachment, String[] mimeType)
189: throws SendMailException {
190: if (eMess == null || !eMess.isValid()) {
191: throw new SendMailException("Not a valid e-mail!");
192: }
193: try {
194: int k = eMess.getMessageBody().length() > 60 ? 60 : eMess
195: .getMessageBody().length() - 1;
196: LOG.logDebug(StringTools.concat(500,
197: "Sending message, From: ", eMess.getSender(),
198: "\nTo: ", eMess.getReceiver(), "\nSubject: ", eMess
199: .getSubject(), "\nContents: ", eMess
200: .getMessageBody().substring(0, k), "..."));
201: // construct the message
202: MimeMessage msg = new MimeMessage(session);
203: msg.setFrom(new InternetAddress(eMess.getSender()));
204: msg.setRecipients(Message.RecipientType.TO, InternetAddress
205: .parse(eMess.getReceiver(), false));
206: msg.setSubject(eMess.getSubject(), CharsetUtils
207: .getSystemCharset());
208: msg.setHeader("X-Mailer", "JavaMail");
209: msg.setSentDate(new Date());
210:
211: // create and fill the first message part
212: List<MimeBodyPart> mbps = new ArrayList<MimeBodyPart>();
213: MimeBodyPart mbp = new MimeBodyPart();
214: mbp.setContent(eMess.getMessageBody(), eMess.getMimeType());
215: mbps.add(mbp);
216: if (attachment != null) {
217: if (attachment.length != mimeType.length) {
218: throw new SendMailException(Messages
219: .getMessage("FRAMEWORK_MAIL_ATTACH"));
220: }
221: for (int i = 0; i < attachment.length; i++) {
222: mbp = new MimeBodyPart();
223: mbp.setContent(attachment[i], mimeType[i]);
224: mbp.setFileName("file" + i);
225: mbps.add(mbp);
226: }
227: }
228: // create the Multipart and add its parts to it
229: Multipart mp = new MimeMultipart();
230: for (int i = 0; i < mbps.size(); i++) {
231: mp.addBodyPart(mbps.get(i));
232: }
233: msg.setContent(mp);
234: // send the mail off
235: Transport.send(msg);
236: LOG.logDebug("Mail sent successfully! Header=", eMess
237: .getHeader());
238: } catch (Exception e) {
239: LOG.logError(e.getMessage(), e);
240: String s = Messages.getMessage("FRAMEWORK_MAIL_SEND_ERROR",
241: eMess.getHeader());
242: throw new SendMailException(s, e);
243: }
244: }
245:
246: /**
247: * This method creates an email message and sends it using the J2EE mail services
248: *
249: * @param eMess
250: * an email message
251: * @param session
252: * @param files
253: * files to attach to a mail
254: * @param mimeType
255: * mimetype of the attchment
256: * @throws SendMailException
257: * an exception if the message is undeliverable
258: */
259: public void createAndSendMail(MailMessage eMess, Session session,
260: File[] files, String[] mimeType) throws SendMailException {
261: if (eMess == null || !eMess.isValid()) {
262: throw new SendMailException("Not a valid e-mail!");
263: }
264: try {
265: int k = eMess.getMessageBody().length() > 60 ? 60 : eMess
266: .getMessageBody().length() - 1;
267: LOG.logDebug(StringTools.concat(500,
268: "Sending message, From: ", eMess.getSender(),
269: "\nTo: ", eMess.getReceiver(), "\nSubject: ", eMess
270: .getSubject(), "\nContents: ", eMess
271: .getMessageBody().substring(0, k), "..."));
272: // construct the message
273: MimeMessage msg = new MimeMessage(session);
274: msg.setFrom(new InternetAddress(eMess.getSender()));
275: msg.setRecipients(Message.RecipientType.TO, InternetAddress
276: .parse(eMess.getReceiver(), false));
277: msg.setSubject(eMess.getSubject(), CharsetUtils
278: .getSystemCharset());
279: msg.setHeader("X-Mailer", "JavaMail");
280: msg.setSentDate(new Date());
281:
282: // create and fill the first message part
283: List<MimeBodyPart> mbps = new ArrayList<MimeBodyPart>();
284: MimeBodyPart mbp = new MimeBodyPart();
285: mbp.setContent(eMess.getMessageBody(), eMess.getMimeType());
286: mbps.add(mbp);
287: if (files != null) {
288: if (files.length != mimeType.length) {
289: throw new SendMailException(Messages
290: .getMessage("FRAMEWORK_MAIL_ATTACH"));
291: }
292: for (int i = 0; i < files.length; i++) {
293: mbp = new MimeBodyPart();
294: mbp.attachFile(files[i]);
295: mbp.setHeader("Content-Type", mimeType[i]);
296: mbps.add(mbp);
297: }
298: }
299: // create the Multipart and add its parts to it
300: Multipart mp = new MimeMultipart();
301: for (int i = 0; i < mbps.size(); i++) {
302: mp.addBodyPart(mbps.get(i));
303: }
304: msg.setContent(mp);
305: // send the mail off
306: Transport.send(msg);
307: LOG.logDebug("Mail sent successfully! Header=", eMess
308: .getHeader());
309: } catch (Exception e) {
310: LOG.logError(e.getMessage(), e);
311: String s = Messages.getMessage("FRAMEWORK_MAIL_SEND_ERROR",
312: eMess.getHeader());
313: throw new SendMailException(s, e);
314: }
315: }
316: }
|