3 Stimmen

Wenn ich telnet oder netcat verwende, um eine ausgehende SMTP-E-Mail zu testen, kann ich die Nachricht nicht "mit "." in einer eigenen Zeile beenden".

Wenn ich eine einfache E-Mail über telnet oder netcat an den SMTP-Server meines ISP sende, kann ich die Nachricht nicht mit einem Punkt abschließen. Schließlich wird die Verbindung abgebrochen, aber die Nachricht wird nicht zugestellt.

root@zeus:/tmp# telnet mail.charter.net 25
220 imp09 smtp.charter.net ESMTP server ready 20110115 000442
HELO charter.net
250 imp09 hello [97.94.115.109], pleased to meet you
MAIL FROM: test@gmail.com
250 2.1.0 <test@gmail.com> sender ok
RCPT TO: test@gmail.com
250 2.1.5 <test@gmail.com> recipient ok
DATA
354 enter mail, end with "." on a line by itself
test body

.

.

/n.
/n
.

\n
.

QUIT

Auf einem anderen Computer im selben Netz und bei einem anderen ISP mit einer anderen Version von telnet funktioniert dies problemlos.

netcat hängt auf beiden Computern auf die gleiche Weise.

Ich dachte, das könnte etwas mit dem LINEMODE zu tun haben, da die Telnet-Sitzung, die die E-Mail nicht senden kann, im LINEMODE ist und nicht in den CHARMODE wechseln kann. Gibt es irgendwelche Umgehungsmöglichkeiten?

5voto

ʇsәɹoɈ Punkte 21105

Die Zeilenumbrüche, die Sie senden, sind wahrscheinlich nur ein Wagenrücklauf oder ein Zeilenvorschubzeichen. SMTP erfordert einen Wagenrücklauf gefolgt von einem Zeilenvorschub, um eine Zeile zu beenden.

https://www.rfc-editor.org/rfc/rfc5321#section-2.3.8

https://www.rfc-editor.org/rfc/rfc5321#section-4.1.1.4

Versuchen Sie, jede Zeile mit Control-M Control-J zu beenden, ein anderes Terminalprogramm zu verwenden und/oder etwas anderes als telnet zu benutzen.

1voto

Roland Illig Punkte 38839

Um zu sehen, was wirklich vor sich geht, können Sie eines dieser Werkzeuge verwenden:

  • strace zeichnet alle Systemaufrufe auf, auch alles, was Sie in Dateien oder das Netzwerk schreiben oder lesen. Sie können die Ausgabe dieses Programms untersuchen, um festzustellen, ob die Zeilen ordnungsgemäß mit \r\n .
  • wireshark zeichnet den Netzwerkverkehr auf und zeigt ihn an. Verwenden Sie es, um den Verkehr aufzuzeichnen, zu filtern tcp.port==25 und dann TCP-Stream verfolgen um zu sehen, welche Bytes wirklich über die Leitung gesendet wurden.

0voto

Laurence Gonsalves Punkte 131009

Es ist zwar ein Schuss ins Blaue, aber vielleicht sollten Sie nach der Eingabe der Zeichen CTRL-J statt Enter drücken. . .

0voto

Shane Millsom Punkte 1

Wie bereits erwähnt, benötigt das SMTP-Protokoll CRLF-Zeichen, um das Ende einer Nachricht ordnungsgemäß zu kennzeichnen.

Wenn Sie telnet (oder openssh bei sicheren Verbindungen) von einer Linux/MacOS-Basis aus verwenden, müssen Sie dem Programm mit der Option -crlf mitteilen, dass es die richtige Art von Zeilenenden verwenden soll.

z.B. telnet -crlf mail.charter.net 25

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X