package de.asideas.crowdsource.config.mail; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.task.AsyncTaskExecutor; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.JavaMailSenderImpl; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.util.StringUtils; import java.util.Properties; @Configuration public class MailSenderConfig { @Value("${de.asideas.crowdsource.mail.host:localhost}") private String host; @Value("${de.asideas.crowdsource.mail.port:1025}") private Integer port; @Value("${de.asideas.crowdsource.mail.username:}") private String username; @Value("${de.asideas.crowdsource.mail.password:}") private String password; @Value("${de.asideas.crowdsource.mail.starttls:false}") private boolean useStartTls; @Value("${de.asideas.crowdsource.mail.connectionTimeout:3000}") private int smtpConnectionTimeout; @Value("${de.asideas.crowdsource.mail.readTimeout:5000}") private int smtpReadTimeout; @Value("${taskExecutor.email.corePoolsize:10}") private int corePoolsize; @Value("${taskExecutor.email.maxPoolsize:30}") private int maxPoolsize; @Value("${taskExecutor.email.queueCapacity:50}") private int queueCapacity; @Value("${taskExecutor.email.keepAliveSeconds:60}") private int keepAliveSeconds; @Bean public JavaMailSender javaMailSender() { JavaMailSenderImpl javaMailSender = new JavaMailSenderImpl(); javaMailSender.setDefaultEncoding("UTF-8"); javaMailSender.setHost(host); javaMailSender.setPort(port); Properties properties = new Properties(); properties.setProperty("mail.smtp.starttls.enable", Boolean.toString(useStartTls)); properties.setProperty("mail.smtp.connectiontimeout", Integer.toString(smtpConnectionTimeout)); properties.setProperty("mail.smtp.timeout", Integer.toString(smtpReadTimeout)); if (StringUtils.hasText(username) && StringUtils.hasText(password)) { properties.setProperty("mail.smtp.auth", "true"); javaMailSender.setUsername(username); javaMailSender.setPassword(password); } javaMailSender.setJavaMailProperties(properties); return javaMailSender; } @Bean public AsyncTaskExecutor taskExecutorSmtp(){ ThreadPoolTaskExecutor res = new ThreadPoolTaskExecutor(); res.setCorePoolSize(corePoolsize); res.setMaxPoolSize(maxPoolsize); res.setQueueCapacity(queueCapacity); res.setKeepAliveSeconds(keepAliveSeconds); res.setThreadNamePrefix("crowd-smtp-"); return res; } }