Gmail 两步验证+应用专用密码登录

1、为什么做这个?

如果需要使用Gmail作为应用程序的邮件发送者,必须进行相关配置,否则不能直接使用

2、怎么做?

谷歌邮箱(@gmail.com):两步验证+应用专用密码登录 - 来发信 - 您的外贸拓客好帮手

2.1、登录谷歌账号:https://myaccount.google.com/u/6/signinoptions/two-step-verification/enroll-welcome?gar=1

2.2、应用专用密码设置入口:https://myaccount.google.com/u/6/apppasswords?gar=1

3、java 应用中如何使用Gmail可以参考如下:

SPRING BOOT发送邮件验证码(Gmail邮箱)_spring-boot-starter-mail gmail配置-CSDN博客

4、如何支持多个发送邮箱配置

4.1、定义一个配置类

java 复制代码
import cn.hutool.core.text.CharSequenceUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;

import java.util.Properties;

/**
 * @author : qinjinyuan
 * @desc : TODO  请填写你的功能描述
 * @date : 2024/06/03 13:36
 */
@Configuration
public class EmailSenderConfig {
    @Value("${gmail.host}")
    private String gmailHost;
    @Value("${gmail.port}")
    private Integer gmailPort;
    @Value("${gmail.username}")
    private String gmailUsername;
    @Value("${gmail.password}")
    private String gmailPassword;
    @Value("${gmail.protocol}")
    private String gmailProtocol;
    @Autowired
    private EmailNormalConfig emailNormalConfig;

    @Bean("gmailSender")
    public JavaMailSenderImpl gmailSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost(gmailHost);
        mailSender.setPort(gmailPort);
        mailSender.setUsername(gmailUsername);
        mailSender.setPassword(gmailPassword);
        mailSender.setProtocol(gmailProtocol);

        Properties properties = new Properties();
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");
        mailSender.setJavaMailProperties(properties);
        return mailSender;
    }

    @Bean("otherSender")
    public JavaMailSenderImpl otherSender() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setHost(emailNormalConfig.getHost());
        mailSender.setPort(emailNormalConfig.getPort());
        mailSender.setUsername(emailNormalConfig.getUsername());
        mailSender.setPassword(emailNormalConfig.getPassword());
        if (CharSequenceUtil.isNotBlank(emailNormalConfig.getProtocol())) {
            mailSender.setProtocol(emailNormalConfig.getProtocol());
        }
        return mailSender;
    }

4.2、定义原生配置 EmailNormalConfig

java 复制代码
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;

/**
 * @author : qinjinyuan
 * @date : 2023/10/31 16:51
 */
@Configuration
@RefreshScope
@ConfigurationProperties(prefix = "spring.mail")
@Getter
@Setter
public class EmailNormalConfig {
    private String host;
    private Integer port;
    private String username;
    private String password;
    private String from;
    private String protocol;
}

4.3、如何用,也可以自己写策略模式进行实现

java 复制代码
import org.springframework.mail.javamail.JavaMailSender;

@Resource(name = "otherSender")
    private JavaMailSender mailSender;

或者
 @Resource(name = "gmailSender")
private JavaMailSender mailSender;

4.4、设计类图

小结:

主要描述gmail 作为客户端发送者,关键性步骤的申请和设置 (找了好长时间,才找到具体的设置页面,官网都没有直接的入口);

另外分享了如何进行多个邮箱发送者之间的切换及设计思路。

相关推荐
x-Achan5 分钟前
Redis实现方案:更新策略、穿透、雪崩、击穿、工具封装
java·spring boot·redis·spring·bootstrap·mybatis
蜗牛互联网21 分钟前
Java 17调用gpt-transcribe实现会议录音转写与术语提示
java·人工智能·后端
吠品28 分钟前
DicomViewer24 的 CI 又红了:MPR 测试偶发失败排查记
java·服务器·前端
Wang's Blog36 分钟前
Java 项目实战: 外卖平台优化-Nginx概述与源码编译安装
java·开发语言·nginx
Eason_LYC36 分钟前
一个公开密钥放倒一片:Apache Shiro RememberMe 反序列化漏洞
java·网络安全·渗透测试·shiro·漏洞复现·反序列化·ai安全
ym hyd 1119 小时前
试题库管理系统源码 Java+SpringBoot+Vue3 前后分离
java·vue.js·spring boot·毕设
AC赳赳老秦9 小时前
采集行为合规自检:OpenClaw 自动校验 robots 协议与采集频率,规避违规采集风险
java·开发语言·c++·python·php·deepseek·openclaw
钱栈up9 小时前
mvn compile 卡死在 javac 阶段:一次类型不匹配的排查与修复
java·开发语言
吠品11 小时前
CSS图片模糊过渡:一个transition加filter就够
java·数据库·notepad++
步行cgn11 小时前
Spring 全注解开发详解
java·后端·spring