Refactor load mail configuration

pull/146/head
johnniang 2019-05-07 09:26:13 +08:00
parent ff1836e978
commit 0b4823d015
2 changed files with 7 additions and 9 deletions

View File

@ -10,7 +10,7 @@ public enum EmailProperties implements PropertyEnum {
HOST("email_host", String.class, ""), HOST("email_host", String.class, ""),
PROTOCOL("email_protocol", String.class, "SSL"), PROTOCOL("email_protocol", String.class, "smtp"),
SSL_PORT("email_ssl_port", Integer.class, "465"), SSL_PORT("email_ssl_port", Integer.class, "465"),

View File

@ -1,15 +1,12 @@
package run.halo.app.service.impl; package run.halo.app.service.impl;
import cn.hutool.core.text.StrBuilder; import cn.hutool.core.text.StrBuilder;
import cn.hutool.core.util.StrUtil;
import freemarker.template.Template; import freemarker.template.Template;
import io.github.biezhi.ome.OhMyEmail; import io.github.biezhi.ome.OhMyEmail;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils; import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer; import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import run.halo.app.event.options.OptionUpdatedEvent;
import run.halo.app.exception.EmailException; import run.halo.app.exception.EmailException;
import run.halo.app.model.properties.EmailProperties; import run.halo.app.model.properties.EmailProperties;
import run.halo.app.service.MailService; import run.halo.app.service.MailService;
@ -27,14 +24,12 @@ import java.util.Properties;
*/ */
@Slf4j @Slf4j
@Service @Service
public class MailServiceImpl implements MailService { public class MailServiceImpl implements MailService {
private final FreeMarkerConfigurer freeMarker; private final FreeMarkerConfigurer freeMarker;
private final OptionService optionService; private final OptionService optionService;
private boolean loaded = false;
public MailServiceImpl(FreeMarkerConfigurer freeMarker, public MailServiceImpl(FreeMarkerConfigurer freeMarker,
OptionService optionService) { OptionService optionService) {
this.freeMarker = freeMarker; this.freeMarker = freeMarker;
@ -114,6 +109,7 @@ public class MailServiceImpl implements MailService {
String fromUsername = optionService.getByPropertyOfNonNull(EmailProperties.FROM_NAME).toString(); String fromUsername = optionService.getByPropertyOfNonNull(EmailProperties.FROM_NAME).toString();
File file = new File(attachFilename); File file = new File(attachFilename);
try { try {
Template template = freeMarker.getConfiguration().getTemplate(templateName); Template template = freeMarker.getConfiguration().getTemplate(templateName);
OhMyEmail.subject(subject) OhMyEmail.subject(subject)
@ -135,10 +131,12 @@ public class MailServiceImpl implements MailService {
private void loadConfig() { private void loadConfig() {
// Get default properties // Get default properties
Properties defaultProperties = OhMyEmail.defaultConfig(log.isDebugEnabled()); Properties defaultProperties = OhMyEmail.defaultConfig(log.isDebugEnabled());
// Set smtp host // Set smtp host
defaultProperties.setProperty("mail.smtp.host", optionService.getByPropertyOfNonNull(EmailProperties.HOST).toString()); defaultProperties.setProperty("mail.smtp.host", optionService.getByPropertyOfNonNull(EmailProperties.HOST).toString());
defaultProperties.setProperty("mail.smtp.ssl.enable", StrUtil.isEmpty(optionService.getByPropertyOfNonNull(EmailProperties.PROTOCOL).toString()) ? "false" : "true"); defaultProperties.setProperty("mail.transport.protocol", optionService.getByPropertyOrDefault(EmailProperties.PROTOCOL, String.class, EmailProperties.PROTOCOL.defaultValue()));
defaultProperties.setProperty("mail.smtp.port", StrUtil.isEmpty(optionService.getByPropertyOfNonNull(EmailProperties.SSL_PORT).toString()) ? "25" : "465"); defaultProperties.setProperty("mail.smtp.port", optionService.getByPropertyOrDefault(EmailProperties.SSL_PORT, String.class, EmailProperties.SSL_PORT.defaultValue()));
// Config email // Config email
OhMyEmail.config(defaultProperties, OhMyEmail.config(defaultProperties,
optionService.getByPropertyOfNonNull(EmailProperties.USERNAME).toString(), optionService.getByPropertyOfNonNull(EmailProperties.USERNAME).toString(),