HtmlEmailSenderImpl.java
Home
/
sm-core /
src /
main /
java /
com /
salesmanager /
core /
business /
modules /
email /
HtmlEmailSenderImpl.java
package com.salesmanager.core.business.modules.email;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.StringWriter;
import java.util.Map;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import org.springframework.mail.MailPreparationException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessagePreparator;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class HtmlEmailSenderImpl implements HtmlEmailSender {
private static final String CHARSET = "UTF-8";
private Configuration freemarkerMailConfiguration;
private JavaMailSender mailSender;
private EmailConfig emailConfig;
private final static String TEMPLATE_PATH = "templates/email";
@Override
public void send(Email email)
throws Exception {
final String eml = email.getFrom();
final String from = email.getFromEmail();
final String to = email.getTo();
final String subject = email.getSubject();
final String tmpl = email.getTemplateName();
final Map<String,String> templateTokens = email.getTemplateTokens();
MimeMessagePreparator preparator = new MimeMessagePreparator() {
public void prepare(MimeMessage mimeMessage)
throws MessagingException, IOException {
JavaMailSenderImpl impl = (JavaMailSenderImpl)mailSender;
// if email configuration is present in Database, use the same
if(emailConfig != null) {
impl.setProtocol(emailConfig.getProtocol());
impl.setHost(emailConfig.getHost());
impl.setPort(Integer.parseInt(emailConfig.getPort()));
impl.setUsername(emailConfig.getUsername());
impl.setPassword(emailConfig.getPassword());
Properties prop = new Properties();
prop.put("mail.smtp.auth", emailConfig.isSmtpAuth());
prop.put("mail.smtp.starttls.enable", emailConfig.isStarttls());
impl.setJavaMailProperties(prop);
}
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
InternetAddress inetAddress = new InternetAddress();
inetAddress.setPersonal(eml);
inetAddress.setAddress(from);
mimeMessage.setFrom(inetAddress);
mimeMessage.setSubject(subject);
Multipart mp = new MimeMultipart("alternative");
// Create a "text" Multipart message
BodyPart textPart = new MimeBodyPart();
freemarkerMailConfiguration.setClassForTemplateLoading(HtmlEmailSenderImpl.class, "/");
Template textTemplate = freemarkerMailConfiguration.getTemplate(new StringBuilder(TEMPLATE_PATH).append("").append("/").append(tmpl).toString());
final StringWriter textWriter = new StringWriter();
try {
textTemplate.process(templateTokens, textWriter);
} catch (TemplateException e) {
throw new MailPreparationException(
"Can't generate text mail", e);
}
textPart.setDataHandler(new javax.activation.DataHandler(
new javax.activation.DataSource() {
public InputStream getInputStream()
throws IOException {
//return new StringBufferInputStream(textWriter
// .toString());
return new ByteArrayInputStream(textWriter
.toString().getBytes(CHARSET));
}
public OutputStream getOutputStream()
throws IOException {
throw new IOException("Read-only data");
}
public String getContentType() {
return "text/plain";
}
public String getName() {
return "main";
}
}));
mp.addBodyPart(textPart);
// Create a "HTML" Multipart message
Multipart htmlContent = new MimeMultipart("related");
BodyPart htmlPage = new MimeBodyPart();
freemarkerMailConfiguration.setClassForTemplateLoading(HtmlEmailSenderImpl.class, "/");
Template htmlTemplate = freemarkerMailConfiguration.getTemplate(new StringBuilder(TEMPLATE_PATH).append("").append("/").append(tmpl).toString());
final StringWriter htmlWriter = new StringWriter();
try {
htmlTemplate.process(templateTokens, htmlWriter);
} catch (TemplateException e) {
throw new MailPreparationException(
"Can't generate HTML mail", e);
}
htmlPage.setDataHandler(new javax.activation.DataHandler(
new javax.activation.DataSource() {
public InputStream getInputStream()
throws IOException {
//return new StringBufferInputStream(htmlWriter
// .toString());
return new ByteArrayInputStream(textWriter
.toString().getBytes(CHARSET));
}
public OutputStream getOutputStream()
throws IOException {
throw new IOException("Read-only data");
}
public String getContentType() {
return "text/html";
}
public String getName() {
return "main";
}
}));
htmlContent.addBodyPart(htmlPage);
BodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlContent);
mp.addBodyPart(htmlPart);
mimeMessage.setContent(mp);
// if(attachment!=null) {
// MimeMessageHelper messageHelper = new
// MimeMessageHelper(mimeMessage, true);
// messageHelper.addAttachment(attachmentFileName, attachment);
// }
}
};
mailSender.send(preparator);
}
public Configuration getFreemarkerMailConfiguration() {
return freemarkerMailConfiguration;
}
public void setFreemarkerMailConfiguration(Configuration freemarkerMailConfiguration) {
this.freemarkerMailConfiguration = freemarkerMailConfiguration;
}
public JavaMailSender getMailSender() {
return mailSender;
}
public void setMailSender(JavaMailSender mailSender) {
this.mailSender = mailSender;
}
public EmailConfig getEmailConfig() {
return emailConfig;
}
public void setEmailConfig(EmailConfig emailConfig) {
this.emailConfig = emailConfig;
}
}