I am trying to access the Outlook mail server via IMAP using PHP. As this is not working as intended and the error messages are not helping, I looked up ways to test the basic connectivity and came across the following line of code:
openssl s_client -connect outlook.office365.com:993
This should, supposedly, let me connect to the mail server using an encrypted connection, so that I can then issue some commands to actually log in etc.
However, the command only generates the following output:
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)
---
I have tried researching the error message (write:errno=104
), which lead to some suggestions like enforcing TLSv1.2 using the -tls1_2
parameter, neither of which made any difference.
Can someone point me in the right direction? I already ran this command on Ubuntu and Windows 10 using the latest version of OpenSSL.
2
Answers
I can connect using your command, but I needed to force
rn
line ending characters using the-crlf
option when connecting in order to be able to type commands and have the server recognise them.You can also add
-quiet
to reduce the amount of output:However, it seems the connection is getting reset in your case. This means there’s some sort of network issue. There might be a firewall blocking your access to port
993
onoutlook.office365.com
. e.g. this might be the case if you normally have to connect via a proxy server.Recent versions of
openssl s_client
have a-proxy
option, but don’t seem to allow specifying a proxy username and password. Also it might not work with your proxy even if you don’t need to authenticate to the proxy server. One workaround might be to use http://ntlmaps.sourceforge.net/. I have tried it in the past, but it was over 15 years ago.You could also try using
cURL
‘s IMAP support instead ofopenssl s_client
, since it has better proxy support.Another possibility is to connect to port
143
and useSTARTTLS
instead of connecting to port993
. Obviously if port993
is firewalled then port143
might also be, but in your case it seems like it is allowed:If you are behind a proxy and can’t connect to the IMAP server directly, then you can also use something like EmailEngine that handles connections itself and allows access mailbox contents via a REST API.