stefankittel
Goto Top

SMTP und der Punkt

Hallo zusammen,

ich beschäftige mich gerade mal wieder mit dem SMTP-Protokoll und bin dabei auf ein Prinzip-Problem gestoßen.
Ich hatte immer wieder Emails denen einfach Teile fehlte.

Für alle die nicht fließend SMTP sprechen hier ein einfaches Beispiel.
(Quelle:http://de.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol)
 
220 service ready 	Server meldet sich bereit
HELO foobar.example.net 		Client nennt seinen Namen
250 OK 	Server bestätigt
MAIL FROM:<sender@example.org> 		Client nennt Absenderadresse
250 OK 	Server bestätigt
RCPT TO:<receiver@example.com> 		Client nennt Empfängeradresse
250 OK 	Server bestätigt
DATA 		Client kündigt Inhalt der E-Mail an
354 start mail input 	Server bereit für diesen längeren Vorgang
From: <sender@example.org>
To: <receiver@example.com>
Subject: Testmail
Date: Thu, 26 Oct 2006 13:10:50 +0200

Lorem ipsum dolor sit amet, consectetur adipisici elit, sed eiusmod tempor incidunt ut labore et dolore magna aliqua.
.
250 OK 	Server bestätigt und übernimmt die Verantwortung für die Nachricht
QUIT 		Client fordert Verbindungstrennung an
221 closing channel 	Server kündigt Trennung an


Der Client beendet seine Eingabe mit "<CR><LF>.<CR><LF>". Also eine neue Zeile in der nur ein Punkt steht.
Wenn dies in der Mitte einer Mail vorkommt geht der SMTP-Server davon aus, dass der Text nun zu Ende ist und interpretiert den Rest als Befehl.
Einen Befehl den es nicht gibt.

Also darf diese Zeichenfolge in einer Mail nicht vorkommen.

Ich habe eben mit einem Tool das Postfach meiner Frau durchgeschaut und dabei über 200 Mails gefunden wo dies vorkommt.
Zum Beispiel fast alle Mails von Amazon.

 
mily: Arial,Helvetica,Sans-Serif; font-size: 10px; color: #bfbfbf">hier</a>=  
.
<br /><br />


Was macht man mit solchen Mails damit die zugestellt werden können?
a) Die Zeichenkette verändern. Dann wird eventuell aber auch die Mail oder ein Anhang beschädigt.
b) Dem Server sagen, dass er dies ignorieren soll. Aber wie?

Weiß Jemand was zu diesem Thema?

Viele Grüße

Stefan

Content-Key: 233315

Url: https://administrator.de/contentid/233315

Printed on: April 26, 2024 at 06:04 o'clock

Member: colinardo
colinardo Mar 21, 2014, updated at Mar 22, 2014 at 06:55:20 (UTC)
Goto Top
Hallo Stefan,
soweit ich informiert bin, prüfen die Mailclients bzw. Server normalerweise vor der Übertragung ob im Body der Mail ein einzelner Punkt ganz am Anfang einer Zeile steht und fügen falls nötig einen zweiten Punkt hinzu damit es zu keinen Problemen kommt. Falls auf einen Punkt am Anfang der Zeile weitere Zeichen folgen, wird der Punkt entfernt.
Es gab vor einiger Zeit immer mal wieder Probleme mit SMTP Bibliotheken die dies nicht korrekt umgesetzt haben, so dass es zu diesem Phänomen kommt.
Da gab es auch mal einen Hotfix für den EX2003 der dieses Problem hatte: http://support.microsoft.com/?kbid=891862

Wenn, dann betrifft das nur den Nur-Text Part einer Mail da andere Formate meistens Base64 oder quoted printable kodiert übertragen werden und deshalb keine Punkte beinhalten.

Grüße Uwe
Member: Lochkartenstanzer
Lochkartenstanzer Mar 21, 2014, updated at Mar 22, 2014 at 07:07:30 (UTC)
Goto Top
ich beschäftige mich gerade mal wieder mit dem SMTP-Protokoll und bin dabei auf ein Prinzip-Problem gestoßen.

Und Du meinst, Du wärst Der erste, dem das aufgefallen ist? Wenn Du den RFC 5321: "Simple Mail Transfer Protocol" statt des Wikipedia-Artikels liest, weißt Du, daß da andere dieses Problem schon bedacht haben. Abschnitt 4.5.2 beschreibt, was da zu tun ist.

lks

PS: Schon im Ur-RFC821: "SIMPLE MAIL TRANSFER PROTOCOL" von Jonathan B. Postel
wurde das 1982 schon beschrieben.
Member: dog
dog Mar 22, 2014 at 10:27:23 (UTC)
Goto Top
Um es nicht zu spannend zu machen: Der "." wird escapt indem via SMTP ".." gesendet wird.
Member: Lochkartenstanzer
Lochkartenstanzer Mar 22, 2014 at 10:34:01 (UTC)
Goto Top
Zitat von @dog:

Um es nicht zu spannend zu machen: Der "." wird escapt indem via SMTP ".." gesendet wird.

Und der Empfänger weiß, daß wenn er eine zeile mit nur einem einzigen Punkt enthält, die datenübertragung zu Ende ist und entfent ansonsten vonjeder Zeile die mit einem Punkt anfängt den ersten Punkt.

lks
Member: Lochkartenstanzer
Lochkartenstanzer Mar 22, 2014 at 10:38:50 (UTC)
Goto Top
Noch Ergänzend dazu:

wenn man wie ich gerne auch Mail per telnet oder netcat verschickt. soltle man natürlich dafür sorgen, daß dieses escapen manuell passiert., indem man z.B. per sed die Punkte am Anfang verdoppelt.

lks