Spring Email的核心接口是MailSender接口,它能够连接Email服务器实现邮件发送功能。
Spring自带了一个MailSender的实现,JavaMailSenderImpl,它会使用JavaMail API来发送邮件。
我这里使用Java配置类,使用spring junit单元测试进行功能测试。可以自行把Java配置转换为xml配置,或者是把Java配置引入到xml配置。
java配置类:
@Bean
public MailSender getMailSender(){
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setUsername("****");
sender.setPassword("****");
sender.setHost("smtp.163.com");
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
return sender;
}
发送纯文本测试代码:
@Autowired
private JavaMailSenderImpl mailSender;
@Test
public void test_send_txt(){
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("****@163.com");
message.setTo("****@126.com");
message.setSubject("主题");
message.setText("正文内容");
mailSender.send(message);
}
发送附件代码:
@Test
public void test_send_attachment() throws MessagingException{
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message , true);
helper.setFrom("****@163.com");
helper.setTo("****@126.com");
helper.setSubject("主题");
helper.setText("正文内容");
ClassPathResource c = new ClassPathResource("/spring-cloud.pdf");
helper.addAttachment("微服务架构.pdf", c);
mailSender.send(message);
}
发送富文本的邮件内容--HTML类型
@Test
public void test_send_rich_text() throws MessagingException{
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message , true ,"utf-8");
helper.setFrom("****@163.com");
helper.setTo("****@126.com");
helper.setSubject("主题");
helper.setText("<html><body><img src='cid:logo' />"
+ "<h4>主题名称</h4> <h1>哇哈哈</h1></body></html>" , true );
ClassPathResource img = new ClassPathResource("/hashiqi.jpg");
helper.addInline("logo", img);
mailSender.send(message);
}
使用模板发送富文本内容,使用模板之后,就可以让前台写好页面,发送给用户一个比较美观的页面内容了 :laughing: ,
这里使用的是Thymeleaf生成模板,还有一种方式是Velocity,不过感觉比较麻烦,没有弄。
首先需要配置使用模板需要的bean,在config类中完成:
@Bean
public ClassLoaderTemplateResolver emailTemplateResolver(){
ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
resolver.setPrefix("mail/");
resolver.setTemplateMode("HTML5");
resolver.setCharacterEncoding("UTF-8");
resolver.setOrder(1);
return resolver;
}
@Bean
public SpringTemplateEngine springTemplateEngine(Set<ITemplateResolver> resolvers){
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolvers(resolvers);
return engine;
}
测试代码:
@Test
public void test_sned_thymeleaf() throws MessagingException{
MimeMessage message = mailSender.createMimeMessage();
MimeMessageHelper helper = new MimeMessageHelper(message , true);
helper.setFrom("****@163.com");
helper.setTo("****@126.com");
helper.setSubject("主题");
Context ctx = new Context();
ctx.setVariable("name", "nov");
ctx.setVariable("password", "123456");
String process = thymeleaf.process("emailTemplate.html", ctx);
System.err.println(process);
helper.setText(process , true);
ClassPathResource img = new ClassPathResource("/hashiqi.jpg");
helper.addInline("logo", img);
mailSender.send(message);
}
demo地址:[github位置](https://github.com/November22/spring-email)