SpringBoot中快速实现邮箱发送

前言

在许多企业级项目中,需要用到邮件发送的功能,如:

  1. 注册用户时需要邮箱发送验证
  2. 用户生日时发送邮件通知祝贺
  3. 发送邮件给用户等
    创建工程导入依赖
<!-- 邮箱发送依赖 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- 小火龙代码简化 -->
<dependency>
    <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    <version>1.18.8</version>
</dependency>

本工程依赖于SpringBoot,是基于SpringBoot再次对邮箱发送进行了一次封装。

创建Application.properties
# JavaMailSender 邮件发送的配置
spring.mail.host=smtp.qq.com
[email protected]
#授权码
spring.mail.password=
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.default-encoding=UTF-8
封装邮箱发送工具类

创建邮箱信息实体类,如下:

/**
 * 邮件信息实体
 *
 * @author:伍梓涛
 * @version:1.0.0
 * @Modified By:SimpleWu
 * @CopyRright (c)2019-:YUM架构平台
 */
@Data
public class MailEntity {
    private String to; //收件人
    private String subject;//标题
    private String text;//正文
    private boolean isHtml = false;//是否html邮件
    private List<String> files;//附件地址
    private Date sentDate;//发送时间

}

创建邮箱信息实体类工具,快捷创建邮件信息

/**
 * 邮箱发送信息统一处理封装
 *
 * @author:伍梓涛
 * @version:1.0.0
 * @Modified By:SimpleWu
 * @CopyRright (c)2019-:YUM架构平台
 */
@Slf4j
public class MailEntityHelper {

    public static MimeMessageHelper craeteMessageHelper(MimeMessage mimeMessage, MailEntity mailBean) throws MessagingException {

        MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage, true);
        // mimeMessageHelper.setFrom(emailSender);//发件人
        mimeMessageHelper.setTo(mailBean.getTo());//收件人
        mimeMessageHelper.setSubject(mailBean.getSubject());//标题
        mimeMessageHelper.setText(mailBean.getText(), mailBean.isHtml());//是否html
        mimeMessageHelper.setSentDate(mailBean.getSentDate() == null ? new Date() : mailBean.getSentDate());// 客户端邮箱发送时间
        if (mailBean.getFiles() != null && mailBean.getFiles().size() > 0) {
            //附件添加
            mailBean.getFiles().forEach(filename -> {
                String ext = filename.substring(filename.lastIndexOf(".") + 1, filename.length());
                File diskfile = new File(filename);
                try {
                    mimeMessageHelper.addAttachment(diskfile.getName(), diskfile);
                } catch (MessagingException e) {
                    e.printStackTrace();
                    log.error("设置附件失败:{}", mailBean);
                }
            });
        }
        return mimeMessageHelper;
    }

}

创建邮箱发送工具类,进行邮箱发送:


/**
 * 邮箱发送工具类
 *
 * @author:伍梓涛
 * @version:1.0.0
 * @Modified By:SimpleWu
 * @CopyRright (c)2019-:YUM架构平台
 */
@Component
@Slf4j
public class MailHelper {

    @Autowired
    private JavaMailSender javaMailSender;

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

    private static MailHelper mailHelper;

    public MailHelper() {
        mailHelper = this;
    }

    /**
     * 构建静态获取实例
     *
     * @return
     */
    public static MailHelper buidler() {
        if (mailHelper == null) {
            return null;
        }
        return mailHelper;
    }

    /*public void sendSimpleMail(EmailContextPojo mailBean) {
        try {
            SimpleMailMessage simpleMailMessage = new SimpleMailMessage();
            //邮件发送人
            simpleMailMessage.setFrom(emailSender);
            //邮件接收人
            simpleMailMessage.setTo(mailBean.getTo());
            //邮件主题
            simpleMailMessage.setSubject(mailBean.getSubject());
            //邮件内容
            simpleMailMessage.setText(mailBean.getText());
            javaMailSender.send(simpleMailMessage);
        } catch (Exception e) {
            e.printStackTrace();
            log.error("邮件发送失败", e.getMessage());
        }
    }*/

