Java使用JavaMail API实现原生邮箱发送功能的方法
前言
涵盖技术内容: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原生邮箱发送内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
springboot整合Quartz实现动态配置定时任务的方法
本篇文章主要介绍了springboot整合Quartz实现动态配置定时任务的方法,非常具有实用价值,需要的朋友可以参考下2017-10-10
SpringBoot将Spring fox更换为Springdoc的方法详解
由于项目中使用Spring fox已经不维护更新了,代码扫描,扫出问题,需要将Spring fox更换为Spring Doc,所以本文给大家介绍了SpringBoot将Spring fox更换为Springdoc的方法,文中有相关的代码供大家参考,需要的朋友可以参考下2024-01-01


最新评论