美文网首页
java基于freemarker发送邮件,模板邮件,图片邮件

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

作者: 小缪子 | 来源:发表于2019-12-03 21:56 被阅读0次

    技术:springboot2 + freemarker +邮件

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

    概述

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

    详细

    一,前言

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

    二,效果预览

    三,程序实现

    1,项目结构图

    2,相关参数配置

    <font style="vertical-align: inherit;"><font style="vertical-align: inherit;">弹簧:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

      邮件:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        #设置邮箱主机</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        主持人:smtp.ym.163.com</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        #设置用户名</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        用户名:lnbld@bld365.com</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        #这里不是注册时的密码,而是生成的授权码</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        密码:“ bld123456”</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        端口:465</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        默认编码:UTF-8</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

        特性:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

          邮件:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

            smtp:</font></font><font></font><font style="vertical-align: inherit;"><font style="vertical-align: inherit;">

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

              auth: true<font></font>

              starttls:<font></font>

                #加密通讯,true开启,false不开启<font></font>

                enable: true<font></font>

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

                required: true<font></font>

              socketFactory:<font></font>

                port: 465<font></font>

                class: javax.net.ssl.SSLSocketFactory<font></font>

                fallback: false

    3,测试类

    packagecom.sylujia.mail;<font></font>

    <font></font>

    importcom.sylujia.mail.service.MailService;<font></font>

    importlombok.extern.slf4j.Slf4j;<font></font>

    importorg.junit.Test;<font></font>

    importorg.junit.runner.RunWith;<font></font>

    importorg.springframework.beans.factory.annotation.Autowired;<font></font>

    importorg.springframework.boot.test.context.SpringBootTest;<font></font>

    importorg.springframework.test.context.junit4.SpringRunner;<font></font>

    <font></font>

    importjava.util.HashMap;<font></font>

    importjava.util.Map;<font></font>

    <font></font>

    @Slf4j<font></font>

    @RunWith(SpringRunner.class)<font></font>

    @SpringBootTest<font></font>

    publicclassMailServiceTest {<font></font>

    <font></font>

        @Autowired<font></font>

        privateMailService mailService;<font></font>

    <font></font>

        @Test<font></font>

        publicvoidsendTemplateMailTest(){<font></font>

            Map<String, Object> mailContentMap = newHashMap<>();<font></font>

            mailContentMap.put("contactName", "sylujia");<font></font>

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

            mailContentMap.put("loginName", "sylujia");<font></font>

            mailContentMap.put("loginPswd", "123456");<font></font>

            mailContentMap.put("payPswd", "123456");<font></font>

            mailContentMap.put("contactMail", "xxx@163.com");<font></font>

            mailContentMap.put("contactPhone", "13144112255");<font></font>

            try{<font></font>

                mailService.sendTemplateMail("系统账号开通", "xxx@163.com","AccountOpenMail.ftl", mailContentMap);<font></font>

            } catch(Exception e) {<font></font>

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

            }<font></font>

            log.info("邮件发送成功");<font></font>

        }<font></font>

    <font></font>

    <font></font>

    <font></font>

    }

    4,邮件服务

    packagecom.sylujia.mail.service.impl;<font></font>

    <font></font>

    importcom.sylujia.mail.service.MailService;<font></font>

    importfreemarker.template.Configuration;<font></font>

    importlombok.extern.slf4j.Slf4j;<font></font>

    importorg.springframework.beans.factory.annotation.Autowired;<font></font>

    importorg.springframework.beans.factory.annotation.Value;<font></font>

    importorg.springframework.mail.javamail.JavaMailSender;<font></font>

    importorg.springframework.mail.javamail.MimeMessageHelper;<font></font>

    importorg.springframework.stereotype.Service;<font></font>

    importorg.springframework.ui.freemarker.FreeMarkerTemplateUtils;<font></font>

    <font></font>

    importjavax.mail.internet.MimeMessage;<font></font>

    importjava.util.Map;<font></font>

    <font></font>

    @Slf4j<font></font>

    @Service<font></font>

    publicclassMailServiceImpl implementsMailService {<font></font>

    <font></font>

        @Autowired<font></font>

        privateJavaMailSender mailSender;<font></font>

    <font></font>

        @Value("${spring.mail.username}")<font></font>

        privateString from;<font></font>

    <font></font>

        @Override<font></font>

        publicbooleansendTemplateMail(String title, String toUser, String templateName, Map<String, Object> params) {<font></font>

            try{<font></font>

    <font></font>

                MimeMessage mimeMessage = mailSender.createMimeMessage();<font></font>

                MimeMessageHelper helper = newMimeMessageHelper(mimeMessage, true);<font></font>

                // 发件人<font></font>

                helper.setFrom(from);<font></font>

                //收件人<font></font>

                helper.setTo(toUser);<font></font>

                //邮件标题<font></font>

                helper.setSubject(title);<font></font>

    <font></font>

                Configuration configuration = newConfiguration(Configuration.VERSION_2_3_28);<font></font>

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

                String text = FreeMarkerTemplateUtils.processTemplateIntoString(configuration.getTemplate(templateName), params);<font></font>

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

                helper.setText(text, true);<font></font>

                mailSender.send(mimeMessage);<font></font>

    <font></font>

            } catch(Exception e) {<font></font>

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

                thrownewRuntimeException(e);<font></font>

            }<font></font>

            returntrue;<font></font>

        }<font></font>

    <font></font>

    }

    四,总结

    邮件发送本地(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发送邮件,模板邮件,图片邮件

          本文链接:https://www.haomeiwen.com/subject/nrihgctx.html