Spring boot 使用 FreeMarker 发送邮件

Spring boot 使用 FreeMarker 发送邮件

前言
最近写一个项目,用到了邮件功能,就是当用户注册完毕,发送欢迎邮件。在网上找了几篇教程,踩了几个坑,最终实现了,于是乎记录下来,说不定以后用得到。
第一步,导入架包:

 	 <!--邮件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <!--freemarker<-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

第二步:配置application.properties文件

#qq邮箱
spring.mail.host=smtp.qq.com
spring.mail.username=xxxx@qq.com
spring.mail.password=授权码
spring.mail.port=465
spring.mail.properties.smtp.auth=true
spring.mail.properties.smtp.starttls.enable=true
spring.mail.properties.smtp.starttls.required=true
spring.mail.properties.mail.smtp.ssl.enable=true
spring.freemarker.settings.classic_compatible=true

qq邮箱如何获取授权码,如下图,选择开启:
在这里插入图片描述
第三步:编写MailService接口,

import com.alvis.exam.domain.User;
import org.springframework.stereotype.Component;
@Component
public interface MailService {
    void sendMessageMail(String title, String templateName, String toUser, User User);
}

第四步:编写MailServiceImpl代码

import com.alvis.exam.domain.User;
import com.alvis.exam.service.MailService;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.HashMap;
import java.util.Map;
@Service
public class MailServiceImpl implements MailService {
    //邮件的发送者
    @Value("${spring.mail.username}")
    private String from;
    //注入MailSender
    @Autowired
    private JavaMailSender javaMailSender;
    //发送邮件的模板引擎
    @Autowired
    private FreeMarkerConfigurer freeMarkerConfigurer;
    @Autowired
    private MailService mailService;
    @Override
    public void sendMessageMail(String title, String templateName, String toUser, User user) {
        try{
            MimeMessage mimeMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);
            mimeMessageHelper.setFrom(from);
            mimeMessageHelper.setTo(InternetAddress.parse(toUser));//发送给谁
            mimeMessageHelper.setSubject("【" + title + "-" + LocalDate.now() + " " + LocalTime.now().withNano(0) + "】");//邮件标题
            Map<String,Object> model = new HashMap<>();
            model.put("user",user);
            try{
                //获取模板文件名
                Template template = freeMarkerConfigurer.getConfiguration().getTemplate(templateName);
                try{
                     解析模板并替换动态数据。
                    String text = FreeMarkerTemplateUtils.processTemplateIntoString(template,model);
                    mimeMessageHelper.setText(text,true);
                    javaMailSender.send(mimeMessage);
                }catch (TemplateException e){
                    e.printStackTrace();
                }
            }catch (Exception e){
                e.printStackTrace();
            }
        }catch (MessagingException e){
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

第五步:在需要的地方调用:
实现类需要传入的参数为:

String title, String templateName, String toUser, User user

在需要的地方调用,传入需要的参数就行了。
title:标题
templateName:模板文件名
toUser:发送给谁
user:实体类,在此我就不演示了。

mailService.sendMessageMail("欢迎注册在线考试系统","mail.html",user.getPhone(),user);

另附模板文件主要代码:

<span style="font-family: 'proxima_novathin', Helvetica; font-weight: normal;">尊敬的用户:${user.userName},您好! </span>

实现效果图:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值