Spring has implementation for concurrency tasks based on java concurrency. Next I will create mail sending service (JavaMailSender - is extenden from JavaMail interface MailSender ) using task executor
package com.test.service; import java.io.File; import java.util.Properties; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.io.FileSystemResource; import org.springframework.core.task.TaskExecutor; import org.springframework.mail.MailParseException; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import org.springframework.stereotype.Service; @Service("mailService") public class MailService { @Autowired private JavaMailSender mailSender; @Autowired private TaskExecutor taskExecutor; private static Log log = LogFactory.getLog(MailService.class); /** * @param text - message * @param from - sender email * @param to - receiver email * @param subject - subject * @param filePath - file to attach, could be null if file not required * @throws Exception */ public void sendMail(final String text, final String from, final String to, final String subject, final File file) throws Exception { taskExecutor.execute( new Runnable() { public void run() { try { sendMailSimple(text, to, subject, file.getAbsolutePath()); } catch (Exception e) { e.printStackTrace(); log.error("Failed to send email to: " + to + " reason: "+e.getMessage()); } } }); } private void sendMailSimple(String text, String from, String to, String subject, String filePath) throws Exception { MimeMessage message = mailSender.createMimeMessage(); try { MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setFrom(from); helper.setTo(to); helper.setSubject(subject); helper.setText(text); if(filePath != null){ FileSystemResource file = new FileSystemResource(filePath); helper.addAttachment(file.getFilename(), file); } } catch (MessagingException e) { throw new MailParseException(e); } mailSender.send(message); if(log.isDebugEnabled()){ log.debug("Mail was sent successfully to: " + to + " with file: "+filePath); } } }Spring mail config:
Task executor config:mail.test.com 25 smtp no-reply@test.com pass true false
No comments:
Post a Comment