Java Mail:在没有 SSL 的情况下在端口 25 上发送电子邮件时出现 SSLHandshakeException

2023-12-14

尽管我尝试在不使用 SSL 的情况下在端口 25 上发送电子邮件,但我收到了 SSLHandshakeException。下面您可以看到 javax.mail.Session 和 SSLHandshakeException 打印的调试消息。

你能帮我理解发生了什么事吗?



22 Dec 2009 15:13:21,054  INFO root:197 - DEBUG: setDebug: JavaMail version 1.4ea
22 Dec 2009 15:13:21,059  INFO root:197 - DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
22 Dec 2009 15:13:21,103  INFO root:197 - DEBUG SMTP: useEhlo true, useAuth false
22 Dec 2009 15:13:21,103  INFO root:197 - DEBUG SMTP: trying to connect to host "mail.abcdef.com", port 25, isSSL false
22 Dec 2009 15:13:21,338  INFO root:197 - 220 mail.uvwxyz.com ESMTP abcdef Mail Server v8.0; Tue, 22 Dec 2009 15:12:10 -0700
22 Dec 2009 15:13:21,338  INFO root:197 - DEBUG SMTP: connected to host "mail.abcdef.com", port: 25
22 Dec 2009 15:13:21,342  INFO root:197 - EHLO fsb160
22 Dec 2009 15:13:21,383  INFO root:197 - 250-mail.uvwxyz.com Hello fsb160 [65.124.157.54], pleased to meet you.
250-ENHANCEDSTATUSCODES
250-SIZE
250-EXPN
250-ETRN
250-ATRN
250-DSN
250-CHECKPOINT
250-8BITMIME
250-AUTH CRAM-MD5 DIGEST-MD5 LOGIN PLAIN
250-AUTH=LOGIN
250-STARTTLS
250 HELP
22 Dec 2009 15:13:21,383  INFO root:197 - DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
22 Dec 2009 15:13:21,383  INFO root:197 - DEBUG SMTP: Found extension "SIZE", arg ""
22 Dec 2009 15:13:21,384  INFO root:197 - DEBUG SMTP: Found extension "EXPN", arg ""
22 Dec 2009 15:13:21,384  INFO root:197 - DEBUG SMTP: Found extension "ETRN", arg ""
22 Dec 2009 15:13:21,384  INFO root:197 - DEBUG SMTP: Found extension "ATRN", arg ""
22 Dec 2009 15:13:21,384  INFO root:197 - DEBUG SMTP: Found extension "DSN", arg ""
22 Dec 2009 15:13:21,385  INFO root:197 - DEBUG SMTP: Found extension "CHECKPOINT", arg ""
22 Dec 2009 15:13:21,385  INFO root:197 - DEBUG SMTP: Found extension "8BITMIME", arg ""
22 Dec 2009 15:13:21,385  INFO root:197 - DEBUG SMTP: Found extension "AUTH", arg "CRAM-MD5 DIGEST-MD5 LOGIN PLAIN"
22 Dec 2009 15:13:21,385  INFO root:197 - DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
22 Dec 2009 15:13:21,386  INFO root:197 - DEBUG SMTP: Found extension "STARTTLS", arg ""
22 Dec 2009 15:13:21,386  INFO root:197 - DEBUG SMTP: Found extension "HELP", arg ""
22 Dec 2009 15:13:21,389  INFO root:197 - STARTTLS
22 Dec 2009 15:13:21,430  INFO root:197 - 220 2.0.0 Ready to start TLS
22 Dec 2009 15:13:21,809  INFO root:197 - EHLO fsb160
22 Dec 2009 15:13:21,886  WARN E:314 - Failed to send email
javax.mail.MessagingException: Can't send command to SMTP host;
  nested exception is:
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1420)
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1408)
    at com.sun.mail.smtp.SMTPTransport.ehlo(SMTPTransport.java:847)
    at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:384)
    at javax.mail.Service.connect(Service.java:275)
    at javax.mail.Service.connect(Service.java:156)
    at java.lang.Thread.run(Unknown Source)
Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
    at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
    at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(Unknown Source)
    at com.sun.net.ssl.internal.ssl.AppOutputStream.write(Unknown Source)
    at com.sun.mail.util.TraceOutputStream.write(TraceOutputStream.java:101)
    at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
    at java.io.BufferedOutputStream.flush(Unknown Source)
    at com.sun.mail.smtp.SMTPTransport.sendCommand(SMTPTransport.java:1418)
    ... 7 more
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(Unknown Source)
    at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
    at sun.security.validator.Validator.validate(Unknown Source)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(Unknown Source)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
    at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
    ... 19 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
    at java.security.cert.CertPathBuilder.build(Unknown Source)
    ... 25 more
  

