Microchip
直播中

翁愿冠

7年用户 240经验值
私信 关注
[问答]

TCPIP_SMTP_StringPut()函数经常返回0

很抱歉,如果这个问题已经被解决了,但是也许这会帮助在HARMony 1.09中处理SMTP的人。我在Harmony 1.05中有一个工作应用程序级SMTP文件,它使用TCPIP_SMTP_StringPut()函数发送了几个字符串,该函数返回写入的字节数。和声1.09,这个函数经常返回0,但WiReSARK清楚地显示数据被发送。所以我去挖掘,我不需要挖掘很多。此函数调用TCPIpIsSMTPARARYPUT()函数,函数返回DATALLN。这个返回值是错误的。TCPIpIsSMTPJARADYPUTE()调用NETApPysiSoCKEdgEnter(),它实际上返回写入的数据字节数。NET_PRES_SocketWrite()返回的值保存到putReady变量,该变量不再使用,而是返回dataLen(dataLen通常为0,因为dataLen!=0是打破TCPIP_SMTP_ArrayPut()函数中的while循环的条件,tl;dr TCPIP_SMTP_ArrayPut()应该返回putReady。我目前正在下载Harmony v2.01b版本,看看这是否是固定的。Ork(WOLFSSL)。我在端口465连接到SMTPGmail网站,发送邮件,但总是从一个不成功的连接开始。它试图连接到smtp.gmail.com:465,抛出CONNECT_ERROR(0x8001u),重试并正确发送。有人知道为什么会发生这种情况以及如何避免这种情况吗?编辑2:了解为什么第一次连接失败- DNS获得错误的地址

回帖(18)

云达贞

2019-10-30 12:52:39
你是正确的,thpcppIsSMTPJARRAYPUT()的返回值是错误的。这是一个bug,它将被修复。但是,我建议您使用新的SMTPC客户端,它改进了RFC一致性和服务器协商,并使用NET_PRES进行加密支持。这个旧的SMTP模块最终将从发行版中删除。
举报

石璞璞

2019-10-30 13:11:58
谢谢您的推荐!这是从v1.05迁移过来的简单过程,但是我将研究一下。我看到smtp.c文件也使用NET_PRES(例如,MySocket=NET_PRES_SocketOpen(...))。
举报

高桂清

2019-10-30 13:29:31
如我所见,SMTPC.C模块只使用ESMTP协议(扩展)。从EHLO而不是HELO开始的连接。我还需要支持到服务器的未经身份验证的连接(对于旧的smtp.c,它工作正常)。我有办法使用SMTPC模块进行非认证电子邮件吗?谢谢,阿德里安
举报

云达贞

2019-10-30 13:45:40
如果邮件服务器指示不需要身份验证,则SMTPC不需要用户凭据,但是将立即开始发送邮件消息。但是,如果服务器指示需要身份验证,则如果没有提供凭据,SMTPC将中止。或TLS。如果服务器接受普通连接,SMTPC将跳过TLS连接阶段。请确保没有设置任何标志:TCPIP_SMTPC_MAIL_FLAG_CONNECT_TLS或TCPIP_SMTPC_MAIL_FLAG_FORCE_TLS。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分