SpringBoot实现邮件发送(支持向任意类型邮箱发送邮件,可发送简单文本、图片、附件、和Html文本)_盖世英雄~小龙龙的博客-程序员宅基地

技术标签: spring boot  javamail  SpringBoot知识  

1.在SpringBoot项目中的pom.xml文件下引入邮件依赖包

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

2.在SpringBoot项目中创建邮件处理工具类

package com.online_post.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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;

@Service
public class MailUtils {
    

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

    @Value("${spring.mail.username}")
    private String from;

    @Autowired
    private JavaMailSender mailSender;

    /**
     * 简单文本邮件
     * @param to 接收者邮件
     * @param subject 邮件主题
     * @param contnet 邮件内容
     */
    public void sendSimpleMail(String to, String subject, String contnet){
    

        SimpleMailMessage message = new SimpleMailMessage();
        message.setTo(to);
        message.setSubject(subject);
        message.setText(contnet);
        message.setFrom(from);

        mailSender.send(message);
    }

    /**
     * HTML 文本邮件
     * @param to 接收者邮件
     * @param subject 邮件主题
     * @param contnet HTML内容
     * @throws MessagingException
     */
    public void sendHtmlMail(String to, String subject, String contnet) throws MessagingException {
    
        MimeMessage message = mailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(contnet, true);
        helper.setFrom(from);

        mailSender.send(message);
    }

    /**
     * 附件邮件
     * @param to 接收者邮件
     * @param subject 邮件主题
     * @param contnet HTML内容
     * @param filePath 附件路径
     * @throws MessagingException
     */
    public void sendAttachmentsMail(String to, String subject, String contnet,
                                    String filePath) throws MessagingException {
    
        MimeMessage message = mailSender.createMimeMessage();

        MimeMessageHelper helper = new MimeMessageHelper(message, true);
        helper.setTo(to);
        helper.setSubject(subject);
        helper.setText(contnet, true);
        helper.setFrom(from);

        FileSystemResource file = new FileSystemResource(new File(filePath));
        String fileName = file.getFilename();
        helper.addAttachment(fileName, file);

        mailSender.send(message);
    }

    /**
     * 图片邮件
     * @param to 接收者邮件
     * @param subject 邮件主题
     * @param contnet HTML内容
     * @param rscPath 图片路径
     * @param rscId 图片ID
     * @throws MessagingException
     */
    public void sendInlinkResourceMail(String to, String subject, String contnet,
                                       String rscPath, String rscId) {
    
        logger.info("发送静态邮件开始: {},{},{},{},{}", to, subject, contnet, rscPath, rscId);

        MimeMessage message = mailSender.createMimeMessage();
        MimeMessageHelper helper = null;

        try {
    

            helper = new MimeMessageHelper(message, true);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(contnet, true);
            helper.setFrom(from);

            FileSystemResource res = new FileSystemResource(new File(rscPath));
            helper.addInline(rscId, res);
            mailSender.send(message);
            logger.info("发送静态邮件成功!");

        } catch (MessagingException e) {
    
            logger.info("发送静态邮件失败: ", e);
        }

    }

}

3.在SpringBoot项目下的application.properties中修改配置文件

#邮箱服务器地址,各大运营商不同(此处发送方邮箱以QQ为例)
spring.mail.host=smtp.qq.com
#用户名
spring.mail.username=xxx@qq.com #该qq邮箱是发送方的邮箱
#密码,如果是qq的,要申请临时授权码
spring.mail.password=xxx
spring.mail.default-encoding=UTF-8
#以谁来发送邮件
mail.fromMail.addr=xxx1@qq.com
#加下面这两个配置才能通过qq给qq及其他邮箱(163)发邮件
spring.mail.protocol=smtp
spring.mail.properties.mail.smtp.ssl.enable=true

4.申请QQ临时授权码

4.1登录QQ邮箱

在这里插入图片描述

4.2点击设置在这里插入图片描述

4.3点击账户并且生成授权码

在这里插入图片描述
按照操作获取授权码之后将该授权码粘贴到application.properties中的

#密码,如果是qq的,要申请临时授权码
spring.mail.password=你的授权码

4.4测试一下邮件工具类

此步骤省略,可随意在任何测试类中测试

5. 联系作者

QQ: 2805005861

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41243646/article/details/107232707

智能推荐

XBee/XBee-Pro ZigBee 模块-程序员宅基地

