Springboot 发送邮件

Springboot 发送邮件

本文以 QQ 邮箱发送为例
邮件发送需要开启邮箱的 pop3 服务
QQ 邮箱开启位置:设置 - 账户 - POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
在这里插入图片描述
点击开启会要求进行验证,验证后会得到一个授权码,授权码需写入代码配置中
在这里插入图片描述

pom 引入依赖

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

application.yml 添加邮箱配置信息

spring:
  # 邮件发送配置
  mail:
    # 配置 SMTP 服务器地址
    host: smtp.qq.com
    # 发送者邮箱
    username: xxx@qq.com
    # 邮箱授权码
    password: xxx
    # 端口号465或587
    port: 587
    # 默认的邮件编码为UTF-8
    default-encoding: UTF-8
    # 配置SSL 加密工厂
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
        #表示开启 DEBUG 模式,这样,邮件发送过程的日志会在控制台打印出来,方便排查错误
        debug: true
126邮箱SMTP服务器地址:smtp.126.com,端口号:465或者994
2163邮箱SMTP服务器地址:smtp.163.com,端口号:465或者994
yeah邮箱SMTP服务器地址:smtp.yeah.net,端口号:465或者994
qq邮箱SMTP服务器地址:smtp.qq.com,端口号465或587

发送普通邮件

该方式不支持发送附件、图片、html文本内容

	//邮件的发送者
    @Value("${spring.mail.username}")
    private String from;

    /**
     * 发送简单邮件
     * @return
     */
    @Async
    public void sendEasyMail() {
        // 构建一个邮件对象
        SimpleMailMessage message = new SimpleMailMessage();
        // 设置邮件主题
        message.setSubject("小熊收邮件");
        // 设置邮件发送者,这个跟application.yml中设置的要一致
        message.setFrom(from);
        // 设置邮件接收者,可以有多个接收者,中间用逗号隔开,以下类似
        // message.setTo("xxx@qq.com","xxx@qq.com");
        message.setTo("xxx@qq.com");
        // 设置邮件抄送人,可以有多个抄送人
        //message.setCc("xxx@qq.com");
        // 设置隐秘抄送人,可以有多个
		//message.setBcc("xxx@qq.com");
        // 设置邮件发送日期
        message.setSentDate(new Date());
        // 设置邮件的正文
        message.setText("邮件正文内容。。。");
        // 发送邮件
        javaMailSender.send(message);
    }

发送邮件效果
在这里插入图片描述

发送复杂邮件

	
    @Autowired
    JavaMailSender javaMailSender;

    //邮件的发送者
    @Value("${spring.mail.username}")
    private String from;
    
	/**
     * 发送复杂邮件
     * @return
     */
    @Async
    public void sendMimeMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        // true表示构建一个可以带附件的邮件对象
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage,true);

        mimeMessageHelper.setSubject("小熊收邮件");
        mimeMessageHelper.setFrom(from);
        mimeMessageHelper.setTo("xxx@qq.com");
        mimeMessageHelper.setSentDate(new Date());

        //带图片、html文本内容
        mimeMessageHelper.setText("<p style='color:red;'>邮件正文内容</p><p>图片:</p><img width='200px;' height='200px;' src='cid:p01' />",true);
        
        //添加文件信息
        mimeMessageHelper.addInline("p01",new File("C:\\Users\\Administrator\\Desktop\\222.jpg"));

        //附件信息
        mimeMessageHelper.addAttachment("图片1.png",new File("C:\\Users\\Administrator\\Desktop\\banner.png"));
        javaMailSender.send(mimeMessage);
    }

发送邮件效果
在这里插入图片描述

Freemarker 模板发送邮件

1.pom 添加 freemarker 依赖

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

2.application.yml 添加 freemarker 配置

spring:

  #模板配置
  freemarker:
    suffix: .ftl
    enabled: true
    cache: false
    charset: UTF-8
    content-type: text/html
    allow-request-override: false
    template-loader-path: classpath:/templates/
    check-template-location: true
    expose-request-attributes: false
    expose-session-attributes: false
    expose-spring-macro-helpers: false

