java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > JavaMail API原生邮箱发送

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

作者:长路 ㅤ

文章介绍了如何使用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原生邮箱发送内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文