我首先遇到了来自 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';