2 * In Samsung Ukraine R&D Center (SRK under a contract between)
3 * LLC "Samsung Electronics Co", Ltd (Seoul, Republic of Korea)
4 * Copyright (C) 2018 Samsung Electronics Co., Ltd. All rights reserved.
6 package com.samsung.samserver.service.impl;
8 import com.samsung.samserver.domain.User;
9 import io.github.jhipster.config.JHipsterProperties;
11 import org.apache.commons.lang3.CharEncoding;
12 import org.slf4j.Logger;
13 import org.slf4j.LoggerFactory;
14 import org.springframework.context.MessageSource;
15 import org.springframework.mail.javamail.JavaMailSender;
16 import org.springframework.mail.javamail.MimeMessageHelper;
17 import org.springframework.scheduling.annotation.Async;
18 import org.springframework.stereotype.Service;
19 import org.thymeleaf.context.Context;
20 import org.thymeleaf.spring4.SpringTemplateEngine;
22 import javax.mail.internet.MimeMessage;
23 import java.util.Locale;
26 * Service for sending emails.
28 * We use the @Async annotation to send emails asynchronously.
31 public class MailService {
33 private final Logger log = LoggerFactory.getLogger(MailService.class);
35 private static final String USER = "user";
37 private static final String BASE_URL = "baseUrl";
39 private final JHipsterProperties jHipsterProperties;
41 private final JavaMailSender javaMailSender;
43 private final MessageSource messageSource;
45 private final SpringTemplateEngine templateEngine;
47 public MailService(JHipsterProperties jHipsterProperties, JavaMailSender javaMailSender,
48 MessageSource messageSource, SpringTemplateEngine templateEngine) {
50 this.jHipsterProperties = jHipsterProperties;
51 this.javaMailSender = javaMailSender;
52 this.messageSource = messageSource;
53 this.templateEngine = templateEngine;
57 public void sendEmail(String to, String subject, String content, boolean isMultipart, boolean isHtml) {
58 log.debug("Send email[multipart '{}' and html '{}'] to '{}' with subject '{}' and content={}",
59 isMultipart, isHtml, to, subject, content);
61 // Prepare message using a Spring helper
62 MimeMessage mimeMessage = javaMailSender.createMimeMessage();
64 MimeMessageHelper message = new MimeMessageHelper(mimeMessage, isMultipart, CharEncoding.UTF_8);
66 message.setFrom(jHipsterProperties.getMail().getFrom());
67 message.setSubject(subject);
68 message.setText(content, isHtml);
69 javaMailSender.send(mimeMessage);
70 log.debug("Sent email to User '{}'", to);
71 } catch (Exception e) {
72 if (log.isDebugEnabled()) {
73 log.warn("Email could not be sent to user '{}'", to, e);
75 log.warn("Email could not be sent to user '{}': {}", to, e.getMessage());
81 public void sendEmailFromTemplate(User user, String templateName, String titleKey) {
82 Locale locale = Locale.forLanguageTag(user.getLangKey());
83 Context context = new Context(locale);
84 context.setVariable(USER, user);
85 context.setVariable(BASE_URL, jHipsterProperties.getMail().getBaseUrl());
86 String content = templateEngine.process(templateName, context);
87 String subject = messageSource.getMessage(titleKey, null, locale);
88 sendEmail(user.getEmail(), subject, content, false, true);
93 public void sendActivationEmail(User user) {
94 log.debug("Sending activation email to '{}'", user.getEmail());
95 sendEmailFromTemplate(user, "activationEmail", "email.activation.title");
99 public void sendCreationEmail(User user) {
100 log.debug("Sending creation email to '{}'", user.getEmail());
101 sendEmailFromTemplate(user, "creationEmail", "email.activation.title");
105 public void sendPasswordResetMail(User user) {
106 log.debug("Sending password reset email to '{}'", user.getEmail());
107 sendEmailFromTemplate(user, "passwordResetEmail", "email.reset.title");