001: /*
002: * $Header: /cvsroot/mvnforum/mvnforum/src/com/mvnforum/common/SendMailUtil.java,v 1.26 2007/10/16 06:49:38 lexuanttkhtn Exp $
003: * $Author: lexuanttkhtn $
004: * $Revision: 1.26 $
005: * $Date: 2007/10/16 06:49:38 $
006: *
007: * ====================================================================
008: *
009: * Copyright (C) 2002-2007 by MyVietnam.net
010: *
011: * All copyright notices regarding mvnForum MUST remain
012: * intact in the scripts and in the outputted HTML.
013: * The "powered by" text/logo with a link back to
014: * http://www.mvnForum.com and http://www.MyVietnam.net in
015: * the footer of the pages MUST remain visible when the pages
016: * are viewed on the internet or intranet.
017: *
018: * This program is free software; you can redistribute it and/or modify
019: * it under the terms of the GNU General Public License as published by
020: * the Free Software Foundation; either version 2 of the License, or
021: * any later version.
022: *
023: * This program is distributed in the hope that it will be useful,
024: * but WITHOUT ANY WARRANTY; without even the implied warranty of
025: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
026: * GNU General Public License for more details.
027: *
028: * You should have received a copy of the GNU General Public License
029: * along with this program; if not, write to the Free Software
030: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
031: *
032: * Support can be obtained from support forums at:
033: * http://www.mvnForum.com/mvnforum/index
034: *
035: * Correspondence and Marketing Questions can be sent to:
036: * info at MyVietnam net
037: *
038: * @author: Minh Nguyen
039: * @author: Mai Nguyen
040: */
041: package com.mvnforum.common;
042:
043: import java.io.*;
044: import java.util.HashMap;
045: import java.util.Map;
046:
047: import javax.mail.MessagingException;
048:
049: import com.mvnforum.*;
050: import com.mvnforum.db.DAOFactory;
051: import com.mvnforum.db.MemberBean;
052: import com.mvnforum.service.MvnForumInfoService;
053: import com.mvnforum.service.MvnForumServiceFactory;
054: import com.mvnforum.user.UserModuleConfig;
055:
056: import freemarker.template.*;
057:
058: import net.myvietnam.mvncore.exception.*;
059: import net.myvietnam.mvncore.util.*;
060:
061: import org.apache.commons.logging.Log;
062: import org.apache.commons.logging.LogFactory;
063:
064: public class SendMailUtil {
065:
066: private static Log log = LogFactory.getLog(SendMailUtil.class);
067:
068: private static MvnForumInfoService mvnForumInfo = MvnForumServiceFactory
069: .getMvnForumService().getMvnForumInfoService();
070:
071: private SendMailUtil() {
072: }
073:
074: public static void sendActivationCodeEmail(int memberID,
075: String serverName) throws ObjectNotFoundException,
076: DatabaseException, BadInputException, MessagingException,
077: IOException, TemplateException {
078:
079: MailMessageStruct mailMessageStruct = getActivationCodeEmail(
080: memberID, serverName);
081: try {
082: MailUtil.sendMail(mailMessageStruct);
083: } catch (UnsupportedEncodingException e) {
084: log.error("Cannot support encoding", e);
085: }
086: }
087:
088: // This method can be optimized by accept input of type MemberBean
089: public static MailMessageStruct getActivationCodeEmail(
090: int memberID, String serverName)
091: throws ObjectNotFoundException, DatabaseException,
092: BadInputException, IOException, TemplateException {
093:
094: // Now, check that this member is not activated, to prevent the
095: // situation that other people try to annoy this member
096: String activateCode = DAOFactory.getMemberDAO()
097: .getActivateCode(memberID);
098: if (activateCode
099: .equals(MemberBean.MEMBER_ACTIVATECODE_ACTIVATED)) {
100: //@todo : localize me
101: throw new BadInputException(
102: "Cannot activate an already activated member.");
103: }
104:
105: MemberBean memberBean = DAOFactory.getMemberDAO().getMember(
106: memberID);
107: String memberName = memberBean.getMemberName();
108: String memberEmail = memberBean.getMemberEmail();
109:
110: // generate a Activation code
111: // Note that the activation code does not need security MD5 as in the Password Reset
112: if (activateCode.equals("")) {
113: // only generate activate code when the current value is empty
114: // that is, if there is an activate code, re-use it.
115: activateCode = String.valueOf(System.currentTimeMillis());
116: DAOFactory.getMemberDAO().updateActivateCode(memberID,
117: activateCode);
118: }
119:
120: // we have pass the assertion check, go ahead
121: StringBuffer activationUrl = new StringBuffer(256);
122: activationUrl.append(serverName);
123: activationUrl.append(ParamUtil.getContextPath());
124: activationUrl.append(UserModuleConfig.getUrlPattern());
125: activationUrl.append("/activatemember?activatecode=");
126: activationUrl.append(activateCode);
127: activationUrl.append("&member=");
128: activationUrl.append(memberName);
129:
130: // Prepare the FreeMarker configuration;
131: Configuration cfg = MVNForumConfig.getFreeMarkerConfiguration();
132:
133: //Below is a code to map content of email to template
134: Map root = new HashMap();
135: root.put("serverName", serverName);
136: root.put("MVNForumInfo", mvnForumInfo.getProductDesc());
137: root.put("activationUrl", activationUrl.toString());
138: root.put("memberName", memberName);
139: root.put("activateCode", activateCode);
140:
141: StringWriter subjectWriter = new StringWriter(256);
142: Template subjectTemplate = cfg.getTemplate(
143: MVNForumGlobal.TEMPLATE_SENDACTIVATECODE_SUBJECT,
144: "UTF-8");
145: subjectTemplate.process(root, subjectWriter);
146: String subject = subjectWriter.toString();
147:
148: StringWriter bodyWriter = new StringWriter(1024);
149: Template bodyTemplate = cfg.getTemplate(
150: MVNForumGlobal.TEMPLATE_SENDACTIVATECODE_BODY, "UTF-8");
151: bodyTemplate.process(root, bodyWriter);
152: String body = bodyWriter.toString();
153:
154: log.debug("subject = " + subject);
155: log.debug("body = " + body);
156:
157: MailMessageStruct mailMessage = new MailMessageStruct();
158: mailMessage.setFrom(MVNForumConfig.getWebMasterEmail());
159: mailMessage.setTo(memberEmail);
160: mailMessage.setSubject(subject);
161: mailMessage.setMessage(body);
162:
163: return mailMessage;
164: }
165: }
|