SpringBoot-邮件服务

前言

发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。最早期的时候我们会使用 JavaMail 相关 api 来写发送邮件的相关代码,后来 Spring 推出了 JavaMailSender 更加简化了邮件发送的过程,在之后 Spring Boot 对此进行了封装就有了现在的 spring-boot-starter-mail ,本章文章的介绍主要来自于此包。

pom.xml文件

需要引入spring-boot-starter-mail依赖。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.7.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.huzh</groupId>
    <artifactId>springboot-mail</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>springboot-mail</name>
    <description>springboot-mail</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <!--thymeleaf-->
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!--web-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

application.yml配置

  • 配置邮箱的信息,使用QQ邮箱,密码这里需要在邮箱–>设置–>账户里面开启POP3/SMTP服务。
  • main中的信息是发送者和接受者。
spring:
  mail:
    ##邮箱服务器地址
    ##QQ smtp.qq.com
    ##sina smtp.sina.cn
    ##aliyun smtp.aliyun.com
    ##163 smtp.163.com
    host: smtp.qq.com
    username: *******@qq.com
    password: ******
    default-encoding: utf-8
server:
  port: 8080
main:
  formMail:
    sender: *******@qq.com
    receiver: ******@qq.com

完整controller类

这里包含了发送文本邮件、发送html邮件、发送附件邮件、发送图片邮件和发送html模板邮件。其中发送模板邮件需要HTML代码。这里主要用到JavaMailSender类作为邮件发送和TemplateEngine类作为模板解析。

@RestController
public class MailController {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Value("${main.formMail.sender}")
    private String sender;
    @Value("${main.formMail.receiver}")
    private String receiver;

    @Autowired
    private JavaMailSender javaMailSender;

    @Autowired
    private TemplateEngine templateEngine;

    /**
     * @return java.lang.String
     * @Description 发送文本邮件
     * @date 2019/8/14 9:44
     * @author huzh
     **/
    @RequestMapping("/sendMail")
    public String sendMail() {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(sender);
        message.setTo(receiver);
        //邮件主题
        message.setSubject("文本邮件测试");
        //邮件内容
        message.setText("hello mail");

        try {
            javaMailSender.send(message);
            logger.info("简单邮件已经发送。");
        } catch (MailException e) {
            logger.error("发送简单邮件时发生异常!", e);
        }
        return "success";
    }

    /**
     * @return java.lang.String
     * @Description 发送html邮件
     * @date 2019/8/14 11:52
     * @author huzh
     **/
    @RequestMapping("/sendHtmlMail")
    public String sendHtmlMail() {
        String content = "<html>\n" +
                "<body>\n" +
                "    <h3>hello world ! 这是一封Html邮件!</h3>\n" +
                "</body>\n" +
                "</html>";
        MimeMessage message = javaMailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);
            helper.setTo(receiver);
            helper.setSubject("html邮件测试");
            helper.setText(content, true);

            javaMailSender.send(message);
            logger.info("html邮件发送成功");
        } catch (MessagingException e) {
            logger.error("发送html邮件时发生异常!", e);
        }
        return "success";
    }

    /**
     * @return java.lang.String
     * @Description 发送html模板邮件
     * @date 2019/8/14 14:51
     * @author huzh
     **/
    @RequestMapping("/sendHtmlTemplateMail")
    public String sendHtmlTemplateMail() {
        //创建邮件正文
        Context context = new Context();
        context.setVariable("id", "006");
        String content = templateEngine.process("emailTemplate", context);

        MimeMessage message = javaMailSender.createMimeMessage();
        try {
            //true表示需要创建一个multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);
            helper.setTo(receiver);
            helper.setSubject("html模板邮件测试");
            helper.setText(content, true);

            javaMailSender.send(message);
            logger.info("html邮件发送成功");
        } catch (MessagingException e) {
            logger.error("发送html邮件时发生异常!", e);
        }
        return "success";
    }

    /**
     * @return java.lang.String
     * @Description 发送附件邮件
     * @date 2019/8/14 12:31
     * @author huzh
     **/
    @RequestMapping("/sendFilesMail")
    public String sendFilesMail() {
        String filePath = "C:\\Users\\Administrator\\Downloads\\11.doc";
        MimeMessage message = javaMailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);
            helper.setTo(receiver);
            helper.setSubject("附件邮件测试");
            helper.setText("附带附件", true);

            FileSystemResource file = new FileSystemResource(new File(filePath));
            String fileName = filePath.substring(filePath.lastIndexOf(File.separator));
            helper.addAttachment(fileName, file);

            javaMailSender.send(message);
            logger.info("带附件的邮件已经发送。");
        } catch (MessagingException e) {
            logger.error("发送带附件的邮件时发生异常!", e);
        }

        return "success";
    }

    /**
     * @return java.lang.String
     * @Description 发送图片邮件
     * @date 2019/8/14 12:33
     * @author huzh
     **/
    @RequestMapping("/sendImgMail")
    public String sendImgMail() {
        String Id = "test_mail";
        String content = "<html><body>这是有图片的邮件:<img src=\'cid:" + Id + "\'></body></html>";
        String imgPath = "C:\\Users\\Administrator\\Downloads\\222.jpg";

        MimeMessage message = javaMailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(sender);
            helper.setTo(receiver);
            helper.setSubject("图片邮件测试");
            helper.setText(content, true);

            FileSystemResource res = new FileSystemResource(new File(imgPath));
            helper.addInline(Id, res);

            javaMailSender.send(message);
            logger.info("嵌入静态资源的邮件已经发送。");
        } catch (MessagingException e) {
            logger.error("发送嵌入静态资源的邮件时发生异常!", e);
        }
        return "success";
    }
}

模板HTML

创建模板emailTemplate.html文件

<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
您好,这是验证邮件,请点击下面的链接完成验证,<br/>
<a href="#" th:href="@{ http://www.ityouknow.com/neo/{id}(id=${id}) }">激活账号</a>
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值