SpringBoot整合JavaMail发送邮件

一提到springboot整合,我们应该可以想到哪几个步骤。

无非就是

!导入要整合的jar包依赖

!在springboot中作配置

!然后操作

!测试

下面我们就按照这个套路来就行了

1.首先导入springboot整合javamail的坐标依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.6.6</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.hb</groupId>
    <artifactId>springboot2-mail</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot2-mail</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
<!--  这个就是我们要导入的坐标-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

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

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

2.下面就是我们配置相关的信息

spring:
  mail:
    host: smtp.qq.com
    username: xxxxxxxxxx@qq.com
    password: **************

下面这里我就要说明一下了,为了防止我的信息泄露这个我给大家解释一下

host:这个属性就是你要用那个邮箱,我这个用的qq邮箱发送的。如果你想用123邮箱,只要改成什smtp.123.com

username:这个属性就是你你要用哪个账号进行发送,这里我们就以qq邮箱发送为例,所以这个就是填写你的你要进行发送的qq邮箱

password:这个属性你可不要以为是你自己的账号密码;这个是由邮件服务器通过加密生成的一个授权码;

上面两个属性我们很好获取。那么这个password要如何获取呢 别着急其实很简单

首先我们打开qq邮箱先进入设置-》帐户页面找到入口,按照以下流程操作。

 这时我们的配置基本完成了;

3.下面就是操作客户端了

首先你要明白我们现在在做的是什么?它不就是个业务吗

所以我们只需要创建一个业务层就可以了,这里的业务暂时用不到数据层

下面我们开始编写业务层接口,再是创建业务层的实现类

下面我们就可以进行操作了

首先我们既然已经对JavaMail进行了整合那么我们就可以直接将这个类注入了

@Service
public class sendMailServiceImpl implements sendMailService{
    @Autowired
    //注入这个类 我们springboot此时已经整合了JavaMail 可以直接注入进行发送邮件的操作
    private JavaMailSender javaMailSender;

接下来就是我们就可以发送邮件了

  //利用这个方法发送邮件
        javaMailSender.send(message);

这样我们就可以发送邮件了,这个message我们同样也要创建出来

 //利用这个类来配置发送邮件的信息
        SimpleMailMessage message =new SimpleMailMessage();

我们这个实现是是一个简单的邮件发送

现在大家可以思考一下了,你在平时进行发送邮件是如何发送的

我们是不是要有收件人,标题,正文啊,同样我们还要有发件人。

所以你说你在使用第三方客户端发送时需不需要这些信息。答案是肯定的啊

下面我们就定义这个四个信息

  //发送人
private   String from="xxxxxxxxqq.com";
    //接收人
    private  String to="xxxxxxxqq.com";
    //标题
    private  String subject="一个简单邮件";
    //正文
    private  String context="这是个简单邮件";

同样这个为了隐私保护你们懂的

下面我们只需要进行配置就OK了

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

是不是很方便,我们刚才定义的,他这个提供的都有对应的配置

完整的业务代码如下

@Service
public class sendMailServiceImpl implements sendMailService{
    @Autowired
    //注入这个类 我们springboot此时已经整合了JavaMail 可以直接注入进行发送邮件的操作
    private JavaMailSender javaMailSender;

   //发送人
private   String from="xxxxxxxxqq.com";
    //接收人
    private  String to="xxxxxxxqq.com";
    //标题
    private  String subject="一个简单邮件";
    //正文
    private  String context="这是个简单邮件";

    @Override
    public void sendMail() {
        //利用这个类来配置发送邮件的信息
        SimpleMailMessage message =new SimpleMailMessage();
        message.setFrom(from);
        message.setTo(to);
        message.setSubject(subject);
        message.setText(context);


        //利用这个方法发送邮件
        javaMailSender.send(message);


    }
}

好了现在我们只需要下一步测试环节了

@SpringBootTest
class Springboot2MailApplicationTests {
    @Autowired
private sendMailServiceImpl sendMailService;
    @Test
    void contextLoads() {
        sendMailService.sendMail();
    }
}

