AUTH命令上的Hotmail / Outlook.com连接失败

时间:2013-07-31 15:09:07

标签: c ssl smtp embedded smtpclient

我正在开发一个具有SMTP功能的嵌入式应用程序(运行用C编写的MQX RTOS)。最近,使用Mocana NanoSSL库添加了TLS支持。我目前能够使用Gmail,Yahoo和私人交换服务器成功发送电子邮件。不幸的是,Hotmail不起作用。这是我用过的连接参数:

  

服务器:smtp.live.com
  港口:25和587
  AUTH方法:PLAIN和LOGIN

基本上,我能够成功连接到服务器,执行SSL / TLS握手(使用STARTTLS),并将加密的EHLO消息发送到服务器(接收响应)。根据此响应,服务器支持AUTH PLAIN和AUTH LOGIN。但是,一旦我发送这些命令中的任何一个,我发出的以下SSL_recv()调用就会因超时或connection reset by peer而失败。

更新:
好的,经过一些实验后,我的问题似乎在于SSL库级而不是微软的SMTP服务器。我尝试用标准RTCS套接字recv()调用替换SSL_recv()调用,并能够接收和查看加密数据。通过禁用我的响应验证,我可以继续通过SMTP进程并成功发送消息。此时我不确定为什么SSL_recv()调用无法获取套接字数据,但我会继续挖掘并希望能找到答案。

2 个答案:

答案 0 :(得分:1)

嗯,我也在这里工作了。我不得不更换

SSL_CTX = SSL_CTX_new(SSLv23_client_method());

使用:

ssl_ctx=SSL_CTX_new(SSLv3_client_method());

ssl_ctx=SSL_CTX_new(TLSv1_client_method());

我的理解是23_client方法首先发送SSL2客户端问候语,这会混淆服务器。 我在HP SSL编程教程中读到了这个:

http://h71000.www7.hp.com/doc/83final/ba554_90007/ch04s03.html

它说:“但是,使用SSLv23方法的SSL客户端无法使用SSLv3 / TLSv1方法与SSL服务器建立连接,因为客户端发送了SSLv2问候消息。”

SSL3也可以使用,因为您可以在STARTTLS之后继续使用SSL,而不必使用TLS。

见这里: https://www.fastmail.fm/help/technology_ssl_vs_tls_starttls.html

答案 1 :(得分:0)

所以,这是SSL库本身似乎让我失败了。我能够绕过这个问题并成功发送电子邮件,只需不调用SSL_recv()来验证服务器响应。我显然无法进行错误检查或获得任何有意义的失败反馈,但对于一个成功的用例,服务器接受我的所有SMTP消息都会发送电子邮件。

相关问题