用于创建会话并连接到服务器的代码:



Session session = EmailUtilities.createSession(smtpServer, smtpPort, smtpSSL, smtpAuthentication);

Transport transport = session.getTransport();
transport.connect(smtpServer, smtpUser, smtpPassword);

try {
    MimeMessage message = EmailUtilities.createMessage(Main.APPLICATION_NAME + " " + Main.APPLICATION_VERSION, session, to, from, subject, body, attachmentName, attachment, "application/pdf");
    transport.sendMessage(message, message.getAllRecipients());
} catch (Exception e) {
    throw new Exception(e);
} finally {
    transport.close();
}


public static Session createSession(String smtpServer, Integer smtpPort, boolean ssl, boolean authenticate) {
    String protocol = "smtp"; //$NON-NLS-1$
    if (ssl) {
    protocol = "smtps"; //$NON-NLS-1$
    }

    // -- Attaching to default Session, or we could start a new one --
    Properties props = new Properties();
    props.put("mail.transport.protocol", protocol);
    props.put("mail." + protocol + ".host", smtpServer);
    props.put("mail." + protocol + ".port", smtpPort.toString());
    props.put("mail." + protocol + ".starttls.enable", Boolean.TRUE.toString());

    if (authenticate) {
        props.put("mail." + protocol + ".auth", Boolean.TRUE.toString());
    }

    Session session = Session.getDefaultInstance(props, null);
    session.setDebug(true);

    return session;
}
  

确保您尚未在属性中启用 starttls (mail.smtp.starttls.enable=true)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Mail:在没有 SSL 的情况下在端口 25 上发送电子邮件时出现 SSLHandshakeException 的相关文章

  • 热重载在docker中运行的java程序

    我开发了一个java程序 应该在docker中运行 然而 我在调试docker中运行的java程序时遇到了很多痛苦 我在网上搜索 一些教程提出了像 spring dev tools 这样的工具 因为我的java程序是基于spring boo
  • Java程序中的数组奇怪的行为[重复]

    这个问题在这里已经有答案了 我遇到了这个 Java 程序及其以意想不到的方式运行 以下程序计算 int 数组中元素对之间的差异 import java util public class SetTest public static void
  • 如何测试 JUnit 测试的 Comparator?

    我需要测试 Compare 方法 但我对如何测试感到困惑 我可以看看该怎么做吗 public class MemberComparator implements Comparator
  • JNI 不满意链接错误

    我想创建一个简单的 JNI 层 我使用Visual studio 2008创建了一个dll Win 32控制台应用程序项目类型 带有DLL作为选项 当我调用本机方法时 出现此异常 Exception occurred during even
  • 如何查找 Android 设备中的所有文件并将它们放入列表中?

    我正在寻求帮助来列出 Android 外部存储设备中的所有文件 我想查找所有文件夹 包括主文件夹的子文件夹 有办法吗 我已经做了一个基本的工作 但我仍然没有得到想要的结果 这不起作用 这是我的代码 File files array file
  • 如何为 Gson 编写自定义 JSON 反序列化器?

    我有一个 Java 类 用户 public class User int id String name Timestamp updateDate 我收到一个包含来自 Web 服务的用户对象的 JSON 列表 id 1 name Jonas
  • jdbc4.MySQLSyntaxErrorException:数据库中不存在表

    我正在使用 SpringBoot 开发一个网络应用程序 这是我的application properties文件来指定访问数据库的凭据 spring datasource driverClassName com mysql jdbc Dri
  • 检查 Android 手机上的方向

    如何查看Android手机是横屏还是竖屏 当前配置用于确定要检索的资源 可从资源中获取Configuration object getResources getConfiguration orientation 您可以通过查看其值来检查方向
  • 反思 Groovy 脚本中声明的函数

    有没有一种方法可以获取 Groovy 脚本中声明的函数的反射数据 该脚本已通过GroovyShell目的 具体来说 我想枚举脚本中的函数并访问附加到它们的注释 Put this到 Groovy 脚本的最后一行 它将作为脚本的返回值 a la
  • 尝试使用 Ruby Java Bridge (RJB) gem 时出现错误“无法创建 Java VM”

    我正在尝试实现 Ruby Java Bridge RJB gem 来与 JVM 通信 以便我可以运行 Open NLP gem 我在 Windows 8 上安装并运行了 Java 所有迹象 至少我所知道的 都表明 Java 已安装并可运行
  • Java直接内存:在自定义类中使用sun.misc.Cleaner

    在 Java 中 NIO 直接缓冲区分配的内存通过以下方式释放 sun misc Cleaner实例 一些比对象终结更有效的特殊幻像引用 这种清洁器机制是否仅针对直接缓冲区子类硬编码在 JVM 中 或者是否也可以在自定义组件中使用清洁器 例
  • 如何在 Maven 中显示消息

    如何在 Maven 中显示消息 在ant中 我们确实有 echo 来显示消息 但是在maven中 我该怎么做呢 您可以使用 antrun 插件
  • 如何配置eclipse以保持这种代码格式?

    以下代码来自 playframework 2 0 的示例 Display the dashboard public static Result index return ok dashboard render Project findInv
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • android Accessibility-service 突然停止触发事件

    我有一个 AccessibilityService 工作正常 但由于开发过程中的某些原因它停止工作 我似乎找不到这个原因 请看一下我的代码并告诉我为什么它不起作用 public class MyServicee extends Access
  • 如何修复“sessionFactory”或“hibernateTemplate”是必需的问题

    我正在使用 Spring Boot JPA WEB 和 MYSQL 创建我的 Web 应用程序 它总是说 sessionFactory or hibernateTemplate是必需的 我该如何修复它 我已经尝试过的东西 删除了本地 Mav
  • java迭代器内部是如何工作的? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个员工列表 List
  • com.jcraft.jsch.JSchException:身份验证失败

    当我从本地磁盘上传文件到远程服务器时 出现这样的异常 com jcraft jsch JSchException Auth fail at org apache tools ant taskdefs optional ssh Scp exe
  • KeyPressed 和 KeyTyped 混淆[重复]

    这个问题在这里已经有答案了 我搜索过之间的区别KeyPressedand KeyTyped事件 但我仍然不清楚 我发现的一件事是 Keypressed 比 KeyTyped 首先被触发 请澄清一下这些事件何时被准确触发 哪个适合用于哪个目的
  • 中断连接套接字

    我有一个 GUI 其中包含要连接的服务器列表 如果用户单击服务器 则会连接到该服务器 如果用户单击第二个服务器 它将断开第一个服务器的连接并连接到第二个服务器 每个新连接都在一个新线程中运行 以便程序可以执行其他任务 但是 如果用户在第一个

