Tipps & Tricks
Hilfestellungen rund um die Themen Internet & Programmierung
Hamster-Mailserver: Die Fehlermeldung "linelength-limit exceeded"
Wenn man z.B. mit PHP ein HTML-E-Mail dynamisch erstellt, kann es schnell passieren, dass der Quelltext die maximal zulässige Zeichenanzahl pro Zeile überschreitet.
Mein Hamster verträgt knapp 1.940 Zeichen pro Zeile, danach macht er dicht. Das ist
allerdings schon mehr, als die MIME-Spezifikation RFC 2045
eigentlich zulässt, da sind es nämlich nur 998 Zeichen.
Wie auch immer, ich wollte kürzlich ein HTML-Mail mit einer dynamisch generierten Tabelle von PHP erstellen und versenden lassen. Der Quelltext wurde dabei relativ lang und als ich das Mail versenden wollte, kam es nicht im Hamster an. Stattdessen meldete dieser:
WAR {a68} TSrvSMTPCli.Recv(676): Verbindung beendet: linelength-limit exceeded
Nach einer schnellen Google-Suche (u.a. in den Google-Hamster-Groups ) war ich so schlau wie vorher: mindestens eine Zeile meines Mails ist zu lang. Naja, kein Wunder, wenn man alles in einen String packt und keinen Zeilenumbruch einfügt. Doch auch das Einfügen von kontrollierten "\n"s und <br>s brachte keine Änderung.
Letztendlich fand ich die Lösung in den zusätzlichen Headern, die ich der PHP-eigenen mail()-Funktion schon richtig mitgegeben hatte:
<?php
mail('admin@localhost',$betreff,$nachricht,"From:admin@localhost\r\nContent-Type:text/html\r\nContent-Transfer-Encoding: 8bit\r\n");
?>
Anstelle von "\n" einfach "\r\n" an sinnvollen Stellen einfügen und so die Zeilenumbrüche kontrollieren. Dabei darf natürlich eine Zeile zwischen zwei "\r\n"s nicht mehr als 1000 Zeichen haben.
Übrigens: Reine Textmails (oder natürlich auch reine Textblöcke innerhalb von HTML) können mit der PHP-Funktion wordwrap() einfach umgebrochen werden. Dabei empfiehlt es sich, die maximale Zeichenzahl von 70 Zeichen pro Zeile nicht zu überschreiten:
<?php
echo wordwrap($nachricht,70,"\r\n");
?>
Für HTML-Mails ist diese Funktion allerdings nicht unbedingt zu empfehlen, weil sie auch innerhalb von Tags Umbrüche
verursacht. Mehr zu wordwrap() gibt es hier in der
PHP-Dokumentation