    public void sendMail(MailEntity mailBean) {
        MimeMessage mimeMailMessage = null;
        try {
            mimeMailMessage = javaMailSender.createMimeMessage();
            MimeMessageHelper mimeMessageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBean);
            mimeMessageHelper.setFrom(emailSender);//发件人
            javaMailSender.send(mimeMailMessage);
        } catch (Exception e) {
            log.error("邮件发送失败", e.getMessage());
        }
    }

    public void sendMail(MailEntity... mailBeans) {
        //批量发送集合
        List<MimeMessage> mimeMessages = new ArrayList<>(mailBeans.length);
        try {
            if (mailBeans != null || mailBeans.length > 0) {
                for (int i = 0; i < mailBeans.length; i++) {
                    MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
                    MimeMessageHelper messageHelper = MailEntityHelper.craeteMessageHelper(mimeMailMessage, mailBeans[i]);
                    messageHelper.setFrom(emailSender);//发件人
                    mimeMessages.add(mimeMailMessage);
                }
            }

            MimeMessage[] resultMessage = new MimeMessage[mimeMessages.size()];
            mimeMessages.toArray(resultMessage);
            javaMailSender.send((resultMessage));
        } catch (Exception e) {
            log.error("邮件发送失败", e.getMessage());
        }
    }

}

在之前通过邮箱发送信息统一处理的工具类,对邮件信息实体进行封装后,这里就只需要传入对象参数即可。由于在这里使用的是SpringBoot已经封装好的,由于我们要把它当成工具类使用,每次需要注入并不方便。
所在在类中加了个静态对象,在Spring 容器实例化的时候给他初始化直接赋值给javaMailSender并且通过buidler()可以静态获取到实例对象,但是这样如果被重新创建对象后就会产生问题,所以最好在工具类中使用Spring 容器去获取 javaMailSender即可 。

发送邮件

1.发送普通邮件

 MailEntity emailContextPojo = new MailEntity();
 emailContextPojo.setSubject("Ycloud 邮箱标题");
 emailContextPojo.setText("Ycloud 邮箱正文");
 emailContextPojo.setTo(" 接收邮箱号 ");
 MailHelper.buidler().sendMail(emailContextPojo);

2.发送Html邮件

 emailContextPojo.setHtml(true);

只需要将信息实体类设置成true即可。
3.发送附件

emailContextPojo.setFiles(Arrays.asList("D:\\Yum系统架构平台\\004.高系统部署\\004.PXC\\部署手册.docx"));

只需要增加附件路径即可。
注: 请勿直接在项目中使用邮箱发送
可参考JOB实现定时发送邮件:https://www.cnblogs.com/SimpleWu/p/11341453.html
本文代码案例:https://github.com/450255266/open-doubi/tree/master/SpringBoot/email

原文地址:https://www.cnblogs.com/SimpleWu/p/11401948.html

时间: 2024-08-27 04:37:01

SpringBoot中快速实现邮箱发送的相关文章

asp.net中邮箱发送

邮箱发送今天终于解决了,从不会到会用了3个晚上才终于解决了,有好多问题都不是代码的问题,而是邮箱的设置上的问题.下面我一一的讲解一下. 1.邮箱发送的原理,我使用图片来解释 左边的[email protected]是发送的邮箱(下面我就是用a邮箱指代),右边的[email protected]是接收的邮箱(下面我就是用b邮箱指代). 1).邮箱a发送到他自己的smtp服务器上,如:邮箱a是outlook上注册的邮箱,那么邮箱a的邮件就发送到outlook上的smtp服务器上 2).通过smtp服

如何在优雅地Spring 中实现消息的发送和消费

本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个简单的示例来一步一步的讲解如何使用这个spring-boot-starter工具包来配置,发送和消费RocketMQ消息. 作者简介:辽天,阿里巴巴技术专家,Apache RocketMQ 内核控,拥有多年分布式系统研发经验,对Microservice.Messaging和Storage等领域有深刻

注册邮箱地址,1分钟快速注册邮箱账号

