当前位置: 首页 > article >正文

SpringBoot整合邮件功能(带附件)

前言

这篇文章只是记录一下在开发中使用邮箱功能

本人在项目中需要使用邮箱发送带附件的邮件,我们的附件可能是在线的阿里云OSS,也可能是系统生成的Excel,写了一个工具类,方便使用。

整合流程

QQ邮箱作为案例
1、添加依赖

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

2、添加配置

spring:
	mail:
	    username: ************@qq.com
	    default-encoding: utf-8
	    host: smtp.qq.com
	    port: 465 #端口号465587
	
	    password: **************#客户端授权码,不是邮箱密码,这个在qq邮箱设置里面自动生成的
	    properties:
	      mail:
	        smtp:
	          auth: true
	          socketFactory:
	            class: javax.net.ssl.SSLSocketFactory
	            fallback: false
	          ssl:
	            enable: true
	            trust: smtp.qq.com

3、工具类

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.Component;

import javax.activation.DataSource;
import javax.activation.URLDataSource;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.List;

/**
 * 邮箱工具
 */
@Slf4j
@Component
public class MailUtils {
    @Autowired
    private JavaMailSender mailSender;
    /**
     * 配置文件中我的qq邮箱
     */
    @Value("${spring.mail.username}")
    private String username;

    /**
     * 发送邮件-不包含附件
     *
     * @param fromAliasName 别名
     * @param toMail        发送目标邮箱
     * @param subject       主题
     * @param content       内容
     */
    public void sendMail(String fromAliasName, String toMail, String subject, String content) {
        sendMailOssFile(fromAliasName, toMail, subject, content, null);
    }

    /**
     * 发送邮件工具-OSS在线文件
     *
     * @param fromAliasName 别名
     * @param toMail        发送目标邮箱
     * @param subject       主题
     * @param content       内容
     * @param fileList      附件OSS地址
     */
    public void sendMailOssFile(String fromAliasName, String toMail, String subject, String content, List<String> fileList) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            // 设置发件人别名(如果未设置别名就默认为发件人邮箱)
            if (fromAliasName != null && !fromAliasName.trim().isEmpty()) {
                helper.setFrom(new InternetAddress(username, fromAliasName));
            } else {
                helper.setFrom(username);
            }
            helper.setTo(toMail);
            helper.setSubject(subject);
            helper.setText(content, true);
            if (fileList != null && !fileList.isEmpty()) {
                for (String filePath : fileList) {
                    String[] split = filePath.split("/");
                    // 将输入流转换为Resource
                    URL url = new URL(filePath);
                    DataSource dataSource = new URLDataSource(url);
                    helper.addAttachment(split[split.length - 1], dataSource);
                }
            }
            //发送邮件
            mailSender.send(message);
            log.info("邮件已经发送。");
        } catch (MalformedURLException e) {
            log.error("URL 格式错误: {}", e.getMessage(), e);
        } catch (MessagingException | UnsupportedEncodingException e) {
            log.error("发送邮件时发生异常: {}", e.getMessage(), e);
        }
    }


    /**
     * 发送邮件工具-普通文件
     *
     * @param fromAliasName 别名
     * @param toMail        发送目标邮箱
     * @param subject       主题
     * @param content       内容
     * @param fileList      附件
     */
    public void sendMailFile(String fromAliasName, String toMail, String subject, String content, List<File> fileList) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            // 设置发件人别名(如果未设置别名就默认为发件人邮箱)
            if (fromAliasName != null && !fromAliasName.trim().isEmpty()) {
                helper.setFrom(new InternetAddress(username, fromAliasName));
            } else {
                helper.setFrom(username);
            }
            helper.setTo(toMail);
            helper.setSubject(subject);
            helper.setText(content, true);
            if (fileList != null && !fileList.isEmpty()) {
                for (File file : fileList) {
                    helper.addAttachment(file.getName(), new FileSystemResource(file));
                }
            }
            //发送邮件
            mailSender.send(message);
            log.info("邮件已经发送。");
        } catch (MessagingException | UnsupportedEncodingException e) {
            log.error("发送邮件时发生异常!", e);
        }
    }

}

http://www.kler.cn/a/320471.html

相关文章:

  • 通用定时器---输出比较功能
  • Django5 2024全栈开发指南(二):Django项目配置详解
  • vue实现展示并下载后端返回的图片流
  • ubuntu20.04 更换清华源报错
  • 如何对AWS进行节省
  • Python绘制雪花
  • 江上场景目标检测系统源码分享
  • 嵌入式开发Git使用
  • 戴尔迅速应对疑似信息泄露事件,强化数据保护措施|硬盘文件数据销毁 文件销毁 数据销毁
  • SCI论文文献咨询,教授团队全程技术指导,确保实验方案高效精准,一站式解决您的所有需求
  • 将相机深度图转接为点云的ROS2功能包
  • 为生成式 AI 工作负载设计弹性
  • EasyCVR全方位安全守护智慧电厂:构建高效视频监控系统优势分析
  • 二进制安装K8S
  • W39-03-jstack 的命令使用线程查看
  • Coding.net 堡垒机 Agent 进程消失的诊断与解决方案
  • uniapp小程序使用canvas画圆
  • 一次使用threading.Thread来实现Pytorch多个模型并发运行的失败案例
  • [OpenGL]使用OpenGL绘制带纹理三角形
  • 百度amis框架经验分享
  • electron-vite使用vue-i18n,ts 检查报错上不存在属性“$t”
  • Qt_文件操作
  • 外观模式
  • DNS正向解析和反向解析的区别
  • 同声传译软件哪个好?试试这些免费的翻译工具
  • 探索 Web Speech API:实现浏览器语音识别与合成