Dateien mit Perl per E-Mail verschicken
Erik Tews
Hallo
weis hier jemand wie ich eine Datei in Perl per E-Mail verschicken kann? Ich konnte leider nirgendwo Beispielcode finden. Wie es mit Text geht, weis ich aus Selfhtml. Doch zu Dateien konnte ich noch nichts finden.
Hallo Erik,
es gibt mehrere Möglichkeiten, ein File zu senden.Grundsätzlich
muß die Datei codiert werden, um sie zu versenden,
entweder mit uuencode oder mit base64. Ein einfaches
Beispiel mit uuencode (achtung, ungetestet...):
$uuprog = "/usr/bin/uuencode"; #pfad für das uuencode-programm
$attachedFile = "/image.jpg";
$attachedFileName = "image.jpg";
@attachedFile = $uuprog $attachedFile $attachedFileName
; # datei codieren
open (MAIL, "| $mailprog -t") || die "Can't open $mailprog!\n";
#hier die normalen felder wie subject, usw. ausgeben...
print MAIL "Attachment: $attachedFileName\n\n";
print MAIL @attachedFile;
print MAIL "\n\n";
close (MAIL);
Die zweite Möglichkeit ist, eine Email zu senden, die dem MIME-Standard folgt,
dann wird das Senden etwas komplizierter, da noch einige zusätzliche Zeilen ausgebenen
werden müssen, und man sich, glaube ich, auch um die MIME-Typen der Datei
kümmern muß (kodieren muß man es so oder so). Ein Beispiel für ein solches MIME-kompatibles Skript findest Du hier
http://www.bewley.net/perl/tidbits/getit.html
'hoffe das hilft
Stephan
Hallo Erik,
es gibt mehrere Möglichkeiten, ein File zu senden.Grundsätzlich
muß die Datei codiert werden, um sie zu versenden,
entweder mit uuencode oder mit base64. Ein einfaches
Beispiel mit uuencode (achtung, ungetestet...):$uuprog = "/usr/bin/uuencode"; #pfad für das uuencode-programm
$attachedFile = "/image.jpg";
$attachedFileName = "image.jpg";
@attachedFile =$uuprog $attachedFile $attachedFileName
; # datei codieren
open (MAIL, "| $mailprog -t") || die "Can't open $mailprog!\n";
#hier die normalen felder wie subject, usw. ausgeben...
print MAIL "Attachment: $attachedFileName\n\n";
print MAIL @attachedFile;
print MAIL "\n\n";
close (MAIL);
Ich bekomme leider nur Borken pibe. Den Pfad zum image.jpg habe ich entsprechend geändert. Könntest du den Code noch etwas fertiger machen? Also so, daß ich nur noch Adresse und den Pfad zur Bilddatei abändern muß.
Die zweite Möglichkeit ist, eine Email zu senden, die dem MIME-Standard folgt,
dann wird das Senden etwas komplizierter, da noch einige zusätzliche Zeilen ausgebenen
werden müssen, und man sich, glaube ich, auch um die MIME-Typen der Datei
kümmern muß (kodieren muß man es so oder so). Ein Beispiel für ein solches MIME-kompatibles Skript findest Du hier
Also bei den Verschiedenen Möglichkeiten blicke ich nicht so ganz durch. Ich will, daß die Datei so verschickt wird, daß man sie ganz normal im Netscape abspeichern kann.
Hallo Erik,
Ich bekomme leider nur Borken pibe. Den Pfad zum image.jpg habe ich entsprechend geändert. Könntest du den Code noch etwas fertiger machen? Also so, daß ich nur noch Adresse und den Pfad zur Bilddatei abändern muß.
Eigentlich sollte es so funktionieren, wie es dasteht, wenn die Pfade stimmen, und
die restlichen Felder ergänzt werden. Was ist "Borken pibe"?
Also bei den Verschiedenen Möglichkeiten blicke ich nicht so ganz durch. Ich will, daß die Datei so verschickt wird, daß man sie ganz normal im Netscape abspeichern kann.
Das Problem an der Sache ist, daß Anhängen der Datei bedeutet, daß am Ende der
Email nach einer speziell definierten Zeile die Datei in Form von alphanumerischen
Zeichen angehängt wird. Es gibt scheinbar (aber da blicke ich auch nicht ganz durch) den
MIME-Standard und die Version, die das Skript in meinem ersten Post benutzt (die, glaube ich, älter und unflexibler ist?).
MIME ist der Standard, den Outlook und Netscape beim Senden verwenden.
Schau Dir einfach mal den Quelltext einer Email mit Datei in Outlook an,(wenn Du's hast,
ich weiß nicht, ob das bei Netscape geht), dann siehst Du, wie eine solche MIME-
Codierung abläuft: Im Header wird z.B. mit:
Content-type: multipart/mixed;
boundary="part0_914502695_boundary"
dem Emailprogramm gesagt, daß die Email ein oder mehrere angehängte Dateien
enthält, die nach dem definierten boundary-string anfangen. Vor dem eigentlichen Text
steht dann z.B.:
--part0_914502695_boundary
Content-ID: <0_914502695@inet_out.mail.aol.com.1>
Content-type: text/plain; charset=ISO-8859-1
Content-transfer-encoding: quoted-printable
Am Ende des normalen
Emailtextes folgt dann ein Header wie der folgende
-part0_914502695_boundary
Content-ID: <0_914502695@inet_out.mail.aol.com.2>
Content-type: application/zip;
name="zeichnungen.ZIP"
Content-transfer-encoding: base64
Content-disposition: inline
gefolgt von der Datei in Form alphanumerischer Zeichen, und am Schluß nochmal
der Borderstring:
--part0_914502695_boundary--
Auch jede HTML-Email wird so gesendet, zuerst der Text ohne Formatierung,
und dann das gleiche nochmal mit HTML und content-type text/html, so
daß man in einem Emailprogramm, daß HTML-Mails nicht unterstützt, aber MIME,
wie z.B. Outlook 97, den normalen Text sieht, und die HTML-Seite als angehängte
Datei.
Diese ganzen Header und Borderlines muß dein Script ausgeben. Das ganze
ändert also nichts am Auruf von Sendmail, sondern man muß "nur" die entsprechen
zusätzlichen Zeilen und codierten Files an den Text anhängen, was aber wegen der
verschieden MIME-Typen ein wenig kompliziert werden kann, glaube ich.
Die Verschlüsselung der Datei mit base64 oder uuendcode dient dazu, daß
nicht die Datei durch irgendwelche verschiedenen Standards in der Zuordnung
von Zeichen (verschiedene Betriebssysteme o.ä.) beim Versender und Empfänger
durcheinandergebracht wird.
Es gibt irgendwo eine FAQ für die MIME-Newsgroup, die URL weiß ich gerade nicht,
dort sollten die notwendigen Zeilen und ihre Bedeutung erklärt sein
Grüße
Stephan