3.templates 目录下添加邮件模板 mail.ftl

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .layui-table {
            width: 100%;
            background-color: #fff;
            color: #666;
        }
        table {
            border-collapse: collapse;
            border-spacing: 0;
        }
        .layui-table tbody tr:hover, .layui-table thead tr, .layui-table-click, .layui-table-header, .layui-table-hover, .layui-table-mend, .layui-table-patch, .layui-table-tool, .layui-table-total, .layui-table-total tr, .layui-table[lay-even] tr:nth-child(even) {
            background-color: #f2f2f2;
        }
        .layui-table tr {
            transition: all .3s;
            -webkit-transition: all .3s;
        }
        .layui-table td, .layui-table th {
            position: relative;
            padding: 9px 15px;
            min-height: 20px;
            line-height: 20px;
            font-size: 14px;
        }
        .layui-table td, .layui-table th, .layui-table-col-set, .layui-table-fixed-r, .layui-table-grid-down, .layui-table-header, .layui-table-page, .layui-table-tips-main, .layui-table-tool, .layui-table-total, .layui-table-view, .layui-table[lay-skin=line], .layui-table[lay-skin=row] {
            border-width: 1px;
            border-style: solid;
            border-color: #e6e6e6;
        }
        .layui-table th {
            text-align: left;
            font-weight: 400;
        }
    </style>
</head>
<body style="padding: 20px;">
<p>${title}</p>
<div id="table_html" style="text-align: center;">
    <table class="layui-table color-success">
        <colgroup>
            <col width="100">
            <col width="200">
            <col width="200">
            <col>
        </colgroup>
        <thead>
        <tr>
            <th>序号</th>
            <th>动漫</th>
            <th>主角</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td>${number}</td>
            <td>${name}</td>
            <td>${author}</td>
        </tr>
        </tbody>
    </table>
</div>
</body>
</html>

4.编写邮件发送方法

	
    @Autowired
    JavaMailSender javaMailSender;

    @Autowired
    FreeMarkerConfigurer configurer;

    //邮件的发送者
    @Value("${spring.mail.username}")
    private String from;

	/**
     * 发送Freemarker模板邮件
     * @return
     */
    @Async
    public void sendFreemarkerMail() throws MessagingException, IOException, TemplateException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);

        mimeMessageHelper.setSubject("小熊收邮件");
        mimeMessageHelper.setFrom(from);
        mimeMessageHelper.setTo("xxx@qq.com");

        //取得模板
        Template template = configurer.getConfiguration().getTemplate("mail.ftl");

        //构建页面数据信息
        Map<String,String> map = new HashMap<>();

        map.put("title","头部信息");
        map.put("number","1");
        map.put("name","猫和老鼠");
        map.put("author","Tom & Jerry");

        //赋值后的模板邮件内容
        String text = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);

        mimeMessageHelper.setText(text,true);
        javaMailSender.send(mimeMessage);
    }

邮件发送效果
在这里插入图片描述

Thymeleaf 模板发送邮件

1.pom 添加 thymeleaf 依赖

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

2.application.yml 添加 thymeleaf 配置

spring:
  # thymeleaf 模块配置
  thymeleaf:
    prefix: classpath:/templates/
    suffix: .html
    mode: LEGACYHTML5
    encoding: utf-8
    # 关闭页面缓存
    cache: false
    servlet:
      content-type: text/html

3.templates 目录下添加邮件模板 mailThymeleaf.html

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .layui-table {
            width: 100%;
            background-color: #fff;
            color: #666;
        }
        table {
            border-collapse: collapse;
            border-spacing: 0;
        }
        .layui-table tbody tr:hover, .layui-table thead tr, .layui-table-click, .layui-table-header, .layui-table-hover, .layui-table-mend, .layui-table-patch, .layui-table-tool, .layui-table-total, .layui-table-total tr, .layui-table[lay-even] tr:nth-child(even) {
            background-color: #f2f2f2;
        }
        .layui-table tr {
            transition: all .3s;
            -webkit-transition: all .3s;
        }
        .layui-table td, .layui-table th {
            position: relative;
            padding: 9px 15px;
            min-height: 20px;
            line-height: 20px;
            font-size: 14px;
        }
        .layui-table td, .layui-table th, .layui-table-col-set, .layui-table-fixed-r, .layui-table-grid-down, .layui-table-header, .layui-table-page, .layui-table-tips-main, .layui-table-tool, .layui-table-total, .layui-table-view, .layui-table[lay-skin=line], .layui-table[lay-skin=row] {
            border-width: 1px;
            border-style: solid;
            border-color: #e6e6e6;
        }
        .layui-table th {
            text-align: left;
            font-weight: 400;
        }
    </style>
