springboot系列(十三):如何实现发送普通邮件?你一定得会|超级详细,建议收藏

Posted bug菌¹

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot系列(十三):如何实现发送普通邮件?你一定得会|超级详细,建议收藏相关的知识,希望对你有一定的参考价值。

👨‍🎓作者:bug菌

🚫特别声明:原创不易,转载请附上原文出处链接和本文声明,谢谢配合。

🙏版权声明:文章里可能部分文字或者图片来源于互联网或者百度百科,如有侵权请联系bug菌处理。

【开发云】年年都是折扣价,不用四处薅羊毛

         嗨,家人们,我是bug菌呀,我又来啦。今天我们来聊点什么咧,OK,接着为大家更《springboot零基础入门教学》系列文章吧。希望能帮助更多的初学者们快速入门!

       小伙伴们在批阅文章的过程中如果觉得文章对您有一丝丝帮助,还请别吝啬您手里的赞呀,大胆的把文章 点亮👍吧,您的点赞三连( 收藏⭐️+关注👨‍🎓+留言📃)就是对bug菌我创作道路上最好的鼓励与支持😘。时光不弃🏃🏻‍♀️,创作不停💕,加油☘️

一、前言🔥

        首先我们先来回顾上期内容:我们是把所有需要配置的准备工作都搞定了,对吧!一是qq邮箱校验码的获取,二 是pom依赖引入,三是yaml文件配置。如果有小伙伴直接中途插入,还请麻烦先去看准备篇《Springboot系列(十二):如何代码实现发送邮件提醒(准备篇)》,好伐?要不然直接开启这期跟着敲,肯定是会踩坑的。

       ok!咱们开始今天的主题吧!如何实现简单邮件发送?咱们接着往下看。

二、正文🔥

        首先我们先来定义一个builder,用来专门写邮件发送等相关的业务代码块。

/**
 * @author luoYong
 * @version 1.0
 * @date 2022/1/18 9:36
 */
@Component
public class SendMailBuild 

@Autowired
private JavaMailSender javaMailSender; 

@Autowired
private SpringTemplateEngine templateEngine;    //创建模板引擎

    //定义方法
    

        其实这么做也是为了方便日后代码维护,如果是直接进行邮件内容的赋值发送,那假如邮件发送字段增加或者字段更改,那你就只要去动这段发送方法了,基本低耦合的思想就跟你没啥关系了,再者,基本一个模块都会讲究封装、代码尽量能封装就封装,能复用就复用,前往别造成冗余代码,提高代码质量是我们在日常务必要注意的东西。这样解释就很通俗易懂了吧。

        接下来,我们再定义一个邮件消息体,用来存放发送邮件内容。

package com.example.demo.component.mail.model;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;

/**
 * 基本邮件参数
 *
 * @author luoYong
 * @version 1.0
 * @date 2022/1/18 9:37
 */
@ApiModel(value = "基本邮件参数",description = "基本邮件参数")
public class Mail 

    @ApiModelProperty("发件人邮箱账号")
    private String sendMailAccount;

    @ApiModelProperty("收件人邮箱账号")
    private String acceptMailAccount;

    @ApiModelProperty("邮件主题")
    private String theme;

    @ApiModelProperty("邮件内容")
    private String mailText;

    @ApiModelProperty("发送时间") 
    private Date sendTime = new Date(); 

    public String getTheme() 
        return theme;
    
    public void setTheme(String theme) 
        this.theme = theme;
    
    public String getSendMailAccount()  
       return sendMailAccount;
    
    public void setSendMailAccount(String sendMailAccount) 
        this.sendMailAccount = sendMailAccount;
    
    public String getAcceptMailAccount() 
        return acceptMailAccount;
    
    public void setAcceptMailAccount(String acceptMailAccount) 
        this.acceptMailAccount = acceptMailAccount;
    
    public Date getSendTime() 
        return sendTime;
    
    public void setSendTime(Date sendTime) 
        this.sendTime = sendTime;
    
    public String getMailText() 
        return mailText;
    
    public void setMailText(String mailText) 
        this.mailText = mailText;
    

       接下来,咱们就先来写一个发送邮件的方法,先实现能发送邮件功能先。

       构建邮件内容体,需要定义收发邮件人邮箱,邮件主题,邮件正文及邮件通知时间。

先看如下代码:

/**
 * 发送简单邮件
 */
public void sendSimpleMail(Mail model) 

    //构建邮件内容对象
    SimpleMailMessage msg = new SimpleMailMessage();
    //邮件发送者
    msg.setFrom(model.getSendMailAccount());
    //邮件接收者
    msg.setTo(model.getAcceptMailAccount());
    //邮件主题
    msg.setSubject(model.getTheme());
    //邮件正文
    msg.setText(model.getMailText());
    //邮件发送时间
    msg.setSentDate(model.getSendTime());
    //邮件发送
    javaMailSender.send(msg);

