springboot邮件发送的三种方式

十二 2022年05月07日 1255 0

前言🦄

我们在开发博客时,或者在一些需要通知用户的项目中,通常会使用以下方法通知用户:

  1. 短信
  2. 邮件
  3. 其他(app)推送等

但是短信得收费啊🤨非公司项目,我们通常选择使用邮件通知,例如本博客,在评论后 我就会收到通知,如下:

image-20220507100057497

当我进行评论回复的时候,你们也会收到通知,当然也是我发送的~

今天我就来介绍一下在springboot中如何发送邮件。

准备✉️

在进行发送邮件前,我们需要准备如下几样东西:

邮箱

这个我就不多说了,基本每个人都有~

开通smtp服务

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地 址传送邮件的规则,由它来控制信件的中转方式

每种邮箱的smtp服务器都不同

QQ --- smtp.qq.com
sina --- smtp.sina.cn
aliyun --- smtp.aliyun.com
163 --- smtp.163.com

首先 ,我们在自己对应的邮箱内找到设置,在设置中找到如下设置

image-20220507100810819

然后我们开启IMAP|SMTP服务,再申请一个授权密码,这个密码就是服务器使用这个邮箱发送邮件的密码。

申请成功后 建议记住密码,像163邮箱,只显示一次😒

image-20220507101011254

后台

新建项目,在项目的pom文件中,加入maven坐标

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

在application.properties配置文件中,加入如下配置

server.port=8081
#邮箱服务器地址
#QQ smtp.qq.com
#sina smtp.sina.cn
#aliyun smtp.aliyun.com
#163 smtp.163.com
spring.mail.host=smtp.163.com
#邮箱用户名
spring.mail.username=自己的邮箱
#邮箱密码(注意:应该使用独立密码,设置里面获取)
spring.mail.password=授权密码
#编码格式
spring.mail.default-encoding=UTF-8
#发送邮件地址
mail.fromMail.sender=自己的邮箱

新建controller类

package com.world.lzh;

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.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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

/**
 * @Author lzh
 * @Date 2022/5/7 - 9:28
 * @Description
 * @Version 1.0.0
 **/
@RestController
public class IndexController {

    @Autowired
    private JavaMailSender mailSender;

    @Value("${mail.fromMail.sender}")  //发送人的邮箱
    private String from;

    /**
     * 普通文本邮件发送
     *
     * @param to      发给谁  对方邮箱
     * @param subject 标题  测试邮件
     * @param content 内容
     */
    @RequestMapping("/sendMail")
    public String sendTextMail(String to, String subject, String content) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(content);
        try {
            mailSender.send(message);//发送
            System.out.println("测试邮件已发送。");
        } catch (Exception e) {
            System.out.println("发送邮件时发生异常了!");
            return "邮件发送失败:" + e;
        }
        return "邮件发送成功";
    }

    /**
     * 发送HTML邮件
     *
     * @param to      发给谁  对方邮箱
     * @param subject 标题  测试邮件
     * @param content 内容
     */
    @RequestMapping("/sendHtmlMail")
    public String sendHtmlMail(String to, String subject, String content) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = null;
        try {
            mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
            mimeMessageHelper.setFrom(from);
            mimeMessageHelper.setTo(to);
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(content, true);//发送HTML内容时需要设置html开启,默认为false
            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
            return "邮件发送失败:" + e;
        }
        return "邮件发送成功";
    }


    /**
     * 发送附件邮件
     *
     * @param to       发给谁  对方邮箱
     * @param subject  标题  测试邮件
     * @param content  内容
     * @param filePath 文件路径
     */
    @RequestMapping("/sendAttachmentMail")
    public String sendAttachmentMail(String to, String subject, String content, String filePath) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        MimeMessageHelper mimeMessageHelper = null;
        try {
            mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);//需要开启邮件附件
            mimeMessageHelper.setFrom(from);
            mimeMessageHelper.setTo(to);
            mimeMessageHelper.setSubject(subject);
            mimeMessageHelper.setText(content, true);
            FileSystemResource fileSystemResource = new FileSystemResource(new File(filePath));
            String fileName = fileSystemResource.getFilename();
            mimeMessageHelper.addAttachment(fileName, fileSystemResource);//添加附件
            mailSender.send(mimeMessage);
        } catch (MessagingException e) {
            e.printStackTrace();
            return "邮件发送失败:" + e;
        }
        return "邮件发送成功";
    }
}

以上为三种发送方式,我们依次测试。

测试✔️

简单邮件

纯文本邮件,在此我用apipost测试。

image-20220507101740126

image-20220507101756332

image-20220507101810340

image-20220507101831553

HTML邮件

我在这插入一个简单的html代码片段,为了区分是html,给h3标签加了个红色

image-20220507102147502

image-20220507102248539

image-20220507102301478

附件邮件

我这直接找个本地的文件,当做附件,可以使用网络地址。

直接用昨天上传的图片

image-20220507102541056

image-20220507102630346

image-20220507102646973

image-20220507102700089

是不是非常的so easy~

源码地址:点击访问欢迎评论star⭐

img

Last Updated: 2022/05/07 10:29:58
springboot集成jpa springboot文件上传与下载