2010-02-15 24 views
1

我已經頭朝下運行到此從exim4安裝拒絕錯誤:與exim4安裝我的代碼554 SMTP同步誤差

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

但這:從H =安德[192.168.20.49]輸入= 「HELO 192.168.20.49 \ r \ n」 個

我已經修改我的exim4配置到不強制同步,像這樣拒絕的連接似乎並不重要。對我來說不那麼重要的是爲什麼我首先得到了554。我發送一個HELO,我等待迴應,並在某種程度上,我設法產生「554錯誤」

我在做什麼錯在下面的代碼,這使得失敗99%的時間(是的,它已經工作了兩次)。是的,套接字是阻塞的,我掛在recv約5秒鐘等待拒絕。在它工作的兩次時,它並沒有停下來。

我試過發送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'; 
+0

我無恥地偷了代碼http://www.codeproject.com/KB/IP/zsmtp.aspx?msg=1332673#xx1332673xx 我試圖讓我的測試程序之一給我發電子郵件,當它是完了! – boatcoder

回答

2

您的代碼發送HELO消息前應等待來自SMTP服務器220線。請參閱RFC 2821的第3.1節。這可能是Python庫所做的。

應該有幾個免費的圖書館可以幫助你,例如libsmtp。考慮花時間學習其中的一種,而不是修補自己的解決方案(除非您的項目是編寫自己的郵件解決方案)。

+0

我在上面的鏈接中找到了此代碼。大多數的smtp庫在windows下工作似乎很麻煩。感謝您在發送HELO之前220的未來,我錯過了規範。我已經清理了這些代碼,並且可能會將其發佈在該文章的評論中。 – boatcoder

+0

非常感謝你! –