dyc87112 / blog-comments

5 stars 1 forks source link

Spring Boot中使用JavaMailSender发送邮件 | 程序猿DD #120

Open dyc87112 opened 6 years ago

dyc87112 commented 6 years ago

http://blog.didispace.com/springbootmailsender/

相信使用过Spring的众多开发者都知道Spring提供了非常好用的JavaMailSender接口实现邮件发送。在Spring Boot的Starter模块中也为此提供了自动化配置。下面通过实例看看如何在Spring Boot中使用JavaMailSender发送邮件。 快速入门在Spring Boot的工程中的po

llyer commented 6 years ago

如果 VelocityEngineUtils.mergeTemplateIntoString() 方法不可用。可以用下面这种方法来生成模板字符串。链接如下: https://stackoverflow.com/questions/14314143/velocityengineutils-has-been-removed-in-spring-3-2-so-what-else-to-use

hzn2003 commented 5 years ago

接着llyer的回复,我补充一点。新版的springboot不提供与velocity的集成,单独引velocity,我用的是1.7,VelocityEngineUtils.mergeTemplateIntoString() 这个地方会报错,解决方式,参考llyer提供的网站后加以下内容:

@Configuration
public class VelocityEngineConfig {
    @Bean
    public VelocityEngine velocityEngine() throws Exception {
        Properties properties = new Properties();
        properties.setProperty("input.encoding", "UTF-8");
        properties.setProperty("output.encoding", "UTF-8");
        properties.setProperty("resource.loader", "class");
        properties.setProperty("class.resource.loader.class", "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
        VelocityEngine velocityEngine = new VelocityEngine(properties);
        return velocityEngine;
    }
}

在测试类定义两变量:

    @Autowired
    private JavaMailSender mailSender;
    @Autowired
    private VelocityEngine velocityEngine;

重新定义sendTemplateMail发邮件的方法:

    @Test
    public void sendTemplateMail() throws Exception {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom("abc@qq.com");//邮箱写自己可以测试用的
        helper.setTo("abc@qq.com");//邮箱写自己可以测试用的
        helper.setSubject("主题:模板邮件");
        VelocityContext context = new VelocityContext();
        context.put("username", "didi");
        StringWriter stringWriter = new StringWriter();
        // 需要注意第1个参数要全路径,否则会抛异常
        velocityEngine.mergeTemplate("/templates/template.vm", "UTF-8", context, stringWriter);
        helper.setText(stringWriter.toString(), true);
        mailSender.send(mimeMessage);
    }

回复的排版有点乱,可以拷贝到IDEA,格式化就OK

dyc87112 commented 5 years ago

@hzn2003 我编辑了一下,稍微好一些 ^_^