Я столкнулся лицом к лицу с этой ошибкой отклонения из 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 во-первых. Я посылаю HELO, жду ответа, и каким-то образом посреди этого мне удается сгенерировать «Ошибка 554»
Что я делаю неправильно в приведенном ниже коде, что приводит к сбою в 99% случаев (да, это сработало дважды). Да, сокет блокируется, я вешаю в recv ~ 5 секунд в ожидании отклонения. В 2 раза, когда это сработало, оно вообще не останавливалось.
Я попытался отправить EHLO вместо HELO, не повезло. У меня даже было горе от того, что я подключился к телнет-сеансу и сказал 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';