554 SMTP erreur de synchronisation avec exim4 et mon code
J'ai la tête la première dans cette erreur de refuser de exim4:
2010-02-15 01:46:05 protocole SMTP erreur de synchronisation (entrée envoyé sans attendre de voeux): rejeté la connexion à partir de H=ender [192.168.20.49 d'entrée]="HELO 192.168.20.49\r\n"
J'ai modifié mon exim4 config pour ne pas appliquer de synchronisation, comme suit:
smtp_enforce_sync='false'
acl_smtp_connect = nosync nosync:
control = no_enforce_sync
accept
Mais qui ne semble pas à la matière. Ce qui fait moins de sens pour moi, c'est pourquoi je me fais de l'554 en premier lieu. J'ai envoyer un HELO, j'attends une réponse, et d'une certaine manière, au milieu de cette, j'ai réussi à générer le "554 Erreur"
Ce que je fais mal dans le code ci-dessous, ce qui en fait l'échec de 99% du temps (oui, il a travaillé à deux reprises). Oui, le socket est le blocage, je m'accroche dans recv pour ~5 secondes d'attente pour le rejet. Sur les 2 fois où il a travaillé, il n'a pas de pause.
J'ai essayé d'envoyer EHLO au lieu de HELO, pas plus de chance. J'ai même eu le chagrin d'obtenir une session telnet pour se connecter et HELO. Cependant, je peux utiliser python smtp (à partir d'une autre machine) pour envoyer des e-mails juste d'amende contre ce même serveur!
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] = ' 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';
';
- J'ai sans vergogne a volé le code de codeproject.com/KB/IP/zsmtp.aspx?msg=1332673#xx1332673xx je vais essayer d'obtenir l'un de mes programmes de test à m'envoyer un email quand c'est fini!
Vous devez vous connecter pour publier un commentaire.
Votre code devrait attendre un
220
ligne à partir du serveur smtp avant l'envoi de la commande HELO message. Voir la section 3.1 de RFC 2821. C'est probablement ce que la bibliothèque Python n'.Il devrait y avoir plusieurs bibliothèques gratuites qui peuvent vous aider avec cela, par exemple libsmtp. Envisager de passer du temps sur l'apprentissage d'une de ces au lieu de patcher votre propre solution (sauf si votre projet est d'écrire votre propre solution de messagerie).