代码解读:

        由于Spring Boot的starter模块提供了自动化配置,在引入了spring-boot-starter-mail依赖之后,会根据配置文件中的内容去创建JavaMailSender实例,因此我们可以直接在需要使用的地方直接@Autowired来引入 JavaMailSender 邮件发送对象。即,最后你直接通过javaMailSender的send()方法即可实现邮件发送。

如上发送邮件的方法就已经定义好了,接着我们就测试一下是否邮件能发送成功吧?

        一般测试方法,建议是开个test类进行测试,比如我就字节写个test case进行测试一下。把邮件发送的前置条件都自己手动定义好,最后再调用方法

package com.example.demo.component.build;
import com.example.demo.component.mail.build.SendMailBuild;
import com.example.demo.component.mail.model.*;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import javax.mail.MessagingException;import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
class MailTest 

    @Autowired
    private SendMailBuild sendMailBuild;


    /**
     * 发送简单邮件
     */
    @Test
     void testSendSimpleMail() 

        Mail mailModel = new Mail(); 
        mailModel.setTheme("title:这是一封测试邮件哈!");// 设置邮件主题
        mailModel.setSendMailAccount("xxx@foxmail.com"); // 设置邮箱发送者
        mailModel.setAcceptMailAccount("xxx@foxmail.com"); // 设置邮件接收者,可以有多个接收者
        mailModel.setSendTime(new Date());    // 设置邮件发送日期
        mailModel.setMailText("text:这是测试邮件的正文内容:我是testMail");   // 设置邮件的正文
       
        sendMailBuild.sendSimpleMail(mailModel);
    
那怎么验证邮件算真正成功发送呢?
  • 项目代码没有任何报错信息打印
  • 邮箱收到刚发的邮件
  • 邮件内容由你发送内容一致

       以上都满足,即邮件发送功能就算真正成功了。

       接下来,就是见证奇迹的时刻到了,咱们运行testcase走起!

        完蛋!报错了啊!起不来,咋整,解决呐。这不是提示缺少ognl 的 jar 包嘛,那我们就给他导入一个试试。

如下是ognl的依赖:

<dependency>
    <groupId>ognl</groupId>
    <artifactId>ognl</artifactId>
    <version>3.1.12</version>
</dependency>

       我们再测试运行一下,哎嘿,解决了,果然是缺ognl依赖的问题。小插曲,问题不大,我们继续测试,查看下邮件是否发送成功?

        微信倒是先提醒了,接收到邮件。证明邮件发送成功了,开心。

 登录qq邮箱查看一下,看看是否正常内容显示。如下实际截图:

        这不就是我们刚test 测试发送的邮件啊,内容也是自己定义好的,控制台也没有任何报错,这就表明,发送邮件功能没有问题,可以上线生产环境。

     ... ...

        ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看我的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬的。好啦,咱们下期见~

三、往期推荐🔥

     ... ...

四、文末🔥

        如果还想要学习更多,小伙伴们可关注bug菌专门为大家创建的专栏《springboot零基础入门教学》,从无到有,从零到一!希望能帮助到更多小伙伴们。

【开发云】年年都是折扣价,不用四处薅羊毛

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

        最后送大家两句我很喜欢的话,与诸君共勉!


☘️做你想做的人,没有时间限制,只要愿意,什么时候都可以start。

🍀你能从现在开始改变,也可以一成不变,这件事,没有规矩可言,你可以活出最精彩的自己。


​​​

💌如果文章对您有所帮助,就请留下您的吧!(#^.^#);

💝如果喜欢bug菌分享的文章,就请给bug菌点个关注吧!(๑′ᴗ‵๑)づ╭❤~;

💗如果对文章有任何疑问,还请文末留言或者加群吧;

💞鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复参与讨论(请勿发表攻击言论,谢谢);

💕版权声明:原创不易,转载请附上原文出处链接和本文声明,版权所有,盗版必究!!!谢谢。

以上是关于springboot系列(十三):如何实现发送普通邮件?你一定得会|超级详细,建议收藏的主要内容,如果未能解决你的问题,请参考以下文章

springboot系列(二十三):如何实现Excel文件导入?这你得会 | 超级详细,建议收藏

springboot系列(二十三):如何实现Excel文件导入?这你得会 | 超级详细,建议收藏

springboot系列(二十三):如何实现Excel文件导入?这你得会 | 超级详细,建议收藏

《SpringBoot系列十三》:图文精讲@Conditional条件装配实现原理

Springboot系列(三十三):Springboot如何手动连接库并获取指定表结构|超级详细,建议收藏

Springboot系列(三十三):Springboot如何手动连接库并获取指定表结构|超级详细,建议收藏