送信メールSpringMail+thymeleaf+構成Beanで実現

13749 ワード

QQメールボックスを例に挙げます.1.smtpメールサービスがオンであることを確認し、パスワード2を取得する.JavaBeanのメール送信機3を構成する.テスト
1.Stmpメールサービスがオンであることを確認し、パスワード1を取得する.アカウントPOP 3/IMAP/STMTP/Exchange/CArdDAV/CAldDAVサービスsmtp 2.JavaBeanのメール送信機の設定
1) JavaMailConfig
package lb.springboot.config;

import java.util.Properties;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.web.servlet.ViewResolver;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.spring4.SpringTemplateEngine;
import org.thymeleaf.spring4.view.ThymeleafViewResolver;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import org.thymeleaf.templateresolver.TemplateResolver;

@Configuration
@PropertySource("classpath:/exception.properties")
public class JavaMailConfig {

    private static final int PORT = 465;// 587/465

    @Autowired
    private Environment env;//  classpath  exception.properties  

    //  
    @Bean
    public JavaMailSender mailSender() {
        System.err.println("@@@@@@@@@JavaMailSender");
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost(env.getProperty("mail.host"));
        mailSender.setProtocol(env.getProperty("mail.smtp"));
        mailSender.setUsername(env.getProperty("mail.username"));
        mailSender.setPassword(env.getProperty("mail.password"));
        mailSender.setPort(PORT);
        mailSender.setDefaultEncoding(env.getProperty("mail.defaultencodeing"));
        Properties prop = new Properties();
        //  properties
        prop.put("mail.smtp.auth", "true");
        prop.put("mail.smtp.timeout", "25000");
        //  
        // prop.put("mail.debug", "true");
        prop.put("mail.smtp.ssl.enable", "true");
        prop.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        mailSender.setJavaMailProperties(prop);
        return mailSender;
    }

    //  
    @Bean
    public ViewResolver viewResolver(SpringTemplateEngine springTemplateEngine)
    {
        System.err.println("@@@@@@@@@ViewResolver");
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(springTemplateEngine);
        return viewResolver;
    }
    //  
    @Bean
    public ClassLoaderTemplateResolver emailTemplateResolver()
    {
        System.err.println("@@@@@@@@@ClassLoaderTemplateResolver");
        ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();
        resolver.setPrefix("mail/");
        resolver.setTemplateMode("HTML5");
        resolver.setOrder(1);
        resolver.setCharacterEncoding("UTF-8");
        return resolver;
    }
    //  TemplateEngine
    @Bean
    public TemplateEngine templateEngine(TemplateResolver templateResolver)
    {
        System.err.println("@@@@@@@@@TemplateEngine");
        TemplateEngine templateEngine = new TemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
        return templateEngine;
    }

}

2) exception.properties #email mail.host = smtp.qq.com mail.smtp = smtp mail.prot = smtp mail.username = [email protected] mail.password = xxxxxxxxx mail.defaultencodeing=UTF-8 3)htmlテンプレートパス:...srcmainresourcesmail

<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>hellotitle>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
head>
<body>
<p th:text="'Hello!, ' + ${hehe} + '!'" >p>
body>
html>

4)実現
@Autowired
protected JavaMailSender javaMailSender; 

@Autowired
protected TemplateEngine thymeleaf;

3.テスト
    @RequestMapping("/sendTestEmail")
    public Object sendTestEmail(@RequestParam("messagepayload") String messagepayload) throws MessagingException {
        System.out.println(messagepayload);
        emailModeHtmlMail("[email protected]","emailmode","[email protected]");
        return messagepayload;
    }
   /**
     *  html 
     * @param to  
     * @param subject  
     * @param strText  
     * @return
     */
    protected boolean emailModeHtmlMail(String to, String subject, String strText){
        boolean result = true;

        MimeMessage mailMessage = javaMailSender.createMimeMessage();  
        MimeMessageHelper messageHelper = new MimeMessageHelper(mailMessage);  
        Context con = new Context();
        con.setVariable("hehe", strText);
        String emailtext = thymeleaf.process("emailmode.html", con);

        try {
            //  ,   
            messageHelper.setTo(to);
            messageHelper.setFrom(to);
            messageHelper.setSubject(subject);
            // true  HTML   
            messageHelper.setText(emailtext, true);  
            //  
            javaMailSender.send(mailMessage);
        } catch (MessagingException e) {
            result = false;
            e.printStackTrace();
        }
        return result;
    }

————————————過程の難点1.beanの組み立てがよく分からず、メール送信機が長い間出てこなかったので、@beanがJavaMailSenderを組み立てることに気づきました.@AutowiredはJavaMailSenderを使っていました.以前@beanが組み立てるのはずっとMailSender 2でした.mailフォルダのパス、工事が取得したパスは私が想像していたのとは違って、私はずっとテンプレートに着いて、長い間調整しました.ssl注意4.Environmentは勝手にやってみればOKですが、検討が必要です———————————————この例は「Spring実戦(第4版)」を利用して作成されたもので、対応するコードが入っていて、疑問があればこの本を読むことができます.