【SpringBoot】8 发送邮件

介绍

邮件发送功能原理主要基于客户端和服务器之间的通信,‌涉及多个步骤和协议的支持,‌以确保邮件能够安全、‌可靠地传送。‌
邮箱服务器:邮件服务器是一种用来负责电子邮件收发管理的设备。
协议

  • SMTP:简单邮件传输协议,是一种提供可靠且有效的电子邮件传输的协议。是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知,端口号为25。
  • POP3:Post Office Protocol - Version 3(邮局协议版本3),是TCP/IP协议族中的一员。主要用于支持使用客户端远程管理在服务器上的电子邮件,提供了SSL加密的POP3协议称为POP3S。
  • IMAP:因特网信息访问协议,是一个应用层协议,用来从本地邮件客户端(如Microsoft Outlook、Outlook Express、Foxmail、Mozilla Thunderbird)访问远程服务器上的邮件。

流程

Java发送邮件的原理主要包括如下流程:创建Session对象,创建Message对象,设置邮件内容,设置收件人地址,创建Transport对象,连接邮箱服务器,发送邮件,关闭连接。
在这里插入图片描述在这里插入图片描述

授权码

一般用代码实现发送邮件的时候,登录邮箱服务器用的不是邮箱的密码,而是到对应的邮箱服务器获取一个授权码,代码实现时密码栏填的是授权码。

网易邮箱

点击【设置】,点击设置里面的【POP3/SMTP/IMAP】选项,点击开启【IMAP/SMTP服务】,此时会弹出一个窗口,用手机扫码发送短信即可,成功后会弹出一个显示授权码的对话框,此时需要保存该授权码,这个授权码只会显示一次。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

QQ邮箱

点击【设置】,再点击邮箱设置中的【账号】,往下拉会显示一个【POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务】,点击【管理服务】,跳到安全设置里面,点击【生成授权码】,手机扫码发送短信,成功后就获取到了授权码,只显示一次,记得保存好。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现

依赖

pom.xml

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

邮箱服务器地址

网易邮箱
    服务器地址:
        POP3服务器: pop.163.com
        SMTP服务器: smtp.163.com
        IMAP服务器: imap.163.com
    安全支持:POP3/SMTP/IMAP服务全部支持SSL连接
    
QQ邮箱
    接收邮件服务器: imap.qq.com,使用SSL,端口号993
    发送邮件服务器: smtp.qq.com,使用SSL,端口号465或587

网易邮箱

配置

application.yml

spring:
  application:
    name: system
  mail:
    host: smtp.163.com
    port: 465 #587
    username: xxx@163.com
    password: xxx #授权码
    default-encoding: UTF-8
    properties:
      mail:
        debug: true
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory

效果图

在这里插入图片描述
在这里插入图片描述

QQ邮箱

配置

application.yml

spring:
  application:
    name: system
  mail:
#    host: smtp.163.com
    host: smtp.qq.com
    port: 465 #587
#    username: xxx@163.com
    username: xxx@qq.com
    password: xxx #授权码
    default-encoding: UTF-8
    properties:
      mail:
        debug: true
        smtp:
          socketFactory:
            class: javax.net.ssl.SSLSocketFactory
          ssl:
            enable: true

效果图

在这里插入图片描述

发送邮件工具类

MailUtil.java

package com.lm.system.util;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * @Author: DuHaoLin
 * @Date: 2024/8/9
 */
@Component
public class MailUtil {

    @Resource
    private JavaMailSender mailSender;
    @Value("${spring.mail.username}")
    private String from; //发件人邮箱
    
    public void send(String to, String cc, String subject, String text) {
        SimpleMailMessage ssm = new SimpleMailMessage();
        ssm.setFrom(from);//发送者
        ssm.setTo(to);//收件人
        if(cc != null) ssm.setCc(cc);//抄送人
        ssm.setSubject(subject);//邮件主题
        ssm.setText(text);//邮件内容
        mailSender.send(ssm);//发送邮件
    }
    
}

发送邮件访问控制器

MailController.java

package com.lm.system.controller;

import com.lm.system.util.MailUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @Author: DuHaoLin
 * @Date: 2024/8/9
 */
@RestController
@Api(tags = "邮件接口")
@RequestMapping("mail")
public class MailController {

    @Resource
    private MailUtil mailUtil;

    @GetMapping("send")
    @ApiOperation("发送邮件")
    public String sendMail(@RequestParam("to") String to, @RequestParam(value = "cc", required = false) String cc, 
                           @RequestParam("subject") String subject, @RequestParam("text") String text) {
        mailUtil.send(to, cc, subject, text);
        return "发送成功";
    }

}

项目目录结构图

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值