Mailserver antworten nicht

10/01/2012 - 17:22 von Burkhard Schultheis | Report spam
Ich muss für ein neues Produkt Kommunikation mit den Mail-Servern der
Domains aufnehmen (alles in C). Dazu baue ich eine Socket-Verbindung mit
dem server auf:

sockfd = socket (PF_INET, SOCKSTREAM, 0);
if (sockfd < 0)
...

serv_addr.sin_family = AF_INET;
...
if (connect (sockfd, (struct sockaddr *) &serv_addr), sizeof
(serv_addr)) < 0)
...

Danach kann ich mit read vom Socket bei jedem Server eine
Begrüßungsnachricht lesen, z.B. kommt bei Arcor:

220 mx.arcor.de ESMTP arcor.de Mailservices external

Die Verbindung ist also offenbar erfolgreich hergestellt worden. Aber
danach geht's nicht wie erwartet weiter:

Als nàchstes schreibt mein Programm eine HELO-Nachricht auf den Socket:

n = write (sockfd, "HELO <domain>", strlen ("HELO <domain>"));

wobei natürlich <domain> für einen gültigen Domain-Namen steht.

Wenn ich anschließend vom Socket lesen will, hàngt bei fast allen
Providern die Kommunikation (web.de, gmx.de, gmail.com, arcor.de). Bei
T-Online kommt eine leere Antwort.

Wenn ich das ganze manuell mit telnet auf Port 25 probiere, kann ich
eine E-Mail versenden.

Könnt ihr euch einen Reim darauf machen, was ich da falsch mache?

F'up2 de.comp.os.unix.programming

Grüße
Burkhard
 

Lesen sie die antworten

#1 Werner Flamme
10/01/2012 - 17:27 | Warnen spam
Burkhard Schultheis [10.01.2012 17:22]:

Danach kann ich mit read vom Socket bei jedem Server eine
Begrüßungsnachricht lesen, z.B. kommt bei Arcor:

220 mx.arcor.de ESMTP arcor.de Mailservices external

Die Verbindung ist also offenbar erfolgreich hergestellt worden. Aber
danach geht's nicht wie erwartet weiter:

Als nàchstes schreibt mein Programm eine HELO-Nachricht auf den Socket:

n = write (sockfd, "HELO <domain>", strlen ("HELO <domain>"));

wobei natürlich <domain> für einen gültigen Domain-Namen steht.

Wenn ich anschließend vom Socket lesen will, hàngt bei fast allen
Providern die Kommunikation (web.de, gmx.de, gmail.com, arcor.de). Bei
T-Online kommt eine leere Antwort.



Ich kenne jetzt Deine write()-Funktion nicht, aber hàngt die automatisch
einen Zeilenvorschub an? T-Irgendwas würde ich nicht als Maßstab nehmen
wollen ;-)

Gruß
Werner

Ähnliche fragen