Schrift
[thread]434[/thread]

mit perl eine mail versenden als html formatierter (Seite 2)

Leser: 1


<< |< 1 2 >| >> 16 Einträge, 2 Seiten
Dubu
 2005-02-15 13:22
#4408 #4408
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Ich moechte mal wieder dringend empfehlen, eines der Module zum Mailversand zu benutzen, das mit MIME-Mails zurecht kommt, wie z.B. das schon genannte Mail::Sender, MIME::Lite oder anderes.

Handgemachte Loesungen sind selten standardkonform. Oft ist es mehr Glueckssache, wenn die Mails vollstaendig beim Empfaenger ankommen, und es ist der Toleranz der Mail User Agents zu verdanken, wenn sie dann noch korrekt angezeigt werden.

Hier ein paar der Probleme:
- Keine der oben gezeigten handgemachten Loesungen enthaelt einen "MIME-Version"-Header. Der ist aber Pflicht, wenn eine Mail einen "Content-Type"-Header und etwas anderes als US-ASCII Plaintext enthaelt.
- Keine der Loesungen beruecksichtigt, dass evtl. der HTML-Code Umlaute oder andere Zeichen ausserhalb von US-ASCII enthaelt.
- Was ist mit ueberlangen Zeilen? Ein Mail Transfer Agent muss nur mit maximal 998 Bytes + CRLF pro Zeile zurechtkommen. Wenn man HTML-Code automatisiert zusammenstellt, achtet man selten auf Zeilenlaengen.

Module wie Mail::Sender kuemmern sich um all diese Details, damit ein Programmautor nicht gezwungen ist RFC 2045 etc. zu lesen und zu implementieren.
format_c
 2005-02-15 13:59
#4409 #4409
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Ich finde es aber wiederrum besser wenn man erst mal im Ansatz vesteht wie das Prinzip Mail überhaupt funktioniert bevor man sich diesen Standardmodulen zuwendet. Das trägt ungemein zum Verständnis bei. Dass die Standardmodule 1000 eher dem Standards entsprechen ist keine Frage. diese kann man dann verwenden und versteht auch was man da macht wenn man sie anwendet. Wenn man dann noch genau wissen will wie sich so eine Mail komplett mit MIME-Types, etc. pp incl Attachments boundary's zusammen setzt kann man sich ja dann auch noch anschauen. Soweit ich weiß hat Erik dazu ja auch mal einen Artikel ins Wiki gestellt.

Gruß Alex
Dubu
 2005-02-15 23:00
#4410 #4410
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=format_c,15.02.2005, 12:59]Ich finde  es aber wiederrum besser wenn man erst mal im Ansatz vesteht wie das Prinzip Mail überhaupt funktioniert bevor man sich diesen Standardmodulen zuwendet. Das trägt ungemein zum Verständnis bei.
[/quote]
Da bin ich voll deiner Meinung. Persoenlich habe ich auch zuerst die entsprechenden RFCs durchgearbeitet, bevor ich meine ersten Mails "von Hand" erzeugt habe.

Ich moechte aber niemandem vorschreiben, dass er erst dutzende bis hunderte von Seiten trockener Standards durchlesen muss, bevor er sein Web2Mail-Interface zusammenhackt. Diese Arbeit haben sich schon andere gemacht, und deshalb gibt es all diese schoenen Module.

<rant>
Worum ich aber jeden hoffnungsvollen Aspiranten bitten moechte, ist, dass er doch um roots Willen keine [i]unausgegorenen, unsicheren, Standards ignorierenden "Works-for-me"-Loesungen[/i] auf das Internet und anderer Leute Server loslaesst.
</rant>

*Uff*, das musste heraus. Tut mir leid, aber das Trauma "Matt's Script Archive" sitzt tief ...

Quote
Dass die Standardmodule 1000 eher dem Standards entsprechen ist keine Frage. diese kann man dann verwenden und versteht auch was man da macht wenn man sie anwendet.

Ja, gut so.

Quote
Wenn man dann noch genau wissen will wie sich so eine Mail komplett mit MIME-Types, etc. pp incl Attachments boundary's zusammen setzt kann man sich ja dann auch noch anschauen.

Vielleicht ist es oben nicht ganz klar geworden: Sobald man irgend etwas anderes als US-ASCII in einer Mail verschickt, braucht man MIME, wenn es standardkonform sein soll. Hier geht's nicht um Multipart-Mails und irgendwelche Attachments, sonder schon darum, dass jemand HTML statt Plaintext verschicken moechte. Wenn der MUA des Empfaengers erkennen soll, dass das tatsaechlich eine HTML-Mail sein soll und nicht der Absender einfach ein paar HTML-Tags in seinen (Plain-)Text eingetreut hat, braucht man eine passende MIME-Deklaration.

Wenn man das ignoriert, landet man bei solchen Scheusslichkeiten wie dem IE und Outlook (Express? keine Ahnung), die anhand des Inhalts einer Webseite oder einer Mail erraten(! ) wollen, was sie fuer einen Inhaltstyp hat. Da schreibt man einfach irgendwo "<html>" an den Anfang seiner Mail und der ganze Inhalt wird als HTML-Code interpretiert, egal ob im Mail-Header text/plain oder image/png steht.

Quote
Soweit ich weiß hat Erik dazu ja auch mal einen Artikel ins Wiki gestellt.

Stimmt, den hatte ich schon fast vergessen. Gute Einfuehrung.
Hier: http://wiki.perl-community.de/bin....chments
heinz.hemer
 2005-02-16 01:29
#4411 #4411
User since
2005-02-14
6 Artikel
BenutzerIn
[default_avatar]
Hallo !

Ich habe mal Deinen Vorschlag ausprobiert und es klappt - teilweise.

Ich habe im Text Variablen, die schreibt das Script so wie sie da stehen in die Mail

z.B.:From: "$email";

Da steht dann nicht meine Mail-Adresse drin sondern "$email

Auch alle anderen Variablen werden so ausgegeben.

Was ist noch falsch ?
esskar
 2005-02-16 01:52
#4412 #4412
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
du musst aufpassen:
verwechsel nicht ' mit " !
heinz.hemer
 2005-02-16 13:08
#4413 #4413
User since
2005-02-14
6 Artikel
BenutzerIn
[default_avatar]
Hallo !

Es klappt endlich !!!

Hier die Lösung:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
my $html = qq[ 

<html>

<head>
<meta http-equiv="Content-Type"
content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage Express 2.0">
<title>Normale Seite ohne Titel</title>
</head>

<body bgcolor="#FFFFFF">

<p align="center"><font size="4"><strong>Dieses ist ein </strong></font><font
color="#0080FF" size="4"><strong>formatierter</strong></font><font
size="4"><strong> Text in html</strong></font></p>

<p>&nbsp;</p>
</body>
</html>

];

                      print SM "From: $email\n";
         print SM "To: $in{'email'}\n";
                      print SM "Subject: $rsubject $date\n";
         print SM "Content-type: text/html\n";
                      print SM "\n";# Hier ist der Mail header zu ende!!!!!!!!

                      print SM "$html";

close(SM);


Nochmal vielen Dank an alle.

Heinz

edit renee: ne Runde [code]-Tags spendiert\n\n

<!--EDIT|renee|1108554630-->
<< |< 1 2 >| >> 16 Einträge, 2 Seiten



View all threads created 2005-02-14 16:55.