使用 OpenSSL 测试 IMAP 与 Outlook 的连接

问题描述 投票:0回答:3

我正在尝试使用 PHP 通过 IMAP 访问 Outlook 邮件服务器。由于这没有按预期工作并且错误消息没有帮助,我查找了测试基本连接的方法并遇到了以下代码行:

openssl s_client -connect outlook.office365.com:993

据说,这应该让我使用加密连接连接到邮件服务器,以便我可以发出一些命令来实际登录等。

但是,该命令仅生成以下输出:

CONNECTED(00000003)
write:errno=104
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 0 bytes and written 313 bytes
Verification: OK
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
Early data was not sent
Verify return code: 0 (ok)
---

我尝试研究错误消息 (

write:errno=104
),这导致了一些建议,例如使用
-tls1_2
参数强制执行 TLSv1.2,但这两者都没有任何区别。

有人能指出我正确的方向吗?我已经使用最新版本的 OpenSSL 在 Ubuntu 和 Windows 10 上运行了此命令。

outlook openssl imap
3个回答
1
投票

我可以使用您的命令进行连接,但在连接时我需要使用

\r\n
选项强制
-crlf
行结束字符,以便能够键入命令并使服务器识别它们。

您还可以添加

-quiet
来减少输出量:

openssl s_client -connect outlook.office365.com:993 -crlf -quiet

但是,在您的情况下,连接似乎正在重置。这意味着存在某种网络问题。防火墙可能会阻止您访问

993
上的
outlook.office365.com
端口。例如如果您通常必须通过代理服务器进行连接,则可能会出现这种情况。

最新版本的

openssl s_client
有一个
-proxy
选项,但似乎不允许指定代理用户名和密码。此外,即使您不需要向代理服务器进行身份验证,它也可能无法与您的代理一起使用。一种解决方法可能是使用 http://ntlmaps.sourceforge.net/。我过去曾尝试过,但已经是 15 年前的事了。

您也可以尝试使用

cURL
的 IMAP 支持而不是
openssl s_client
,因为它具有更好的代理支持。

另一种可能性是连接到端口

143
并使用
STARTTLS
而不是连接到端口
993
。显然,如果端口
993
被防火墙屏蔽,那么端口
143
也可能被防火墙屏蔽,但在您的情况下,它似乎是允许的:

openssl s_client -connect outlook.office365.com:143 -starttls imap -crlf -quiet

0
投票

如果您位于代理后面并且无法直接连接到 IMAP 服务器,那么您还可以使用类似 EmailEngine 之类的东西来处理连接本身并允许通过 REST API 访问邮箱内容。


0
投票

我们看到此错误是因为

outlook.office365.com
正在解析服务器上的 ipv6 地址。我们必须更新防火墙规则以包含服务器的 ipv6 地址以允许此流量,并且它开始正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.