使用 OpenSSL 测试与 Outlook 的 IMAP 连接
Test IMAP connection to Outlook using OpenSSL
我正在尝试使用 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,但两者都没有任何区别。
有人能指出我正确的方向吗?我已经在 Ubuntu 和 Windows 10 上使用最新版本的 OpenSSL 运行 此命令。
我可以使用您的命令进行连接,但我需要在连接时使用 -crlf
选项强制使用 \r\n
行结束字符,以便能够键入命令并让服务器识别它们。
也可以加上-quiet
减少输出量:
openssl s_client -connect outlook.office365.com:993 -crlf -quiet
但是,在您的情况下,连接似乎正在重置。这意味着存在某种网络问题。可能有防火墙阻止您访问 outlook.office365.com
上的端口 993
。例如如果您通常必须通过代理服务器进行连接,则可能会出现这种情况。
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
如果您在代理后面并且无法直接连接到 IMAP 服务器,那么您也可以使用类似 EmailEngine 的东西来处理连接并允许通过 REST API.
我正在尝试使用 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,但两者都没有任何区别。
有人能指出我正确的方向吗?我已经在 Ubuntu 和 Windows 10 上使用最新版本的 OpenSSL 运行 此命令。
我可以使用您的命令进行连接,但我需要在连接时使用 -crlf
选项强制使用 \r\n
行结束字符,以便能够键入命令并让服务器识别它们。
也可以加上-quiet
减少输出量:
openssl s_client -connect outlook.office365.com:993 -crlf -quiet
但是,在您的情况下,连接似乎正在重置。这意味着存在某种网络问题。可能有防火墙阻止您访问 outlook.office365.com
上的端口 993
。例如如果您通常必须通过代理服务器进行连接,则可能会出现这种情况。
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
如果您在代理后面并且无法直接连接到 IMAP 服务器,那么您也可以使用类似 EmailEngine 的东西来处理连接并允许通过 REST API.