电子邮箱E-mail是由用户使用的网络服务器在Internet上的域名地址决定的,它的格式由用户名+域名所组成.关于注册邮箱地址的选择也是企业或各界商务人士的门面象征,更需谨慎选择br/>邮箱注册地址1市面上应用较为广泛的20年品牌,隶属于长江实业旗下及TOM集团,是常用的的@tom.com免费邮箱,支持pop3.imap协议以及多种客户端使用.设立海外独立服务器,高稳定.高全性能,同时具备稀有的免费邮箱三大客服通道. 邮箱注册地址2br/>个人收费邮箱代表,商务邮箱市场较为受捧的邮箱品牌,包

首次沟通邮箱发送技巧

您是否需要经常给一些新客户发送一些公司资料.产品介绍等? 是否遇到发送给新用户的邮件被归档到对方垃圾箱甚至被对方服务器拒收的尴尬? 本期,我们总结了一些常见的可能导致增加邮件被误判的情况,希望您了解并与新客户的沟通更加顺畅! 1. 不要选用复杂的签名: 通过企业邮箱发送商务邮件,基本都会使用到邮件签名或电子名片,并且很多用户会在签名中携带公司的各种产品介绍,网站链接,宣传图片,多种联系方式等等,但是这些都增加了邮件被收件方网关系统误判为垃圾邮件的风险,因此请在首次发信给新客户时,使用简洁的签名.

如何在MFC DLL中向C#类发送消息

如何在MFC DLL中向C#类发送消息 一. 引言 由于Windows Message才是Windows平台的通用数据流通格式,故在跨语言传输数据时,Message是一个不错的选择,本文档将描述如何在MFC DLL中向C#窗口类发送消息. 二. 实现过程 1. 新建一个基于MFC的DLL工程,在工程作用是用于生成Dll库函数: 2. 在该工程中新增一个类,CMessager: 3. 在头文件中添加代码如下: 1 #define ZS_API extern "C" _declspec (

javaMail操作QQ邮箱发送邮箱 Demo

最近用到想给项目中加一个功能,就是当项目中某些模块发生异常,在捕获异常后不仅仅写日志抛异常等!还要追加一个发送邮件给该模块的负责人,方便运维定位问题: maven管理的配置: <!-- 邮件 --> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4.7</version> </depe

[SpringBoot]深入浅出剖析SpringBoot中Spring Factories机制

微信号:GitShare微信公众号:爱折腾的稻草如有问题或建议,请在公众号留言[1] 前续 为帮助广大SpringBoot用户达到"知其然,更需知其所以然"的境界,作者将通过SpringBoot系列文章全方位对SpringBoot2.0.0.RELEASE版本深入分解剖析,让您深刻的理解其内部工作原理. 1.[SpringBoot]利用SpringBoot快速构建并启动项目 2.[SpringBoot]详解SpringBoot应用的启动过程 3.[SpringBoot]深入浅出剖析Sp

IntelliJ IDEA 2017版 spring-boot 2.0.3 邮件发送搭建,概念梳理 (一)

邮件发送功能总结        第一部分 背景 一.使用场景 (1)注册验证 注册各大网站,通常需要输入邮件地址,在注册成功后,会发送一封邮箱验证的邮件,点击确认,证明这个邮箱是用户自己的 (2)网站营销 公司运营做活动的时候,提前几天给用户发邮件,提醒老用户在活动时间参加活动. (3)安全的最后一道防线 一个网站好久不用的时候,会忘记密码,这个时候需要找回密码,很多种找回方式,最常用的找回方式就是通过邮箱找回密码. 首先,在网站输入邮箱,系统会根据注册的邮箱发送一封邮件,根据邮件中的地址,可以

Springboot中的日志管理

本案例中可以了解,怎么配置日志的输出路径,输出格式(比如说zip格式),按日期进行划分(今天的日志输出为一个文件,明天的日志输出到另一个文件),在按日期划分的同时又按文件大小划分(比如说每天的日志记录很多,希望一个日志文件为5GB...),上面的功能,看完这篇都能实现.(参考链接超有用,建议直接下拉打开链接) Slf4j 日志管理的抽象接口 Log4j,log4j2,logback,日志管理框架,日志管理实现 Springboot中pom.xml,若引入了web的起步依赖,不需要再引入日志管理相