SpringBoot整合邮箱发送邮件

目录

一、加入依赖

二、在工具包中(util)添加发送邮件的工具类(EmailUtil)

三、在yml文件中添加配置(application.yml)

四、在测试类中测试(TestEmail)

五:获取邮箱授权码


一、加入依赖

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

二、在工具包中(util)添加发送邮件的工具类(EmailUtil

package cn.com.fanjingxuan.util;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
import java.io.File;

/**
 * @ClassName EmailUtil
 * @Description 邮件发送工具
 * @Author Sophia
 * @Date 2022/4/6 16:06
 */
@Component
public class EmailUtil {

    @Value("${spring.mail.from}") // 从application.yml配置文件中获取
    private  String from; // 发送发邮箱地址

    //当我们在使用@Autowired注解的时候,默认required=true,表示注入的时候bean必须存在,否则注入失败。
    //解决方案:在自动转配的注解后面添加(required=false)
    @Autowired(required=false)
    private  JavaMailSenderImpl mailSender;

    /**
     * 发送纯文本邮件信息
     *
     * @param to      接收方
     * @param subject 邮件主题
     * @param content 邮件内容(发送内容)
     */
    public  void sendMessage(String to, String subject, String content) {
        // 创建一个邮件对象
        SimpleMailMessage msg = new SimpleMailMessage();
        msg.setFrom(from); // 设置发送发
        msg.setTo(to); // 设置接收方
        msg.setSubject(subject); // 设置邮件主题
        msg.setText(content); // 设置邮件内容
        // 发送邮件
        System.out.println("123-----------");
        mailSender.send(msg);
    }

    /**
     * 发送带附件的邮件信息
     *
     * @param to      接收方
     * @param subject 邮件主题
     * @param content 邮件内容(发送内容)
     * @param files   文件数组 // 可发送多个附件
     */
    public void sendMessageCarryFiles(String to, String subject, String content, File[] files) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(from); // 设置发送发
            helper.setTo(to); // 设置接收方
            helper.setSubject(subject); // 设置邮件主题
            helper.setText(content); // 设置邮件内容
            if (files != null && files.length > 0) { // 添加附件(多个)
                for (File file : files) {
                    helper.addAttachment(file.getName(), file);
                }
            }
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        // 发送邮件
        mailSender.send(mimeMessage);
    }

    /**
     * 发送带附件的邮件信息
     *
     * @param to      接收方
     * @param subject 邮件主题
     * @param content 邮件内容(发送内容)
     * @param file    单个文件
     */
    public void sendMessageCarryFile(String to, String subject, String content, File file) {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        try {
            MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
            helper.setFrom(from); // 设置发送发
            helper.setTo(to); // 设置接收方
            helper.setSubject(subject); // 设置邮件主题
            helper.setText(content); // 设置邮件内容
            helper.addAttachment(file.getName(), file); // 单个附件
        } catch (MessagingException e) {
            e.printStackTrace();
        }
        // 发送邮件
        mailSender.send(mimeMessage);
    }

    public String getFrom() {
        return from;
    }

    public void setFrom(String from) {
        this.from = from;
    }
}

三、在yml文件中添加配置(application.yml

spring: #在spring下级
  mail: # 邮件发送配置
    host: smtp.qq.com  #服务器地址
    port: 587     #服务器的端口号
    username: 576534286@qq.com  # 发送方 邮箱账号
    password: aldvjkngwmztbb  # 邮箱 授权码(邮箱申请)
    default-encoding: UTF-8    # 编码
    properties:
      mail:
        smtp:
          socketFactoryClass: javax.net.ssl.SSLSocketFactory
        debug: true
    from: wingline@foxmail.com  # 发送方 第二邮箱

四、在测试类中测试(TestEmail

        注意:测试类要放在邮件工具类的同级目录下

package cn.com.fanjingxuan.util;

import org.junit.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;


@SpringBootTest
@RunWith(SpringRunner.class)
public class TestEmail {

    @Autowired
    protected EmailUtil emailUtil;

    @Test
    public void testEmail(){// 设置接收者邮箱
        String toCreator = "13373393281@163.com";
        //设置邮件标题
        String title = "邮箱登录验证码(A33智慧排班系统)";
        for (int i = 0; i < 1; i++) {
            //生成验证码
            String num = VerificationCodeUtil.generateCheckCode1(20);
            System.out.println(num);
            //发送邮件
            emailUtil.sendMessage(toCreator, title, num);
            System.out.println("===============================================");
            System.out.println("第 "+(i+1)+" 次发送成功!");
            System.out.println("===============================================");
        }
    }
}

 五:获取邮箱授权码

  • 获取QQ邮箱授权码(QQ邮箱-设置-账户-POP3/SMTP服务开启,发送短信即可获取,记得保存好)
  • 获取网易邮箱授权码(网易邮箱-设置-“POP3/SMTP/IMAP”-开启”(IMAP/SMTP服务)- 弹出“帐号安全验证” ,用手机扫码发送短信,并点击“我已发送”-验证后获取客户端授权密码)

电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行邮件传递,那就必须要遵守一定的规则,这个规则就是邮件传输协议。下面我们分别简单介绍几种协议:

 什么是SMTP?

        SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免用户受到垃圾邮件的侵扰。

什么是IMAP?

        IMAP全称为Internet Message Access Protocol(互联网邮件访问协议),IMAP允许从邮件服务器上获取邮件的信息、下载邮件等。IMAP与POP类似,都是一种邮件获取协议。

什么是POP3?

        POP3全称为Post Office Protocol 3(邮局协议),POP3支持客户端远程管理服务器端的邮件。POP3常用于“离线”邮件处理,即允许客户端下载服务器邮件,然后服务器上的邮件将会被删除。目前很多POP3的邮件服务器只提供下载邮件功能,服务器本身并不删除邮件,这种属于改进版的POP3协议。

IMAP和POP3协议有什么不同呢?

         两者最大的区别在于,IMAP允许双向通信,即在客户端的操作会反馈到服务器上,例如在客户端收取邮件、标记已读等操作,服务器会跟着同步这些操作。而对于POP协议虽然也允许客户端下载服务器邮件,但是在客户端的操作并不会同步到服务器上面的,例如在客户端收取或标记已读邮件,服务器不会同步这些操作。

邮件服务器:

        用户要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器。这些邮件服务器就类似于现实生活中的邮局,它主要负责接收用户投递过来的邮件,并把邮件投递到邮件接收者的电子邮箱中。邮件服务器就好像是互联网世界的邮局。

按照功能划分,邮件服务器可以划分为两种类型:

  • SMTP邮件服务器:用户替用户发送邮件和接收外面发送给本地用户的邮件。
  • POP3/IMAP邮件服务器:用户帮助用户读取SMTP邮件服务器接收进来的邮件。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值