Spring Email-邮件发送

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();
        //邮箱名,不用加@163.com ;如wahha
        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{
        //为了发送附件,需要创建MIME类型的消息
        MimeMessage message = mailSender.createMimeMessage();
        //第二个参数true,表示他是一个Multipart类型email
        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();
        //最后一个参数设置html页面编码
        MimeMessageHelper helper = new MimeMessageHelper(message , true ,"utf-8");
        helper.setFrom("****@163.com");
        helper.setTo("****@126.com");
        helper.setSubject("主题");

        //第二个参数表明第一个参数传入的是HTML
        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)

猜你喜欢

转载自blog.csdn.net/November22/article/details/62426234
今日推荐