Paul: Mail mit Anhang versenden

Hallo zusammen!
Habe immernoch das Problem, das ich ein E-Mail mit Anhang über ein Script versenden möchte.
Habe dafür ein kleines Script, das aber das MIME::Lite Modul benötigt, was nicht standardmäßig auf meinem Server installiert ist.
Deshalb hab ich es einfach so versucht, dass ich das Modul auf den Sever lade und mit require einbinde.
Leider funktioniert, das Script nicht... und aus dem ErrorLog wird man nicht wirklich schlau.
Ist in dem Script an sich ein Fehler oder liegt es daran, dass das Modul nicht wirklich installiert ist und ich das Ganze somit vergessen kann??
Gruß, Paul

require "Lite.pm";

use Mime::Lite;

my $msg = new MIME::Lite;
my $tomail="bla@blabla.de";

$msg = build MIME::Lite
        From    => $tomail,
        To      => $tomail,
        Subject => "blablabla",
        Type    => 'TEXT',
        Data    => "blablabla";

attach $msg
       Type     => "image/gif",
       Path     => "blablabla.gif",
       Encoding => "base64",
       Filename => "blablabla.gif";

$msg->send;

  1. Hello,

    schau Dir mal http://bitworks.de/~selfHTML/mime_mail.php.txt an

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    1. Hi,

      schau Dir mal http://bitworks.de/~selfHTML/mime_mail.php.txt an

      Dankeschön, aber ich wollte das ganze möglichst in Perl und ganz simpel ohne Formular lösen (mit PHP kenne ich mich nicht sonderlich gut aus und das Mail soll nur an mich selber gehen, also kann der Empfänger und der Anhang fest im Script stehen).

      Liebe Grüße aus http://www.braunschweig.de

      Hey, das liegt ja gleich nebenan... :)

      Gruß, Paul

      1. Hello Paul,

        schau Dir mal http://bitworks.de/~selfHTML/mime_mail.php.txt an

        Dankeschön, aber ich wollte das ganze möglichst in Perl und ganz simpel

        Oh, entschuldige bitte. Da hatte ich wohl Tomaten auf den Augen.
        Die header kannst Du aber trotzdem benutzen, ist doch egal, ob sie durch PERL oder durch PHP generiert werden. Und sonst noch ein Tipp: bastel Dir einfach einige Mustermails mit dem eMail-Client Deines Vertrauens und schau hinterher rein in den Quellcode, den der verzapft hat.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. use Mosche;

    Habe dafür ein kleines Script, das aber das MIME::Lite Modul benötigt, was nicht standardmäßig auf meinem Server installiert ist.
    Deshalb hab ich es einfach so versucht, dass ich das Modul auf den Sever lade und mit require einbinde.
    Leider funktioniert, das Script nicht... und aus dem ErrorLog wird man nicht wirklich schlau.

    Tja, wir können dir auch nicht wirklich weiterhelfen, wenn du uns den entsprechenden Teil deiner ErrorLog nicht gibst.

    Ist in dem Script an sich ein Fehler oder liegt es daran, dass das Modul nicht wirklich installiert ist und ich das Ganze somit vergessen kann??

    Prinzipiell solltest du in dem Verzeichnis, in dem deine CGI.Scripte sind, ein Verzeichnis namens MIME erstellen. Da kopierst du die Datei Lite.pm rein.
    Es kann sein, dass die "Distribution" MIME::Lite aus mehr als einer Datei besteht. Wenn er also nachher irgendwas von "Can't find..." (o.s.ä) sagt, dann weißt du, dass entsprechende Module da auch rein gehören.

    Dann schreibst du in dein Script ganz einfach
    use MIME::Lite;
    und dann sollte es funktionieren. Funktioniert es nicht, solltest du die Rechte auf das MIME Verzeichnis neu setzen (ggf. kann der Webserver nicht darauf zugreifen?) oder nochmals aus deiner Error-Log posten.

    require "Lite.pm";

    use Mime::Lite;

    MIME, nicht Mime. Bin aber ziemlich sicher, dass es auf diesen Weg nicht funktioniert.

    use Tschoe qw(Matti);

    --
      Anyone who quotes me in their sig is an idiot. -- Rusty Russell.
  3. Hallo!

    Inzwischen habe ich es geschafft, das über mein Perl-Script ein E-Mail mit Anhang versadt wird. Habe dazu aber noch einige Fragen:

    1.) Der Anhang wird in Outlook unter dem E-Mail angezeigt. Ist das eine Funktion von Outlook oder kann ich es so machen, dass der Anhang per Hand geöffnet werden muss, also nicht unter dem E-Mail steht?
    Wenn das nicht möglich ist, kann ich das Mail auch ohne normalen Inhalt versenden, sodass im Body halt nur der Anhang angezeigt wird? Wenn ich für Data "" nehme, wird auch der Anhang nicht mehr unter dem Mail angezeigt, bzw. die Datei hat eine Größe von 0KB...

    2.) Unter dem E-Mail wird der Anhang formatiert angezeigt, wenn ich ihn per Hand öffne fehlen jedoch die Zeilenumbrüche. Habe schon versucht für das Encoding ASCII zu nehmen, aber das hat nicht funktioniert. Wie bekomme ich das in den Griff?

    3.) Müssen noch weitere Header angegeben werden? Gibt es dafür eine verbindliche Spezifikation? Wenn ja, wo finde ich die?

    4.) Zu guter Letzt... das Mail wird zwar korrekt versandt, dennoch erzeugt das Script einen Fehler (Premature end of script headers). Ich finde darin jedoch keinen... was ist zu tun?!

    Vielen Dank und schöne Grüße!
    Paul

    #!/usr/bin/perl

    require "/pfad/zum/modul/MIME/Lite.pm";

    use MIME::Lite;
    use POSIX qw(strftime);

    my $msg = new MIME::Lite;
    my $tomail = "user@host.de";
    my $datestring = strftime("%A, %d. %B %Y", localtime);

    $msg = build MIME::Lite
    From    => $tomail,
    To      => $tomail,
    Subject => $datestring,
    Type    => "TEXT",
    Data    => $datestring;

    attach $msg
    Type     => "TEXT",
    Path     => "/pfad/zum/anhang/log.txt",
    Encoding => "base64",
    Filename => "log.txt";

    $msg->send;

    1. use Mosche;

      4.) Zu guter Letzt... das Mail wird zwar korrekt versandt, dennoch erzeugt das Script einen Fehler (Premature end of script headers). Ich finde darin jedoch keinen... was ist zu tun?!

      Du gibst ja auch gar nichts an den Client (Webbrowser) aus. Zumindest ein Header sollte es schon sein...

      use Tschoe qw(Matti);

      --
        Anyone who quotes me in their sig is an idiot. -- Rusty Russell.