/******************************************************************************* * Open Behavioral Health Information Technology Architecture (OBHITA.org) * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the <organization> nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL <COPYRIGHT HOLDER> BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ******************************************************************************/ package gov.samhsa.consent2share.infrastructure; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Date; import gov.samhsa.consent2share.domain.commondomainservices.EmailSender; import gov.samhsa.consent2share.domain.commondomainservices.EmailType; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.springframework.context.MessageSource; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.thymeleaf.TemplateEngine; import org.thymeleaf.context.Context; /** * The Class EmailSenderImpl. */ public class EmailSenderImpl implements EmailSender { /** The mail sender. */ private JavaMailSender mailSender; /** The template engine. */ private TemplateEngine templateEngine; /** The message properties. */ private MessageSource messageProperties; /** * Instantiates a new email sender impl. * * @param mailSender * the mail sender * @param templateEngine * the template engine * @param messageProperties * the message properties */ public EmailSenderImpl(JavaMailSender mailSender, TemplateEngine templateEngine, MessageSource messageProperties) { this.mailSender = mailSender; this.templateEngine = templateEngine; this.messageProperties = messageProperties; } /* * (non-Javadoc) * * @see * gov.samhsa.consent2share.domain.commondomainservices.EmailSender#sendMessage * (java.lang.String, java.lang.String, * gov.samhsa.consent2share.infrastructure.EmailType, java.lang.String, * java.lang.String) */ @Override public void sendMessage(final String recipientName, final String mailTo,EmailType type, String linkUrl, String token) throws MessagingException { // Prepare the evaluation context final Context ctx = new Context(); String htmlContent = null; ctx.setVariable("recipientName", recipientName); ctx.setVariable("c2sLogoUrl", String.format("%s/resources/img/c2s-logo.png", linkUrl)); // Prepare message using a Spring helper final MimeMessage mimeMessage = this.mailSender.createMimeMessage(); final MimeMessageHelper message = new MimeMessageHelper(mimeMessage, "UTF-8"); switch (type) { case SIGNUP_VERIFICATION: ctx.setVariable("linkUrl", String.format("%s/verifyLink.html%s", linkUrl, token)); message.setFrom(messageProperties.getMessage( "Signup.email.emailFrom", null, null)); message.setSubject(messageProperties.getMessage( "Signup.email.subject", null, null)); htmlContent = this.templateEngine.process( "verification-signup-template.html", ctx); break; case SIGNUP_CONFIRMATION: message.setFrom(messageProperties.getMessage( "Signup.email.emailFrom", null, null)); message.setSubject(messageProperties.getMessage( "Signup.email.subject", null, null)); htmlContent = this.templateEngine.process( "confirm-signup-template.html", ctx); break; case PASSWORD_RESET_REQUEST: ctx.setVariable("linkUrl", String.format("%s/resetPasswordLink.html?token=%s", linkUrl, token)); message.setFrom(messageProperties.getMessage( "Signup.email.emailFrom", null, null)); message.setSubject(messageProperties.getMessage( "PasswordReset.email.subject", null, null)); htmlContent = this.templateEngine.process( "newpassword-requested-template.html", ctx); break; case PASSWORD_CONFIRMATION: message.setFrom(messageProperties.getMessage( "Signup.email.emailFrom", null, null)); message.setSubject(messageProperties.getMessage( "PasswordReset.email.subject", null, null)); htmlContent = this.templateEngine.process( "account-updated-template.html", ctx); break; case USER_PROFILE_CHANGE: message.setFrom(messageProperties.getMessage( "UserProfileUpdate.email.emailFrom", null, null)); message.setSubject(messageProperties.getMessage( "UserProfileUpdate.email.subject", null, null)); htmlContent = this.templateEngine.process( "user-profile-updated-template.html", ctx); break; case NEW_LOGIN_ACCOUNT: ctx.setVariable("linkUrl", String.format( "%s/verifyNewAccountLink.html?token=%s", linkUrl, token)); message.setFrom(messageProperties.getMessage( "Signup.email.emailFrom", null, null)); message.setSubject(messageProperties.getMessage( "SignupNewAccount.email.subject", null, null)); htmlContent = this.templateEngine.process( "verification-new-accountsignup-template.html", ctx); break; default: message.setFrom("support@consent2share.com"); message.setSubject("Support"); break; } message.setTo(mailTo); message.setText(htmlContent, true); this.mailSender.send(mimeMessage); } /* * (non-Javadoc) * * */ @Override public void sendContactMessage(EmailType type, String firtName, String lastName, String email, String phoneNumber, String option) throws MessagingException { // Prepare the evaluation context final Context ctx = new Context(); String htmlContent = null; ctx.setVariable("c2sLogoUrl",String.format("%s/resources/img/c2s-logo.png", "")); // Prepare message using a Spring helper final MimeMessage mimeMessage = this.mailSender.createMimeMessage(); final MimeMessageHelper message = new MimeMessageHelper(mimeMessage,"UTF-8"); switch (type) { case CONFIRM_REQUEST_MORE_INFORMATION: message.setTo(email); ctx.setVariable("linkUrl",messageProperties.getMessage("Contact.email.pgLink", null, null)); message.setFrom(messageProperties.getMessage("Contact.email.emailFrom", null, null)); message.setSubject(messageProperties.getMessage("Contact.email.subject2", null, null)); htmlContent = this.templateEngine.process("request-info-visitor-notification-template.html", ctx); break; case REQUEST_MORE_INFORMATION: DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy"); DateFormat timeFormat = new SimpleDateFormat("HH:mm:ss"); Date date = new Date(); ctx.setVariable("messageDate", dateFormat.format(date)); ctx.setVariable("messageTime", timeFormat.format(date)); ctx.setVariable("firstName", firtName); ctx.setVariable("lastName", lastName); ctx.setVariable("phoneNumber", phoneNumber); ctx.setVariable("email", email); ctx.setVariable("option", option); message.setTo(messageProperties.getMessage("Contact.email.emailTo", null, null)); message.setFrom(messageProperties.getMessage("Contact.email.emailFrom", null, null)); message.setSubject(messageProperties.getMessage("Contact.email.subject1", null, null)); htmlContent = this.templateEngine.process("request-info-admin-notification-template.html", ctx); break; } message.setText(htmlContent, true); this.mailSender.send(mimeMessage); } }