</head>
<body style="padding: 20px;">
<p th:text="${title}"></p>
<div id="table_html" style="text-align: center;">
    <table class="layui-table color-success">
        <colgroup>
            <col width="100">
            <col width="200">
            <col width="200">
            <col>
        </colgroup>
        <thead>
        <tr>
            <th>序号</th>
            <th>动漫</th>
            <th>主角</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td th:text="${number}"></td>
            <td th:text="${name}"></td>
            <td th:text="${author}"></td>
        </tr>
        </tbody>
    </table>
</div>
</body>
</html>

4.编写邮件发送方法

    @Autowired
    JavaMailSender javaMailSender;

    @Autowired
    TemplateEngine templateEngine;

    //邮件的发送者
    @Value("${spring.mail.username}")
    private String from;
    
	/**
     * 发送Thymeleaf模板邮件
     * @return
     */
    @Async
    public void sendThymeleafMail() throws MessagingException {
        MimeMessage mimeMessage = javaMailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);

        mimeMessageHelper.setSubject("小熊收邮件");
        mimeMessageHelper.setFrom(from);
        mimeMessageHelper.setTo("xxx@qq.com");

        Context context = new Context();

        context.setVariable("title","头部信息");
        context.setVariable("number","1");
        context.setVariable("name","猫和老鼠");
        context.setVariable("author","Tom & Jerry");

        String process = templateEngine.process("mailThymeleaf.html", context);

        mimeMessageHelper.setText(process,true);
        javaMailSender.send(mimeMessage);
    }

邮件发送效果
在这里插入图片描述

Spring Boot发送邮件需要使用JavaMailSender接口来实现。以下是一个简单的示例代码: 首先,确保在你的项目中添加了相关依赖。在pom.xml文件中添加以下代码: ```xml <dependencies> <!-- Spring Boot Starter Mail --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-mail</artifactId> </dependency> </dependencies> ``` 然后,在你的应用程序中创建一个类来发送邮件。例如,你可以创建一个名为EmailSender的类: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.mail.SimpleMailMessage; import org.springframework.mail.javamail.JavaMailSender; import org.springframework.stereotype.Component; @Component public class EmailSender { @Autowired private JavaMailSender javaMailSender; public void sendEmail(String to, String subject, String text) { SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setSubject(subject); message.setText(text); javaMailSender.send(message); } } ``` 在上述示例中,我们使用了@Autowired注解来自动注入JavaMailSender对象,该对象是由Spring Boot自动配置提供的。 现在,你可以在你的应用程序的任何地方使用EmailSender类来发送邮件。例如,你可以在控制器中使用它: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class EmailController { @Autowired private EmailSender emailSender; @PostMapping("/sendEmail") public String sendEmail(@RequestBody EmailRequest emailRequest) { emailSender.sendEmail(emailRequest.getTo(), emailRequest.getSubject(), emailRequest.getText()); return "Email sent successfully!"; } } ``` 上述示例中,我们创建了一个名为EmailController的REST控制器,它接收一个包含收件人、主题和内容的EmailRequest对象,并使用EmailSender发送邮件。 请注意,你需要适当配置你的邮件服务器信息。在Spring Boot的application.properties(或application.yml)文件中添加以下配置: ```yaml spring.mail.host=your-mail-server spring.mail.port=your-mail-server-port spring.mail.username=your-username spring.mail.password=your-password spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true ``` 以上是一个简单的示例,你可以根据你的实际需求进行修改和扩展。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值