SpringBoot发送邮件

引入依赖

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

        <!-- 发送模板文件需要用到 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

配置属性

application.properties中配置相应的属性

spring.mail.host=smtp.163.com
spring.mail.username=xxxxxxxxx@163.com
spring.mail.password=xxxxxxxxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true

用法

Service类

package com.lzc.email.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.FileSystemResource;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Service;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.util.Set;

/**
 * Created by lzc
 * 2018/12/13 23:30
 */
@Service
@Slf4j
public class EmailServiceImpl implements EmailService {

    @Autowired
    private JavaMailSender mailSender;// spring 提供的邮件发送类

    @Value("${spring.mail.username}")
    private String from = ""; // 邮件发送人,这里直接从配置文件中获取

    @Override
    public void sendSimpleEmail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();// 创建简单邮件消息
        message.setFrom(from);
        message.setTo(to); //设置收件人
        /* String[] adds = {"xxx@qq.com","yyy@qq.com"}; // 同时发送给多人
        message.setTo(adds);*/
        message.setSubject(subject); // 设置主题
        message.setText(content); // 设置内容
        try {
            mailSender.send(message); // 执行发送邮件
            log.info("简单邮件已经发送。");
        } catch (Exception e) {
            log.error("发送简单邮件时发生异常!", e);
        }
    }

    @Override
    public void sendHtmlEmail(String to, String subject, String content) {
        MimeMessage message = mailSender.createMimeMessage();
        try {
            // true表示需要创建一个multipart message
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content, true);
            mailSender.send(message);
            log.info("html邮件发送成功");
        } catch (MessagingException e) {
            log.error("发送html邮件时发生异常!", e);
        }
    }

    @Override
    public void sendAttachmentsEmail(String to, String subject, String content, Set<String> filePaths) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper helper = null;
        try {
            helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(content);
            for (String filePath : filePaths) {
                FileSystemResource file = new FileSystemResource(new File(filePath));
                helper.addAttachment(file.getFilename(), file);
                log.info(file.getFilename());
            }
            mailSender.send(mimeMessage);
            log.info("发送成功");
        } catch (MessagingException e) {
            e.printStackTrace();
            log.info("发送失败" + e);
        }
    }
}

测试类

package com.lzc.email;

import com.lzc.email.service.EmailService;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
;
import java.util.Set;
import java.util.TreeSet;
import java.util.UUID;

@RunWith(SpringRunner.class)
@SpringBootTest
@Slf4j
public class EmailApplicationTests {
    @Autowired
    private EmailService emailService;

    @Autowired
    private TemplateEngine templateEngine;

    @Test
    public void contextLoads() {

    }

    /**
     * 发送简单邮件
     */
    @Test
    public void test1() {
        emailService.sendSimpleEmail("923226145@qq.com","简单邮件","简单邮件");
    }

    /**
     * 发送附件文件
     */
    @Test
    public void test2() {
        Set<String> files = new TreeSet<>();
        files.add("G:\\0019032438899352_b.jpg");
        files.add("G:\\10839717_103723525199_2.jpg");
        emailService.sendAttachmentsEmail("923226145@qq.com","发送附件","发送附件", files);
    }

    /**
     * 发送HTML邮件
     */
    @Test
    public void test3() {
        String content="<html>\n" +
                "<body>\n" +
                "    <h3>hello world ! 这是一封Html邮件!</h3>\n" +
                "</body>\n" +
                "</html>";
        emailService.sendHtmlEmail("923226145@qq.com","html邮件", content);
    }

    /**
     * 发送模板邮件
     */
    @Test
    public void test4() {
        //创建邮件正文
        Context context = new Context();
        // 传递参数到模板文件中
        context.setVariable("token", UUID.randomUUID().toString().replace("-",""));
        // 在templates目录下新建一个email文件夹,在email文件夹下新建一个emailTemplate的HTML文件
        String emailContent = templateEngine.process("email/emailTemplate", context);
        emailService.sendHtmlEmail("923226145@qq.com","模板邮件",emailContent);
    }

}

emailTemplate文件如下

<!DOCTYPE html>
<html lang="en" 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.lizhencheng.xyz/setPassword/{token}(token=${token})}">修改密码</a>
</body>
</html>

 

代码地址https://gitee.com/lzc_lzc/SpringBoot-learning/tree/master/email

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值