Open
Description
public class HtmlEmailSenderImpl implements HtmlEmailSender {
private final static String TEMPLATE_PATH = "templates/email";
private static final String CHARSET = "UTF-8";
/**
*
* 邮件配置
*/
private EmailConfig emailConfig;
/**
*
*/
private JavaMailSender javaMailSender;
/**
*
*/
private Configuration freemarkerMailConfiguration;
@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 {
mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
InternetAddress inetAddress = new InternetAddress();
inetAddress.setPersonal(eml);
inetAddress.setAddress(from);
mimeMessage.setFrom(inetAddress);
mimeMessage.setSubject(subject);
// Create a "text" Multipart message
//final Multipart multipart = createMultipart(email, "alternative", "text/plain");
//mimeMessage.setContent(multipart);
// Create a "HTML" Multipart message
final Multipart htmlContent = createMultipart(email, "related", "text/html");
mimeMessage.setContent(htmlContent);
//BodyPart htmlPart = new MimeBodyPart();
//htmlPart.setContent(htmlContent);
//multipart.addBodyPart(htmlPart);
// if(attachment!=null) {
// MimeMessageHelper messageHelper = new
// MimeMessageHelper(mimeMessage, true);
// messageHelper.addAttachment(attachmentFileName, attachment);
// }
}
};
javaMailSender.send(preparator);
}
/**
*
* @param email
* @param subtype
* @return
*/
private Multipart createMultipart(Email email,String subtype, String contentType){
final String tmpl = email.getTemplateName();
final Map<String,String> templateTokens = email.getTemplateTokens();
Multipart multipart = new MimeMultipart(subtype);
final StringWriter stringWriter = new StringWriter();
processTemplate(tmpl, templateTokens, stringWriter);
try {
BodyPart bodyPart = createMimeBodyPart(stringWriter,contentType);
multipart.addBodyPart(bodyPart);
} catch (MessagingException e) {
e.printStackTrace();
}
return multipart;
}
/**
*
* @param stringWriter
* @param contentType
* @return
* @throws MessagingException
*/
private MimeBodyPart createMimeBodyPart(final StringWriter stringWriter,String contentType) throws MessagingException {
MimeBodyPart bodyPart = new MimeBodyPart();
bodyPart.setDataHandler(new javax.activation.DataHandler(
new javax.activation.DataSource() {
public InputStream getInputStream()
throws IOException {
return new ByteArrayInputStream(stringWriter
.toString().getBytes(CHARSET));
}
public OutputStream getOutputStream()
throws IOException {
throw new IOException("Read-only data");
}
public String getContentType() {
return contentType;
}
public String getName() {
return "main";
}
}));
return bodyPart;
}
/**
*
* @param templateName
* @param templateTokens
* @param htmlWriter
*/
private void processTemplate(String templateName,Map<String,String> templateTokens, final StringWriter htmlWriter){
freemarkerMailConfiguration.setClassForTemplateLoading(HtmlEmailSenderImpl.class, "/");
Template htmlTemplate = null;
try {
htmlTemplate = freemarkerMailConfiguration.getTemplate(new StringBuilder(TEMPLATE_PATH).append("").append("/").append(templateName).toString());
} catch (IOException e) {
e.printStackTrace();
}
if(null == htmlTemplate){
return;
}
try {
htmlTemplate.process(templateTokens, htmlWriter);
} catch (TemplateException e) {
throw new MailPreparationException(
"Can't generate HTML mail", e);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void initEmailConfig(EmailConfig emailConfig) {
this.emailConfig = emailConfig;
JavaMailSenderImpl impl = (JavaMailSenderImpl)javaMailSender;
// 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);
}
}
public JavaMailSender getJavaMailSender() {
return javaMailSender;
}
public void setJavaMailSender(JavaMailSender javaMailSender) {
this.javaMailSender = javaMailSender;
}
public Configuration getFreemarkerMailConfiguration() {
return freemarkerMailConfiguration;
}
public void setFreemarkerMailConfiguration(Configuration freemarkerMailConfiguration) {
this.freemarkerMailConfiguration = freemarkerMailConfiguration;
}
}
Metadata
Metadata
Assignees
Labels
No labels