随机推荐

  • 如何将 HH:mm:ss.SSS 转换为毫秒?

    我有一个字符串00 01 30 500这相当于90500毫秒 我尝试使用SimpleDateFormat给出包括当前日期在内的毫秒数 我只需要毫秒级的字符串表示形式 我是否必须编写自定义方法来分割并计算毫秒 或者还有其他方法可以做到这一点吗
  • 在php中获取memcache项的过期时间?

    我在我的网站上缓存推文 过期时间为 30 分钟 当缓存为空时 第一个找到的用户将重新填充它 然而 那时 Twitter API 可能会返回 200 在这种情况下 我想将之前的数据再延长 30 分钟 但之前的数据已经丢失了 因此 我想考虑在过
  • 在 UITableViewController 中弹出多个级别

    我希望能够从 UITableViewController 堆栈中弹出多个视图 例如 在 Apple DrillDownSave 示例中 当查看级别 3 时返回级别 1 或者当查看项目时按按钮返回级别 2 我试过 self navigatio
  • 值为 Empty 的 Variant 类型的变量如何在堆栈上表示?

    以下解释来自Rhino 开发者文档 Empty 当您在 VBScript 中声明变量时 变量的值之前 第一个赋值未定义 或者Empty Dim varValue Empty value 所以基本上 Empty说 我是一个未初始化的变体 如果
  • `int 3` 到底应该做什么?

    根据this int 3从用户空间使用来生成 SIGTRAP 但是 在用户空间下的特权下应该做什么呢 还有更多的东西可以从用户空间 SIGTRAP 生成这样的东西吗 操作码int 3对 UNIX 约定一无所知 例如 SIGTRAP Int
  • 获取Windows 8自动颜色主题的活动颜色

    在 Windows 8 中 我已将配色方案设置为自动 并将壁纸配置为在 x 分钟后更改 配色方案根据活动壁纸而变化 我正在开发一个 WPF 应用程序 并且希望在 Windows 更改配色方案以匹配当前壁纸时更改我的渐变 有没有办法获取当前
  • 解析开源服务器重置密码错误

    I updated the parse server to run on AWS and I get this error when I hit the reset password but the login works I am not
  • 是什么导致了这个属性错误?

    我一直在寻找解决方案 但还没有找到 所以这是我的代码 class snakeGame def init self pygame init self isRunning False self surface None self drawLis
  • RNetLogo 无法在 Mac Yosemite 上运行

    我刚刚尝试过此操作 但收到此错误消息 关于如何修复它有什么想法吗 我使用的是R版本3 1 1 RNetLogo 1 0 1 平台是x86 64 apple darwin13 1 0 64位 Java 7 update 60 Sys sete
  • 如何使用 CasperJS 通过自定义 POST 请求下载文件

    我正在编写一个爬虫 需要使用 POST 下载表单请求后生成的文件 我已成功将 this download url POST Params 用于常规表单 其中一个网站有许多字段使用相同的名称 从而使我无法使用常规下载方法 在尝试了很多事情之后
  • 是否有理由担心表中的列顺序?

    我知道你可以用 FIRST 和 AFTER 来改变 MySQL 中的列顺序 但是你为什么要费心呢 由于好的查询在插入数据时会显式命名列 因此真的有理由关心列在表中的顺序吗 列顺序对我调优的一些数据库 包括 Sql Server Oracle
  • 如何将Recyclerview项目保持在同一位置?

    我有以下问题 我从 Fragment 类中填充 Recyclerview 到目前为止 一切顺利 然而 当我测试我的应用程序并上下滚动填充的回收器列表时 每个项目的内容都会发生变化 也就是它们会被回收 如何保存每个项目的位置并在滚动后将其内容
  • “未找到请求的实体。” - Apps 脚本执行 API 错误

    我们有一个安装在五个 G Suite 帐户中的 Apps 脚本 我正在从 Google App Engine 中部署的 Java 代码调用应用程序脚本 我已将五个刷新令牌存储在属性文件中 并在调用 Apps 脚本之前以循环方式将它们设置在
  • Flask-sqlalchemy:连接两个数据库中的表(不同的绑定键)时遇到问题。出现错误 1146(见下文)

    我正在使用 python 和 sqlalchemy 构建 Flask Restful API 并且尝试连接来自不同数据库的两个表 看来我一次只能搜索一个数据库中的表 我错过了什么吗 from flask sqlalchemy import
  • 通配符匹配严格,但找不到元素“resources”的声明

    我知道这是重复的 你们会因此责备我 但在阅读所有帖子后我没有得到正确的解决方案 我正在尝试在 Spring Source Tool Suite 中构建 Spring 模板应用程序 我收到以下错误 org springframework be
  • QT + OpenSSL + 安卓

    我想设置 OpenSSL 库 对于我的 Qt 项目 在 Linux 下 它可以与内置的 OpenSSL 一起正常工作 我将其添加到我的 pro 文件中 LIBS lcrypto PKGCONFIG openssl 但是如果我在Android
  • CakePHP hasAndBelongsToMany (HABTM) 删除加入记录

    我在用户和位置之间有 HABTM 关系 两种型号都有合适的 hasAndBelongsToMany变量集 当我管理用户位置时 我想删除用户和位置之间的关联 但不删除位置 显然这个位置可能属于其他用户 我希望以下代码仅删除提供 HABTM 关
  • 如何处理android中的复选框ischecked和unchecked事件

    我是 android 新手 我制作了一个简单的数学应用程序 我使用复选框来选择正确的选项 但问题是答案选项不仅是一个 而且是两个 三个意味着多重选择 所以我使用复选框 chkOption setOnCheckedChangeListener
  • Swift - 检查 url asset 是否有声音

    我的屏幕破裂了 而且我的手机没有声音功能 我用相机录制了视频 当我选择视频网址时didFinishPickingMediaWithInfo我尝试检查视频是否有声音 但是player currentItem asset tracks说视频确实
  • Java Mail:在没有 SSL 的情况下在端口 25 上发送电子邮件时出现 SSLHandshakeException

    尽管我尝试在不使用 SSL 的情况下在端口 25 上发送电子邮件 但我收到了 SSLHandshakeException 下面您可以看到 javax mail Session 和 SSLHandshakeException 打印的调试消息