(此处http://www.bitconn.com/form_1/注册后,购买XBee模块,送USB评估底板)Digi ZigBee模块发展历史如果您有幸用过十多年前Digi的第一代ZigBee模块,那时还只有插针封装的型号,在XBee模块上除了XBee几个大字母外,在其下方还可以看到S2的标记。事实上,根据芯片版本的不同历史上分别有S2,S2B,S2C,Micro等,每次硬件平台升级,都...

Candence dsp算子_version p6 dsp vector-程序员宅基地

原文地址Cadence DSP 算子开发上手指南_旷视的博客-程序员宅基地前言Cadence 的 Vision P6/Q6/Q7 系列 DSP 在很多的 ISP (“Image Signal Processor”) 芯片中都有部署,可以在图像处理场景补充甚至碾压 CPU 算力。而且 Cadence 官方提供了一个比较全的基础算子库 libxi,很多标准算子在 libxi 中都有特定参数组合下的参考实现。但是鉴于 Cadence DSP 开发群体比较小,网络上能找到的中文资源几乎没有,从零进入开_version p6 dsp vector

Java9模块化(Jigsaw)初识-程序员宅基地

Java9经历了多次跳票,终于要在9月份正式发布,原计划Jigsaw在Java7就有的,也终于在Java9里面提供了,简单总结下。对比 Java9 以前上面2个图分别对应的分别是JDK8/9的目录下的 src.zip 文件,从图片上看上 Java9 的目录都发生变化了,从以前的一个 java 里面就拆除了好几个模块,比如 java.logging, java.desktop, java.se..._jigsaw index

关于Vue的生产环境proxyTable代理问题_vue proxytablei 不用代理-程序员宅基地

1 . 通过在 config/index.js 配置文件中找到proxyTable配置项dev: { // Paths assetsSubDirectory: 'static', assetsPublicPath: '/', proxyTable: { '/api': { //3 target: 'http://xxx:8080'..._vue proxytablei 不用代理

每日Linux命令之top-程序员宅基地

每日Linux命令之top1、作用:动态显示当前Linux进程2、语法:top -hv | -abcHimMsS -d delay -n iterations -p pid [, pid ...]什么鬼,,还是看具体场景吧(见第4点,常见用法)3、参数说明4、常见用法:显示当前进程运行状态,top第一行:时间表示运行了多长时间;1user表示当前登录了1个用户;load average后面的三个数字,表示1分钟、5分钟、15分钟负载情况。如果这个数值除以逻辑CPU数量,结果高于5,

Ubuntu 中 执行 update 或 Install 命令时错误解决_update install-程序员宅基地

1 问题 :1.1 在执行 下边命令时 :sudo apt-get update && sudo apt-get install出现下边错误 :1.2 出现该问题原因 : 出现这个问题的原因可能是有另外一个程序正在运行,由于它在运行时,会占用软件源更新时的系统锁(以下称“系统更新锁”,此锁文件在“/var/lib/apt/lists/”..._update install

随便推点

(笔记)Mysql命令mysqldump:备份数据库-程序员宅基地

mysqldump命令用来备份数据库。mysqldump命令在DOS的[url=file://\\mysql\\bin]\\mysql\\bin[/url]目录下执行。1) 导出整个数据库(导出文件默认是存在mysql\bin目录下) mysqldump -u 用户名 -p 数据库名 &gt; 导出的文件名 mysqldump -u user_name -p123456 data..._使用mysqldump命令备份jwgl数据库,备份文件名:backup_1.sql;

什么是算法,算法入门_嵌套的循环次数是时间复杂度的指数-程序员宅基地

目录算法的基本概念什么是算法?算法与程序重要特性优秀的算法标准算法效率的度量时间复杂度空间复杂度计算规则算法的基本概念什么是算法?算法是对待问题求解步骤的一种描述,他是指令的有限序列,其中的每条指令表示一个和多个操作。简而言之就是解决问题的方法和步骤算法与程序算法是解决问题的一种方法或一个过程,考虑如何将输入换成输出,一个问题可以有多种算法。程序是用某种程序设计语言对算法的具体实现。 程序 = 数据结构 + 算法 数据结构通.._嵌套的循环次数是时间复杂度的指数

Java多线程系列--“JUC线程池”03之 线程池原理(二)_the executor java process does not stop unless it -程序员宅基地

概要在前面一章"Java多线程系列--“JUC线程池”02之 线程池原理(一)"中介绍了线程池的数据结构,本章会通过分析线程池的源码,对线程池进行说明。内容包括:线程池示例参考代码(基于JDK1.7.0_40)线程池源码分析 (一) 创建“线程池” (二) 添加任务到“线程池” (三) 关闭“线程池”转载请注明出处:http://www.c_the executor java process does not stop unless it is stopped explicitly.

python去除列表的最后一个元素_列表最后一位不可取-程序员宅基地

list1 = [1,2,3,4]list2 = list1[0:-1]print(list2)_列表最后一位不可取

Spring clould config client无法调用server端从git仓库读取配置文件-程序员宅基地

Spring clould config client无法调用server端从git仓库读取配置文件,最后解决访问是:config,client端配置文件改成bootstrap.properties,就可以了

推荐文章

热门文章

相关标签