首页 > 解决方案 > Apache JAMES:Gmail 说从我的服务器发送的电子邮件未经过 TLS 加密

问题描述

当我从我的 Apache JAMES SMTP 服务器向我的 Gmail 地址发送电子邮件时,Gmail 会收到电子邮件,但显然不是通过 TLS 加密。Gmail 显示红色锁形图标,显示“[我的服务器] 未加密此邮件。” 电子邮件标头也不表示通过 TLS 接收。

我已经为我的 Apache JAMES SMTP 服务器开启了 TLS。这是我的 smtpserver.xml 中的相关部分:

<tls socketTLS="false" startTLS="true">
    <keystore>[my-jks-file]</keystore>
    <secret>[my-jks-password]</secret>
    <provider>org.bouncycastle.jce.provider.BouncyCastleProvider</provider>
</tls>

我也尝试过使用

<tls socketTLS="true" startTLS="false">

相反,但它并没有解决问题。

当我尝试使用https://www.checktls.com/TestReceiver测试我的 Apache JAMES 电子邮件地址时,报告显示所有内容(包括 TLS)都已通过。使用https://mxtoolbox.com/diagnostic.aspx测试我的服务器域也表明 TLS 已通过。

为什么电子邮件没有被加密?

标签: gmailjakarta-mailjames

解决方案


我也遇到了同样的问题,试图通过 Apache James 将电子邮件从电子邮件客户端推送到 Gmail,而 Gmail 报告说它们没有被安全地接收。

根据我对 Apache James 文档和源代码的了解,RemoteDelivery mailet 负责将电子邮件发送到recipent 电子邮件服务器。https://james.apache.org/server/3/dev-provided-mailets.html 文档和 RemoteDelivery.java 源代码说 RemoteDelivery 包含两个属性:

  • startTLS:一个布尔值(true/false),指示 STARTTLS 命令(如果服务器支持)是否在发出任何登录命令之前将连接切换到受 TLS 保护的连接。默认为假。
  • sslEnable:一个布尔值(true/false),指示是否使用 SSL 连接和使用 SSL 端口,除非明确覆盖。默认为假。

startTLS 似乎是这里的关键,当 James 协商与 Gmail 服务器的连接时,如果 Gmail 允许,它应该尝试将不安全的连接升级为安全的连接。

我正在运行 Apache James 2.3.2 并在 /path/to/James/apps/james/SAR.INF/conf.xml 文件的 Remove delivery 部分下:

<mailet match="All" class="RemoteDelivery"> 

我尝试将设置属性设置为 true

<startTLS>true</startTLS>
<sslEnable>true</sslEnable>

然而,James 仍然没有向 Gmail 发送安全电子邮件。所以我没有想法。

仅供参考,在 Apache James 版本 3.4 中,RemoteDelivery 配置似乎已重新定位到 conf/mailcontainer.xml 文件。


推荐阅读