spring + spring mvc +email(邮件发送)支持同步异步配置 weir 2016-12-08 16:54:28.0 spring,email 5286 利用spring配置文件方式发送邮件支持同步和异步,在网上看了好多都不靠谱,今天测试通过,记录一下,有坑请注意。 先看spring.xml这个配置文件: true 重点看我用 标注掉的,看了好多网上都是这样配置的,可是我一个也测试通过,后来把这些去掉了反而可以了。这就是坑。 再看spring-mvc.xml: 然后就是com.aurora.tingji.service.impl.MailServiceImpl: package com.aurora.tingji.service.impl; import java.io.IOException; import javax.mail.MessagingException; import javax.mail.internet.MimeMessage; import org.springframework.core.task.TaskExecutor; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.mail.javamail.MimeMessageHelper; import com.aurora.tingji.service.MailService; import com.aurora.tingji.vo.Email; public class MailServiceImpl implements MailService { private JavaMailSender mailSender;// 注入Spring封装的javamail private TaskExecutor taskExecutor;// 注入Spring封装的异步执行器 public void sendMail(Email email) throws MessagingException, IOException { sendMailBySynchronizationMode(email); /*MimeMessage mime = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mime, true, "utf-8"); helper.setFrom(email.getFromAddress());// 发件人 helper.setTo(email.getToAddress());// 收件人 helper.setReplyTo(email.getFromAddress());// 回复到 helper.setSubject(email.getSubject());// 邮件主题 helper.setText(email.getContent(), true);// true表示设定html格式 mailSender.send(mime); System.out.println("9======================");*/ } public void sendMailByAsynchronousMode(final Email email) { taskExecutor.execute(new Runnable() { public void run() { try { sendMailBySynchronizationMode(email); } catch (MessagingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }); } public void sendMailBySynchronizationMode(Email email) throws MessagingException, IOException { MimeMessage mime = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mime, true, "utf-8"); helper.setFrom(email.getFromAddress());// 发件人 helper.setTo(email.getToAddress());// 收件人 helper.setReplyTo(email.getFromAddress());// 回复到 helper.setSubject(email.getSubject());// 邮件主题 helper.setText(email.getContent(), true);// true表示设定html格式 mailSender.send(mime); System.out.println("9======================"); } public void setMailSender(JavaMailSender mailSender) { this.mailSender = mailSender; } public void setTaskExecutor(TaskExecutor taskExecutor) { this.taskExecutor = taskExecutor; } public JavaMailSender getMailSender() { return mailSender; } public TaskExecutor getTaskExecutor() { return taskExecutor; } } 接口自己写,这里不再贴出来了。 下面是: package com.aurora.tingji.controller; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.aurora.tingji.service.MailService; import com.aurora.tingji.vo.Email; @Controller public class MailController { private MailService mailService; @RequestMapping(value="/email/send") public void postSendMail(final Model model, final HttpServletRequest request, final HttpServletResponse response) { Email email = new Email(); email.setToAddress("815726208@qq.com"); email.setFromAddress("634623907@qq.com"); email.setSubject("正在注册账户"); email.setContent("正在注册账户,您的激活码为xxxxxx"); try { mailService.sendMail(email); System.out.println("发送邮件"); } catch (Exception e) { e.printStackTrace(); } } public MailService getMailService() { return mailService; } public void setMailService(MailService mailService) { this.mailService = mailService; } } package com.aurora.tingji.vo; public class Email { /** 发件人 **/ private String fromAddress; /** 收件人 **/ private String toAddress; /** 邮件主题 **/ private String subject; /** 邮件内容 **/ private String content; public String getFromAddress() { return fromAddress; } public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; } public String getToAddress() { return toAddress; } public void setToAddress(String toAddress) { this.toAddress = toAddress; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } } 最后qq邮件服务端设置: true 最后你会发现就配置这些就可以了 mail.host=smtp.qq.com 我看网上几乎所有的都多余了,而且没有一个运行成功的,真是扯淡。