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

时间:2010-02-15 08:15:38

标签: smtp exim4

我已经从exim4:#/ p>开始了这个拒绝错误

2010-02-15 01:46:05 SMTP协议同步错误(无需等待问候语即发送输入):H = ender拒绝连接[192.168.20.49] input =“HELO 192.168.20.49 \ r \ n”< / p>

我修改了我的exim4配置以强制执行同步,如下所示:

 smtp_enforce_sync='false'
 acl_smtp_connect = nosync nosync:
         control = no_enforce_sync
         accept

但这似乎并不重要。对我来说不那么有意义的是为什么我首先得到了554。我发送一个HELO,我等待回复,不知怎的,在那之中,我设法生成“554错误”

我在下面的代码中做错了什么,这使得99%的时间失败(是的,它已经工作了两次)。是的,套接字是阻塞的,我在recv中等待约5秒等待拒绝。在它工作的2次时,它根本没有停顿。

我尝试过发送EHLO而不是HELO,没有更好的运气。我甚至悲痛欲绝地连接一个telnet会话并说HELO。但是,我可以使用python smtp(来自另一台机器)在同一台服务器上发送电子邮件!

        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';

1 个答案:

答案 0 :(得分:5)

您的代码应该在发送HELO消息之前等待来自smtp服务器的220行。见RFC 2821的第3.1节。这可能是Python库的作用。

应该有几个可用的免费库可以帮助您解决此问题,例如libsmtp。考虑花时间学习其中一个而不是修补自己的解决方案(除非您的项目是编写自己的邮件解决方案)。