gmail - 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 已通过。
为什么电子邮件没有被加密?
解决方案
我也遇到了同样的问题,试图通过 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 文件。
推荐阅读
- angular - Angular - 如何让 HTML 监听 observable
- oracle - PL/SQL 表达式获取小时之间的差异
- oracle - Timediff 结果小数问题 oracle 11g
- azure - Grafana 使用虚拟机 (Ubuntu-Azure)
- graphql - 在单个进程中托管 HotChocolate 服务器和 Strawberry Shake 客户端
- liferay-7 - 如何在登录后挂钩 Liferay DXP 7.0 上获取已连接用户的当前站点(组)以获取站点 CustomField
- python - 我如何优化此代码以不受时间限制?(codeforce 344A 磁铁)
- spring - 使用 Testcontainer 进行 Spring 集成测试 - 数据库在应用程序之后启动
- c# - Xamarin Forms PushAsync 没有动画
- hsqldb - hsqldb中的外键数组