554 exim4和我的代码的SMTP同步错误

554 exim4和我的代码的SMTP同步错误,smtp,exim4,Smtp,Exim4,我在exim4中遇到了此拒绝错误: 2010-02-15 01:46:05 SMTP协议同步错误(在未等待问候语的情况下发送输入):拒绝了来自H=ender[192.168.20.49]input=“HELO 192.168.20.49\r\n” 我已修改exim4配置以不强制同步,如下所示: smtp_enforce_sync='false' acl_smtp_connect = nosync nosync: control = no_enforce_sync

我在exim4中遇到了此拒绝错误:

2010-02-15 01:46:05 SMTP协议同步错误(在未等待问候语的情况下发送输入):拒绝了来自H=ender[192.168.20.49]input=“HELO 192.168.20.49\r\n”

我已修改exim4配置以不强制同步,如下所示:

 smtp_enforce_sync='false'
 acl_smtp_connect = nosync nosync:
         control = no_enforce_sync
         accept
但这似乎并不重要。对我来说不太有意义的是为什么我首先要买554。我发送了一个直升机,我等待回应,不知何故,在这过程中,我设法产生了“554错误”

在下面的代码中,我做错了什么,导致99%的时间失败(是的,它已经工作了两次)。是的,插座堵塞,我在recv中挂了约5秒钟,等待拒绝。在这两次工作时,它根本没有暂停

我试着派埃洛而不是希洛,运气不好。我甚至为得到一个telnet会话来连接和说HELO而感到悲伤。然而,我可以使用PythonSMTP(从另一台机器上)在同一台服务器上发送电子邮件

        hSocket = _connectServerSocket(server, port);    
    if (hSocket != INVALID_SOCKET) {        
        BYTE        sReceiveBuffer[4096];
        int            iLength = 0;
        int            iEnd = 0;
        char        buf[4096];

        strcpy(buf, "HELO ");
        strcat(buf, "192.168.20.49");
        strcat(buf, "\r\n");
        printf("%s", buf);
        if (send(hSocket, (LPSTR)buf, strlen(buf), NO_FLAGS) == SOCKET_ERROR) {
            printf("Socket send error: %d\r\n", WSAGetLastError());    
            return (false);
        }
        iLength = recv(hSocket, 
                       (LPSTR)sReceiveBuffer+iEnd,sizeof(sReceiveBuffer)-iEnd, 
                        NO_FLAGS);
        iEnd += iLength;
        sReceiveBuffer[iEnd] = '\0';

在发送HELO邮件之前,您的代码应该等待smtp服务器发出的
220
行。见本手册第3.1节。这可能就是Python库所做的


例如,应该有几个免费的库可以帮助您实现这一点。考虑花时间学习其中的一个,而不是修补你自己的解决方案(除非你的项目是写你自己的邮件解决方案)。< / P>我无耻地偷了代码,因为我正在尝试得到一个我的测试程序给我发电子邮件,当它完成了!我确实在上面的链接中找到了这个代码。大多数smtp LIB在windows下运行似乎有很多麻烦。感谢您在我发送HELO之前提醒我220的到来,我在规范中遗漏了这一点。我已经对代码进行了一些清理,我可能会在那篇文章的评论中发布它。