我正在研究具有SMTP功能的嵌入式应用程序(运行MQX RTOS,用C编写)。最近,使用Mocana NanoSSL库添加了TLS支持。我目前能够使用Gmail,Yahoo和私人交易服务器成功发送电子邮件。不幸的是,Hotmail不起作用。这里是连接参数,我用:AUTH命令上的Hotmail/Outlook.com连接失败
服务器:smtp.live.com
端口:25和587
AUTH方法:平原和LOGIN
基本上,我能成功连接到服务器,执行SSL/TLS握手(使用STARTTLS),并将加密的EHLO消息发送到服务器(接收响应)。根据这个响应,服务器支持AUTH PLAIN和AUTH LOGIN。但是,一旦我发送这些命令中的任何一个,我发出的以下SSL_recv()调用就会失败,并显示超时或connection reset by peer
。
UPDATE:
好的,经过一番实验后,我的问题出现在SSL库级别,而不是微软的SMTP服务器。我尝试用标准RTCS套接字recv()调用替换SSL_recv()调用,并能够接收和查看加密数据。通过禁用我的响应验证,我可以继续通过SMTP过程并成功发送消息。此时我不确定为什么SSL_recv()调用无法获取套接字数据,但我会继续挖掘并希望找到答案。
有时邮件服务器只是放弃连接而不是礼貌,以减少垃圾邮件机器人浪费的时间。这可能表明收到的消息中的一个小错误不是100%标准。 –
现在这个问题似乎在某处的SSL堆栈中。我关闭了我的响应验证并删除了SSL_recv调用(用RTCS recv()调用替换它们),现在一切正常。这意味着它一直在工作,并且它一直是对失败的SSL_recv的调用,而不是邮件服务器。随着更多信息的出现,我会更新此问题。 – Hippopatimus