-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
First pass at email template handling and email sending.
- Loading branch information
Bill Smith
committed
Jan 10, 2019
1 parent
b88cdc1
commit 9220aeb
Showing
6 changed files
with
168 additions
and
0 deletions.
There are no files selected for viewing
91 changes: 91 additions & 0 deletions
91
...rc/main/java/edu/internet2/tier/shibboleth/admin/ui/configuration/EmailConfiguration.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,91 @@ | ||
package edu.internet2.tier.shibboleth.admin.ui.configuration; | ||
|
||
import edu.internet2.tier.shibboleth.admin.ui.service.EmailService; | ||
import edu.internet2.tier.shibboleth.admin.ui.service.EmailServiceImpl; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
import org.springframework.beans.factory.annotation.Value; | ||
import org.springframework.context.ApplicationContext; | ||
import org.springframework.context.annotation.Bean; | ||
import org.springframework.context.annotation.Configuration; | ||
import org.springframework.context.support.ResourceBundleMessageSource; | ||
import org.springframework.mail.javamail.JavaMailSender; | ||
import org.thymeleaf.TemplateEngine; | ||
import org.thymeleaf.spring5.SpringTemplateEngine; | ||
import org.thymeleaf.templatemode.TemplateMode; | ||
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver; | ||
import org.thymeleaf.templateresolver.ITemplateResolver; | ||
|
||
import java.util.Collections; | ||
|
||
/** | ||
* @author Bill Smith (wsmith@unicon.net) | ||
*/ | ||
@Configuration | ||
public class EmailConfiguration { | ||
|
||
private static final String EMAIL_TEMPLATE_ENCODING = "UTF-8"; | ||
|
||
@Value("${shibui.text.email.template.path.prefix:/mail/text/}") | ||
private String textEmailTemplatePathPrefix; | ||
|
||
@Value("${shibui.html.email.template.path.prefix:/mail/html/}") | ||
private String htmlEmailTemplatePathPrefix; | ||
|
||
@Autowired | ||
private ApplicationContext applicationContext; | ||
|
||
@Autowired | ||
private JavaMailSender javaMailSender; | ||
|
||
@Bean | ||
public ResourceBundleMessageSource emailMessageSource() { | ||
final ResourceBundleMessageSource messageSource = new ResourceBundleMessageSource(); | ||
messageSource.setBasename("mail/mailMessages"); | ||
return messageSource; | ||
} | ||
|
||
@Bean | ||
public TemplateEngine textEmailTemplateEngine() { | ||
final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); | ||
templateEngine.addTemplateResolver(textTemplateResolver()); | ||
templateEngine.setTemplateEngineMessageSource(emailMessageSource()); | ||
return templateEngine; | ||
} | ||
|
||
@Bean | ||
public TemplateEngine htmlEmailTemplateEngine() { | ||
final SpringTemplateEngine templateEngine = new SpringTemplateEngine(); | ||
templateEngine.addTemplateResolver(htmlTemplateResolver()); | ||
templateEngine.setTemplateEngineMessageSource(emailMessageSource()); | ||
return templateEngine; | ||
} | ||
|
||
private ITemplateResolver textTemplateResolver() { | ||
final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); | ||
templateResolver.setOrder(1); | ||
templateResolver.setResolvablePatterns(Collections.singleton("*")); | ||
templateResolver.setPrefix(textEmailTemplatePathPrefix); | ||
templateResolver.setSuffix(".txt"); | ||
templateResolver.setTemplateMode(TemplateMode.TEXT); | ||
templateResolver.setCharacterEncoding(EMAIL_TEMPLATE_ENCODING); | ||
templateResolver.setCacheable(false); | ||
return templateResolver; | ||
} | ||
|
||
private ITemplateResolver htmlTemplateResolver() { | ||
final ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver(); | ||
templateResolver.setOrder(1); | ||
templateResolver.setResolvablePatterns(Collections.singleton("*")); | ||
templateResolver.setPrefix(htmlEmailTemplatePathPrefix); | ||
templateResolver.setSuffix(".html"); | ||
templateResolver.setTemplateMode(TemplateMode.HTML); | ||
templateResolver.setCharacterEncoding(EMAIL_TEMPLATE_ENCODING); | ||
templateResolver.setCacheable(false); | ||
return templateResolver; | ||
} | ||
|
||
@Bean | ||
public EmailService emailService() { | ||
return new EmailServiceImpl(javaMailSender, emailMessageSource(), textEmailTemplateEngine(), htmlEmailTemplateEngine()); | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package edu.internet2.tier.shibboleth.admin.ui.service; | ||
|
||
import javax.mail.MessagingException; | ||
import java.util.Locale; | ||
|
||
/** | ||
* @author Bill Smith (wsmith@unicon.net) | ||
*/ | ||
public interface EmailService { | ||
void sendMail(String emailTemplate, String fromAddress, String recipient, String subject, Locale locale) throws MessagingException; | ||
} |
53 changes: 53 additions & 0 deletions
53
backend/src/main/java/edu/internet2/tier/shibboleth/admin/ui/service/EmailServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
package edu.internet2.tier.shibboleth.admin.ui.service; | ||
|
||
import org.slf4j.Logger; | ||
import org.slf4j.LoggerFactory; | ||
import org.springframework.context.support.ResourceBundleMessageSource; | ||
import org.springframework.mail.javamail.JavaMailSender; | ||
import org.springframework.mail.javamail.MimeMessageHelper; | ||
import org.thymeleaf.TemplateEngine; | ||
import org.thymeleaf.context.Context; | ||
|
||
import javax.mail.MessagingException; | ||
import javax.mail.internet.MimeMessage; | ||
import java.util.Locale; | ||
|
||
/** | ||
* @author Bill Smith (wsmith@unicon.net) | ||
*/ | ||
public class EmailServiceImpl implements EmailService { | ||
private static final Logger logger = LoggerFactory.getLogger(EmailServiceImpl.class); | ||
|
||
private JavaMailSender emailSender; | ||
private ResourceBundleMessageSource emailMessageSource; | ||
private TemplateEngine textEmailTemplateEngine; | ||
private TemplateEngine htmlEmailTemplateEngine; | ||
|
||
public EmailServiceImpl(JavaMailSender emailSender, | ||
ResourceBundleMessageSource emailMessageSource, | ||
TemplateEngine textEmailTemplateEngine, | ||
TemplateEngine htmlEmailTemplateEngine) { | ||
this.emailSender = emailSender; | ||
this.emailMessageSource = emailMessageSource; | ||
this.textEmailTemplateEngine = textEmailTemplateEngine; | ||
this.htmlEmailTemplateEngine = htmlEmailTemplateEngine; | ||
} | ||
|
||
public void sendMail(String emailTemplate, String fromAddress, String recipient, String subject, Locale locale) throws MessagingException { | ||
Context context = new Context(locale); | ||
// TODO: set things to be replaced in the email template here | ||
|
||
MimeMessage mimeMessage = this.emailSender.createMimeMessage(); | ||
MimeMessageHelper message = new MimeMessageHelper(mimeMessage, true,"UTF-8"); | ||
message.setSubject(subject); | ||
message.setFrom(fromAddress); | ||
message.setTo(recipient); | ||
|
||
String textContent = textEmailTemplateEngine.process(emailTemplate, context); | ||
String htmlContent = htmlEmailTemplateEngine.process(emailTemplate, context); | ||
message.setText(textContent, htmlContent); | ||
|
||
// TODO: Uncomment when we're ready to actually send emails | ||
// emailSender.send(mimeMessage); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
<html> | ||
<head>This is a test!</head> | ||
<body>This is a test email template. Can't you tell?</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
This is a test email template. Can't you tell? |