java基于freemarker发送邮件,模板邮件,图片邮件

技术:springboot2 + freemarker +邮件

运行环境:idea + maven + jdk1.8 

概述

基于freemarker发送模板邮件,图片邮件,文本邮件等。基于ftl模板,邮件样式美观。

详细

一,前言

FreeMarker是一种模板引擎:即一种基于模板并且要改变的数据,并同时生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具。它不是面向最终用户的,而是一个Java的类库,是一款程序员可以嵌入他们所开发产品的组件。【百度百科】

二,效果预览

三,程序实现

1,项目结构图

2,相关参数配置

弹簧:

  邮件:

    #设置邮箱主机

    主持人:smtp.ym.163.com

    #设置用户名

    用户名:[email protected]

    #这里不是注册时的密码,而是生成的授权码

    密码:“ bld123456”

    端口:465

    默认编码:UTF-8

    特性:

      邮件:

        smtp:

          #设置是否需要认证,如果为true,那么用户名和密码就必须

          auth: true

          starttls:

            #加密通讯,true开启,false不开启

            enable: true

            #是否必须通过使用加密通讯进行通讯,true开启,false不开启

            required: true

          socketFactory:

            port: 465

            class: javax.net.ssl.SSLSocketFactory

            fallback: false

3,测试类

packagecom.sylujia.mail;

importcom.sylujia.mail.service.MailService;

importlombok.extern.slf4j.Slf4j;

importorg.junit.Test;

importorg.junit.runner.RunWith;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.boot.test.context.SpringBootTest;

importorg.springframework.test.context.junit4.SpringRunner;

importjava.util.HashMap;

importjava.util.Map;

@Slf4j

@RunWith(SpringRunner.class)

@SpringBootTest

publicclassMailServiceTest {

    @Autowired

    privateMailService mailService;

    @Test

    publicvoidsendTemplateMailTest(){

        Map mailContentMap = newHashMap<>();

        mailContentMap.put("contactName", "sylujia");

        mailContentMap.put("platformAddr", "https://www.baidu.com");

        mailContentMap.put("loginName", "sylujia");

        mailContentMap.put("loginPswd", "123456");

        mailContentMap.put("payPswd", "123456");

        mailContentMap.put("contactMail", "[email protected]");

        mailContentMap.put("contactPhone", "13144112255");

        try{

            mailService.sendTemplateMail("系统账号开通", "[email protected]","AccountOpenMail.ftl", mailContentMap);

        } catch(Exception e) {

            log.error("账号开通邮件发送失败:{}", mailContentMap , e);

        }

        log.info("邮件发送成功");

    }

}

4,邮件服务

packagecom.sylujia.mail.service.impl;

importcom.sylujia.mail.service.MailService;

importfreemarker.template.Configuration;

importlombok.extern.slf4j.Slf4j;

importorg.springframework.beans.factory.annotation.Autowired;

importorg.springframework.beans.factory.annotation.Value;

importorg.springframework.mail.javamail.JavaMailSender;

importorg.springframework.mail.javamail.MimeMessageHelper;

importorg.springframework.stereotype.Service;

importorg.springframework.ui.freemarker.FreeMarkerTemplateUtils;

importjavax.mail.internet.MimeMessage;

importjava.util.Map;

@Slf4j

@Service

publicclassMailServiceImpl implementsMailService {

    @Autowired

    privateJavaMailSender mailSender;

    @Value("${spring.mail.username}")

    privateString from;

    @Override

    publicbooleansendTemplateMail(String title, String toUser, String templateName, Map params) {

        try{

            MimeMessage mimeMessage = mailSender.createMimeMessage();

            MimeMessageHelper helper = newMimeMessageHelper(mimeMessage, true);

            // 发件人

            helper.setFrom(from);

            //收件人

            helper.setTo(toUser);

            //邮件标题

            helper.setSubject(title);

            Configuration configuration = newConfiguration(Configuration.VERSION_2_3_28);

            configuration.setClassForTemplateLoading(this.getClass(), "/templates");

            String text = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate(templateName), params);

            //// text:内容,true:为HTML邮件(false则为普通文本邮件)

            helper.setText(text, true);

            mailSender.send(mimeMessage);

        } catch(Exception e) {

            log.error("sendTemplateMail 发送模板邮件错误,", e);

            thrownewRuntimeException(e);

        }

        returntrue;

    }

}

四,总结

邮件发送本地(Windows环境)能测试成功,部署到linux服务器后一直报错 

1个com.sun.mail.util.MailConnectException: Couldn't connect to host异常解决

重要信息失败的消息:com.sun.mail.util.MailConnectException:无法连接到主机和22。首先想到的是linux的端口22没有开通,遂联系相关人员开通,但是可能出于安全考虑没有同意开通。 

没办法,只能更换端口了,需要对配置进行修改,这里我换的465端口,具体看上面的配置信息。

如果注意的是云服务器,例如阿里云,腾讯云等。需要注意,他们出于安全考虑可能会限制邮件端口,这个需要咨询,实在不行就改用465 ssl端口发送邮件。

你可能感兴趣的:(java基于freemarker发送邮件,模板邮件,图片邮件)