(PERL) kompatible Mails verschicken
Sven Rautenberg
Moin!
E-Mail und Perl sind beides nicht meine erklärten Fachgebiete, deshalb frage ich mal nach ein paar Ansichten von Leuten, die mit Folgendem schon Erfahrung haben:
Ich habe ein Newsletter-Skript in Perl vorliegen. Das mailt relativ uninspiriert an die Abonnenten mit folgendem Code:
open (MAIL,"|$mailer -t")||die_error($admin, "Error: ...opening $mailer\n");
print MAIL "To: $mail_to\n";
print MAIL "From: $mail_from\n";
print MAIL "Subject: $subject\n";
print MAIL "$letter\n";
print MAIL "@signature\n";
close(MAIL);
Ja, dafür gibts mit Sicherheit ein tolles Modul. Kann und will ich nicht einsetzen, weil ich diesen Teil nur schnell hotfixen soll, damit die Mails, die teilweise Sonderzeichen wie z.B. Umlaute oder das Eurozeichen enthalten, bei allen Mailsystemen ordnungsgemäß empfangen werden.
Welche der vielen möglichen SMTP-Header sind dafür zuständig, den Zeichensatz zu definieren bzw. den reibungslosen Empfang zu gewährleisten? Ich habe als potentielle Möglichkeiten "Content-type: text/plain; charset=ISO-8859-1" und "Content-transfer-encoding: 8bit" entdeckt.
Gibts da einen Königsweg? Oder zumindest eine sehr gut funktionierende Methode? Wer hat Erfahrungen gesammelt? Ich würde, wenn es sich vermeiden läßt, auf irgendwelches MIME-Encoding eher verzichten, es sei denn, dafür müßten nur noch weitere Header hinzugefügt werden.
- Sven Rautenberg
Hola,
open (MAIL,"|$mailer -t")||die_error($admin, "Error: ...opening $mailer\n");
print MAIL "To: $mail_to\n";
print MAIL "From: $mail_from\n";
print MAIL "Subject: $subject\n";
print MAIL "$letter\n";
print MAIL "@signature\n";
close(MAIL);
Versuche mal
print MAIL "Subject: $subject\n";
zu print MAIL "Subject: $subject\n\n";
und
print MAIL "@signature\n";
zu print MAIL "@signature\n\n";
zu ändern.
Das hat irgend etwas mit den Headern zu tun, aber so genau kann ich das auch nicht sagen. Sonst kann ich inzwischen keinen Fehler finden außer, dass ich die Zeile From: immer als Erste schreibe, aber ich glaube nicht, dass es irgendwie eine Auswirkung hat.
$xNeTworKx
Moin!
Versuche mal
print MAIL "Subject: $subject\n";
zu print MAIL "Subject: $subject\n\n";und
print MAIL "@signature\n";
zu print MAIL "@signature\n\n";zu ändern.
Ja, die Problematik, die Subject-Zeile besser abzutrennen ist mir auch schon begegnet. Es dreht sich bei dem eigentlichen Problem aber definitiv um die Zeichensatzangabe. Was setzt man da sinnvollerweise hin, was ist erfahrungsgemäß erfolgreich?
- Sven Rautenberg
Hi Sven,
Ich habe ein Newsletter-Skript in Perl vorliegen. Das mailt relativ uninspiriert an die Abonnenten mit folgendem Code:
Da du die nach meiner Meinung richtige Lösung eigentlich schon weiter unten in deinem Ausgangsposting schreibst, ergänze ich die beiden Zeilen einfach mal:
print MAIL "To: $mail_to\n";
print MAIL "From: $mail_from\n";
print MAIL "Subject: $subject\n";
print MAIL "Content-Type: text/plain; charset="iso-8859-1"\n";
print MAIL "Content-Transfer-Encoding: 8bit\n\n";
Mit dem zweiten "\n" zeigst du das Ende des Mail-Headers an.
Ja, dafür gibts mit Sicherheit ein tolles Modul.
Nicht schon wieder ... :-))
Gibts da einen Königsweg? Oder zumindest eine sehr gut funktionierende Methode?
Diese Methode müsste nach meiner Meinung funktionieren, getestet habe ich sie allerdings nicht. Solltest du weitere Infos brauchen, wirf mal einen Blick hierhin: http://www.netzmafia.de/skripten/perl/perl4.html.
Viele Grüße
Torsten
Hi nochmal,
print MAIL "Content-Type: text/plain; charset="iso-8859-1"\n";
print MAIL "Content-Transfer-Encoding: 8bit\n\n";
Habs gerade getestet, es müsste so problemlos funktionieren.
Viele Grüße
Torsten
Moin!
Ich habe ein Newsletter-Skript in Perl vorliegen. Das mailt relativ uninspiriert an die Abonnenten mit folgendem Code:
Da du die nach meiner Meinung richtige Lösung eigentlich schon weiter unten in deinem Ausgangsposting schreibst, ergänze ich die beiden Zeilen einfach mal:
Ich habe dann doch noch mal einen Blick in die RFC 2045 geworfen und finde, da fehlt noch eine Zeile mit der MIME-Versionsangabe.
print MAIL "To: $mail_to\n";
print MAIL "From: $mail_from\n";
print MAIL "Subject: $subject\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-Type: text/plain; charset="iso-8859-1"\n";
print MAIL "Content-Transfer-Encoding: 8bit\n\n";
Die RFC 2045 beschreibt jedenfalls diese beiden Content-Header. Und wenn man, so das Dokument http://www.mhonarc.org/~ehood/MIME/2045/rfc2045.html, diese verwendet, muß man die Mime-Angabe auch reinbauen.
Ich werd's damit jedenfalls jetzt mal testen - wenngleich ich nicht erwarte, dass es bei _mir_ falsch ankommt - und anderer Leute Mails kann ich schwerlich prüfen.
- Sven Rautenberg
Moin!
Ergänzend:
print MAIL "To: $mail_to\n";
print MAIL "From: $mail_from\n";
print MAIL "Subject: $subject\n";
print MAIL "MIME-Version: 1.0\n";
print MAIL "Content-Type: text/plain; charset="iso-8859-15"\n";
print MAIL "Content-Transfer-Encoding: 8bit\n\n";
Mit ISO-8859-15 klappts dann auch mit dem Eurozeichen. Jedenfalls bei mir.
- Sven Rautenberg
Hi nochmal,
Ich habe dann doch noch mal einen Blick in die RFC 2045 geworfen und finde, da fehlt noch eine Zeile mit der MIME-Versionsangabe.
Soweit ich weiß, erzeugt sendmail die Angabe der MIME-Version im Header bereits von sich aus, sodass du sie in diesem Fall nicht nochmal explizit angeben müsstest. Aber schaden tut's jedenfalls meines Wissens nach nix, sie noch mal anzugeben.
Viele Grüße
Torsten