Erik Tews: Dateien mit Perl per E-Mail verschicken

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.

  1. 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

    1. 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

      http://www.bewley.net/perl/tidbits/getit.html

      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.

      1. 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