Java使用JavaMail API实现原生邮箱发送功能的方法

 更新时间:2026年02月26日 09:41:24   作者:长路 ㅤ  
文章介绍了如何使用JavaMailAPI在Java后端实现原生邮箱发送功能,包括配置邮件服务器、获取校验码以及解决SSL握手异常的问题,需要的朋友可以参考下

前言

涵盖技术内容:Java后端、大数据、算法、分布式微服务、中间件、前端、运维等。

原生集成邮箱实现

引入pom.xml

邮件发送借助javax.mail工具类

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

前提配置

1、163、新浪邮箱不需要 SSL 加密,QQ 邮箱需要 SSL 加密,在下面实现中开启了SSL加密。

2、若是想要发送邮件得需要先登陆到对应的邮件服务器,那么必不可少的就是校验码,如何获取校验码如下:

设置-开启,根据如下开启指示开启即可获取校验码:

功能实现

package com.dtstack.knowledge.ai.server.util;

import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;

/**
 * @ClassName MailUtil
 * @Author ChangLu
 * @Date 2022/1/25 18:28
 * @Description TODO
 */
public class MailUtil {

    public static void main(String[] args) throws Exception {
        sendQQMail("939974883@qq.com", "changlu@dtstack.com", "sdfdsfdsdfds");
    }

    private static SimpleDateFormat DATE_FORMAT_TOOL = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    /**
     * 向指定qq发送邮件
     * @param FROM 发送者qq
     * @param to 接受者qq
     * @param code 发送者qq的授权码(需要去qq邮箱进行授权)
     * @throws Exception
     */
    public static void sendQQMail(String FROM, String TO, String code) throws Exception {
        Properties props = new Properties();

        // 开启debug调试
        props.setProperty("mail.debug", "true");
        // 发送服务器需要身份验证
        props.setProperty("mail.smtp.auth", "true");
        // 设置邮件服务器主机名
        props.setProperty("mail.host", "smtp.qq.com");
        // 发送邮件协议名称
        props.setProperty("mail.transport.protocol", "smtp");

        // 针对 JDK 17 的 SSL 协议配置
        props.setProperty("mail.smtp.ssl.protocols", "TLSv1.2");

        //开启SSL加密
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        props.put("mail.smtp.ssl.enable", "true");
        props.put("mail.smtp.ssl.socketFactory", sf);

        Session session = Session.getInstance(props);

        //消息对象配置信息
        Message msg = new MimeMessage(session);
        //设置标题名称
        msg.setSubject("测试");
        StringBuilder builder = new StringBuilder();
        builder.append("\n " + "<h1>欢迎你加入智蜂工作室!</h1>");
        builder.append("\n时间 " + DATE_FORMAT_TOOL.format(new Date()));
        //设置短信内容(setContent可以设置发送内容的类型格式)
        msg.setContent(builder.toString(), "text/html;charset=UTF-8");
        msg.setFrom(new InternetAddress(FROM));//发送人的邮箱地址

        //进行连接
        Transport transport = session.getTransport();
        transport.connect("smtp.qq.com", FROM, code);
        transport.sendMessage(msg, new Address[] { new InternetAddress(TO) });//接收人的邮箱地址
        transport.close();
    }


}

效果:

问题解决

报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

解决方式:

补充配置项参数:

// 针对 JDK 17 的 SSL 协议配置
props.setProperty("mail.smtp.ssl.protocols", "TLSv1.2");

到此这篇关于Java使用JavaMail API实现原生邮箱发送功能的方法的文章就介绍到这了,更多相关JavaMail API原生邮箱发送内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Maven项目改为spring boot项目的方法图解

    Maven项目改为spring boot项目的方法图解

    这篇文章主要介绍了Maven项目改为spring boot项目的方法图解 ,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • 解决IDEA中pom.xml文件变为灰色的问题

    解决IDEA中pom.xml文件变为灰色的问题

    这篇文章主要给大家介绍了如何解决IDEA中pom.xml文件变为灰色的问题,文中通过图文结合给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-12-12
  • 解决java junit单元测试@Test报错的问题

    解决java junit单元测试@Test报错的问题

    今天小编就为大家分享一篇解决java junit单元测试@Test报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • Spring中的三级缓存使用及说明

    Spring中的三级缓存使用及说明

    文章介绍了Spring框架中循环依赖的问题,包括循环依赖的定义、常见场景和解决方法,构造器注入的循环依赖无法解决,而field属性注入(setter方法注入)循环依赖可以解决,Spring通过“三级缓存”机制来解决循环依赖问题,其中singletonFactories是关键
    2025-11-11
  • EasyCode整合mybatis-plus的配置详解

    EasyCode整合mybatis-plus的配置详解

    本文主要介绍了EasyCode整合mybatis-plus的配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-09-09
  • java 排序算法之快速排序

    java 排序算法之快速排序

    这篇文章主要介绍了java 排序算法之快速排序,文中通过图片和代码讲解相关知识非常详细,大家如果有需要的话可以参考一下这篇文章
    2021-09-09
  • springboot整合Quartz实现动态配置定时任务的方法

    springboot整合Quartz实现动态配置定时任务的方法

    本篇文章主要介绍了springboot整合Quartz实现动态配置定时任务的方法,非常具有实用价值,需要的朋友可以参考下
    2017-10-10
  • Java CAS机制详解

    Java CAS机制详解

    这篇文章主要介绍了Java CAS机制,CAS机制是一种数据更新的方式。在具体讲什么是CAS机制之前,我们先来聊下在多线程环境下,对共享变量进行数据更新的两种模式:悲观锁模式和乐观锁模式
    2023-01-01
  • SpringBoot将Spring fox更换为Springdoc的方法详解

    SpringBoot将Spring fox更换为Springdoc的方法详解

    由于项目中使用Spring fox已经不维护更新了,代码扫描,扫出问题,需要将Spring fox更换为Spring Doc,所以本文给大家介绍了SpringBoot将Spring fox更换为Springdoc的方法,文中有相关的代码供大家参考,需要的朋友可以参考下
    2024-01-01
  • 一篇文章带你入门java变量与类型

    一篇文章带你入门java变量与类型

    这篇文章主要给大家介绍了关于Java基本知识点之变量和数据类型的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08

最新评论