 好了可以看到我们运行成功。这是只需要去邮箱中进行查收就OK了。

下面大家就可以动手操作一下了

那么很多小伙伴又要问了,我平时发邮件还可以发送附件呢,其实我们同样也可以,不但可以发送附件,它还可以识别html的一些操作

接下来就为大家再扩展一下多部件的邮件发送

操作和我们刚刚简单邮件的发送一模一样

只要改动我们业务层的代码就可以了。这里我们再创建一个多部件邮件发送的方法

和简单邮件不一样的时这里的messag我们要用  MimeMessage ,代表你要发送的邮件是多部件邮件

然后我们要利用

  MimeMessageHelper helper = new MimeMessageHelper(message,true);

去设置邮件了

这个操作还是和简单邮件比较类似的

    MimeMessage message = javaMailSender.createMimeMessage();
            //再使用这个api设置邮件
            //这里true代表你要发附件邮件,只要这里为true才可以发文件
            MimeMessageHelper helper = new MimeMessageHelper(message,true);

首先给大家讲解如何在正文中识别html标签。我们可以发送一个链接,和一个图片通过网络路径

我们找到刚刚配置Text的方法

按着ctrl+B就可以进入这个方法内部

 可以看到这个方法的参数中有个boolean html 的参数 相信聪明的小伙伴已经明白了

这个就是是否开启识别html标签

我们只要在

 helper.setText(context,true);//这个含义是识别html的标签

添加一个true就可以了

在正文中

  private  String context="你爱不爱PlayBoy"+"<a href='https://www.bilibili.com/video/BV1TM4y1w7kc?spm_id_from=333.337.search-card.all.click'>点开有惊喜</a>";

写上这个链接的标签就可以了

然后在测试类中测试

@SpringBootTest
class Springboot2MailApplicationTests {
    @Autowired
private sendMailServiceImpl sendMailService;
 
    @Test
    void test() {
     sendMailService.sendMimeMail();
    }
}

效果图

 你点开链接就可以进行跳转了

我们同样也可以发送附件

我们按ctrl+B进入     MimeMessageHelper helper = new MimeMessageHelper(message,true);

 我们可以看到true就代表着是否开启多部件的发送

下面我们就可以创建文件然后利用helper进行配置了

 //发送本地文件也是可以
            File file=new File("D:\\idea_place\\work\\springboot2-mail\\target\\springboot2-mail-0.0.1-SNAPSHOT.jar");
            File file1=new File("D:\\idea_place\\work\\springboot2-mail\\src\\main\\java\\com\\hb\\img\\s2.jpg");
            //利用这个方法将文件作为附件发过去
            helper.addAttachment(file.getName(),file);
            helper.addAttachment("海景图.png",file1);

这样我们就完成了

再次进行测试就ok了

这就是发送成功后的效果图

这部分的完整代码也给你们

 //实现发送多部件邮件
    @Override
    public void sendMimeMail() {

        try {
            //再利用javaMailsender创建一个多部件的邮件
            MimeMessage message = javaMailSender.createMimeMessage();
            //再使用这个api设置邮件
            //这里true代表你要发附件邮件,只要这里为true才可以发文件
            MimeMessageHelper helper = new MimeMessageHelper(message,true);
            helper.setFrom(from+"(鹿晗)");
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(context,true);//这个含义是识别html的标签
            //发送本地文件也是可以
            File file=new File("D:\\idea_place\\work\\springboot2-mail\\target\\springboot2-mail-0.0.1-SNAPSHOT.jar");
            File file1=new File("D:\\idea_place\\work\\springboot2-mail\\src\\main\\java\\com\\hb\\img\\s2.jpg");
            //利用这个方法将文件作为附件发过去
            helper.addAttachment(file.getName(),file);
            helper.addAttachment("海景图.png",file1);


            javaMailSender.send(message);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

现在你就可以自己动手去操作了;

谢谢你阅读,请多多关注我。一个在校大二大学生,如果有些地方不够严谨还请多多包含;你也可以私信我一起交流学习。谢谢大家!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值