001: /*
002: * File : $Source: /usr/local/cvs/opencms/src-modules/org/opencms/workplace/tools/workplace/broadcast/CmsMessageInfo.java,v $
003: * Date : $Date: 2008-02-27 12:05:53 $
004: * Version: $Revision: 1.14 $
005: *
006: * This library is part of OpenCms -
007: * the Open Source Content Management System
008: *
009: * Copyright (c) 2002 - 2008 Alkacon Software GmbH (http://www.alkacon.com)
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: * For further information about Alkacon Software GmbH, please see the
022: * company website: http://www.alkacon.com
023: *
024: * For further information about OpenCms, please see the
025: * project website: http://www.opencms.org
026: *
027: * You should have received a copy of the GNU Lesser General Public
028: * License along with this library; if not, write to the Free Software
029: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
030: */
031:
032: package org.opencms.workplace.tools.workplace.broadcast;
033:
034: import org.opencms.file.CmsObject;
035: import org.opencms.mail.CmsSimpleMail;
036: import org.opencms.main.CmsIllegalArgumentException;
037: import org.opencms.main.OpenCms;
038: import org.opencms.util.CmsStringUtil;
039:
040: import java.util.ArrayList;
041: import java.util.Collections;
042: import java.util.List;
043: import java.util.StringTokenizer;
044:
045: import javax.mail.Address;
046: import javax.mail.SendFailedException;
047: import javax.mail.internet.AddressException;
048: import javax.mail.internet.InternetAddress;
049:
050: /**
051: * Bean class for message information.<p>
052: *
053: * @author Michael Moossen
054: *
055: * @version $Revision: 1.14 $
056: *
057: * @since 6.0.0
058: */
059: public class CmsMessageInfo {
060:
061: /** Cc header string. */
062: private String m_cc = "";
063:
064: /** From header string. */
065: private String m_from = "";
066:
067: /** Message string. */
068: private String m_msg = "";
069:
070: /** Subject header string. */
071: private String m_subject = "";
072:
073: /** To header string. */
074: private String m_to = "";
075:
076: /**
077: * Default Constructor.<p>
078: */
079: public CmsMessageInfo() {
080:
081: // noop
082: }
083:
084: /**
085: * Returns the cc string.<p>
086: *
087: * @return the cc string
088: */
089: public String getCc() {
090:
091: return m_cc;
092: }
093:
094: /**
095: * Returns the from string.<p>
096: *
097: * @return the from string
098: */
099: public String getFrom() {
100:
101: return m_from;
102: }
103:
104: /**
105: * Returns the message string.<p>
106: *
107: * @return the message string
108: */
109: public String getMsg() {
110:
111: return m_msg;
112: }
113:
114: /**
115: * Returns the subject string.<p>
116: *
117: * @return the subject string
118: */
119: public String getSubject() {
120:
121: return m_subject;
122: }
123:
124: /**
125: * Returns the to string.<p>
126: *
127: * @return the to string
128: */
129: public String getTo() {
130:
131: return m_to;
132: }
133:
134: /**
135: * Sends the given message to the given addresses.<p>
136: *
137: * @param cms the cms context
138: *
139: * @throws Exception if something goes wrong
140: */
141: public void sendEmail(CmsObject cms) throws Exception {
142:
143: // create a plain text email
144: CmsSimpleMail theMail = new CmsSimpleMail();
145: theMail.setCharset(cms.getRequestContext().getEncoding());
146: theMail.setFrom(cms.getRequestContext().currentUser()
147: .getEmail(), getFrom());
148: theMail.setTo(createInternetAddresses(getTo()));
149: if (CmsStringUtil.isNotEmptyOrWhitespaceOnly(getCc())) {
150: theMail.setCc(createInternetAddresses(getCc()));
151: }
152: theMail.setSubject("["
153: + OpenCms.getSystemInfo().getServerName() + "] "
154: + getSubject());
155: theMail.setMsg(getMsg());
156: // send the mail
157: try {
158: theMail.send();
159: } catch (SendFailedException sf) {
160: // don't try to resend to successful Addresses: construct a new string with all unsent
161: StringBuffer newTo = new StringBuffer();
162: Address[] unsent = sf.getValidUnsentAddresses();
163: if (unsent != null) {
164: for (int i = unsent.length - 1; i >= 0; i--) {
165: newTo.append(unsent[i].toString()).append(';');
166: }
167: }
168: if (unsent != null) {
169: unsent = sf.getInvalidAddresses();
170: for (int i = unsent.length - 1; i >= 0; i--) {
171: newTo.append(unsent[i].toString()).append(';');
172: }
173: }
174:
175: setTo(newTo.toString());
176: // use the message of the internal cause: this is a localizes CmsRuntimeException
177: throw (Exception) sf.getCause();
178:
179: }
180: }
181:
182: /**
183: * Sets the cc string.<p>
184: *
185: * @param cc the cc string
186: */
187: public void setCc(String cc) {
188:
189: if (!CmsStringUtil.isEmptyOrWhitespaceOnly(cc)) {
190: m_cc = cc;
191: }
192: }
193:
194: /**
195: * Sets the from string.<p>
196: *
197: * @param from the from string
198: */
199: public void setFrom(String from) {
200:
201: checkString(from);
202: m_from = from;
203: }
204:
205: /**
206: * Sets the message string.<p>
207: *
208: * @param msg the message string
209: */
210: public void setMsg(String msg) {
211:
212: checkString(msg);
213: m_msg = msg;
214: }
215:
216: /**
217: * Sets the subject string.<p>
218: *
219: * @param subject the subject string
220: */
221: public void setSubject(String subject) {
222:
223: checkString(subject);
224: m_subject = subject;
225: }
226:
227: /**
228: * Sets the to string.<p>
229: *
230: * This has to be a ';' separated string of email-addresses.<p>
231: *
232: *
233: * @param to the to string
234: */
235: public void setTo(String to) {
236:
237: m_to = to;
238: }
239:
240: /**
241: * Throws a runtime exception if the string is null, empty or contains JavaScript.<p>
242: *
243: * @param string the string to check
244: */
245: private void checkString(String string) {
246:
247: if (CmsStringUtil.isEmptyOrWhitespaceOnly(string)) {
248: throw new CmsIllegalArgumentException(Messages.get()
249: .container(Messages.ERR_EMPTY_STRING_0));
250: }
251: }
252:
253: /**
254: * Creates a list of internet addresses (email) from a semicolon separated String.<p>
255: *
256: * @param mailAddresses a semicolon separated String with email addresses
257: * @return list of internet addresses (email)
258: * @throws AddressException if an email address is not correct
259: */
260: private List createInternetAddresses(String mailAddresses)
261: throws AddressException {
262:
263: if (CmsStringUtil.isNotEmpty(mailAddresses)) {
264: // at least one email address is present, generate list
265: StringTokenizer T = new StringTokenizer(mailAddresses, ";");
266: List addresses = new ArrayList(T.countTokens());
267: while (T.hasMoreTokens()) {
268: InternetAddress address = new InternetAddress(T
269: .nextToken().trim());
270: addresses.add(address);
271: }
272: return addresses;
273: } else {
274: // no address given, return empty list
275: return Collections.EMPTY_LIST;
276: }
277: }
278:
279: }
|