我正在开发一个具有 SMTP 功能的嵌入式应用程序(运行 MQX RTOS,用 C 编写)。最近,使用 Mocana NanoSSL 库添加了 TLS 支持。我目前能够使用 Gmail、Yahoo 和私人交换服务器成功发送电子邮件。不幸的是,Hotmail 不起作用。这是我使用的连接参数:
服务器:smtp.live.com
端口:25 和 587
验证方法:PLAIN 和 LOGIN
基本上,我能够成功连接到服务器,执行 SSL/TLS 握手(使用 STARTTLS),并将加密的 EHLO 消息发送到服务器(接收响应)。根据此响应,服务器同时支持 AUTH PLAIN 和 AUTH LOGIN。但是,一旦我发送了这些命令中的任何一个,我为获取响应而进行的以下 SSL_recv() 调用将失败,并出现超时或connection reset by peer
.
更新:
好的,所以经过一些实验,我的问题似乎在于 SSL 库级别,而不是 Microsoft 的 SMTP 服务器。我尝试用标准 RTCS 套接字 recv() 调用替换 SSL_recv() 调用,并且能够接收和查看加密数据。通过禁用我的响应验证,我能够继续通过 SMTP 进程并成功发送消息。目前我不确定为什么 SSL_recv() 调用无法获取套接字数据,但我会继续挖掘,希望能找到答案。