Lude: form mailer mit smtp::lite

Hi,

ich benoetige einen form mailer mit mime::lite (Windows-System ohne sendmail). Gibt's sowas?

Gruss,
Lude

  1. hi Lude

    auf http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.12.2.2

    ist ein Beispiel für MIME::Lite, das Modul ist nur eine Datei.

    Aber es geht auch ohne MIME::Lite
    http://i-netlab.de/cgi-bin/index.cgi?vi=Mail_Clients

    Wenn die Datei nach einem Upload gleich attached werden soll, baue ich die boundary selbst und lege die Datei nicht erst tmp. ab.

    Gruss, Erwin

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie kommt der Strom in die Leitung?
    1. Hi,

      auf http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.12.2.2

      ist ein Beispiel für MIME::Lite, das Modul ist nur eine Datei.

      Aber es geht auch ohne MIME::Lite
      http://i-netlab.de/cgi-bin/index.cgi?vi=Mail_Clients

      Wenn die Datei nach einem Upload gleich attached werden soll, baue ich die boundary selbst und lege die Datei nicht erst tmp. ab.

      danke, :-)
      aber,
      hilft mir nicht. ;-)

      Ich hatte da an einen allgemeintauglichen Form-Mailer gedacht, der idealerweise u.a. Pflichtfelder und andere Einschraenkungen unterstuetzt, oder auch E-Mailadressen validiert oder zudem noch eine "Dankeschoen, Formular ist abgeschicht"-Seite generiert.

      Fuer "sendmail" gibt's sowas. - Selbst entwickeln will ich das aus grundsaetzlichen Erwaegungen heraus natuerlich nicht.

      Gruss,
      Lude

      1. hi,

        untenstehendes Script kannst du vielleicht anpassen

        Erwin

        =============================================================
        #!/usr/bin/perl

        Versenden von Mails mit Attachment per Webfrontend

        Geschrieben von Rolf Rost, 13.7.2002

        ###########################################################################

        Benutzervorgaben

        Das Template fuer den Seitenaufbau bis zum body steht am Ende des Scripts

        Der Hostname des MailRelays (wo ein Mailtransfer Agent laueft)

        Normalerweise ist das der localhost, falls dort ein *sendmail* laeuft

        my $smtp_host = 'localhost';

        Absender, Vorbelegung Eingabefeld

        my $abs = 'rolfrost@web.de';

        Uploadbegrenzung ($max in bytes)

        my $max = 1024 * 1000;
        ###########################################################################
        use strict;
        use subs qw(a_html z_html form mime_send text_send abbruch);
        use CGI qw(-private_tempfiles );
        use Net::SMTP;
        use File::Basename;
        use MIME::Base64 qw(encode_base64);

        print "Content-type: text/html\n\n";

        my $q = new CGI;

        Ablauf des CGIs

        if($q->param){
         if($q->param('anhang')){ mime_send }
         else{ text_send }
        }
        else{
         a_html;
         form;
         z_html;
        }

        exit;

        Unterfunktionen

        Die Mail wenn ein Anhang dran ist

        sub mime_send{
         # Eingaben zuweisen
         my $abs = $q->param('abs_email') or abbruch "Fehlerhafte Eingabe","Backbutton klicken und Absenderemail eingeben";
         my $rcp = $q->param('rcp_email') or abbruch "Fehlerhafte Eingabe","Backbutton klicken und Empfängeremail eingeben";
         my $subj = $q->param('betreff');
         my $msg = $q->param('text');
         $subj ||= "Kein Betreff";

        # Uploadfeld parsen, Dateiname und MIME Type
         my $anhang = $q->param('anhang');
         fileparse_set_fstype("MSDOS");   # <--- empfohlen, falls Probleme bei MS WindowsClients...
         my ($original_filename, $local_path) = fileparse $anhang;
         my $mime_type = $q->uploadInfo($anhang)->{'Content-Type'};

        # den handler auslesen mit der read() funktion
         my ($bytesread,$buffer,$sum,$str);
         while ($bytesread=read($anhang,$buffer,1024)) {
          $str .= $buffer;
          $sum += $bytesread;
          if($sum > $max){
           abbruch("Die angehaengte Datei ist zu gross!","Der Prozess wurde abgebrochen")
          }
         }

        # den Anhang codieren
         my $base64_str = encode_base64($str);

        # Nun kann die Maildatei erstellt werden
        my $mailfile=<<"12----------------------------------------------------34";
        From: $abs
        To: $rcp
        Subject: $subj
        MIME-Version: 1.0
        Content-Type: multipart/mixed;
         boundary="roro"

        This is a multi-part message in MIME format.

        --roro
        Content-Type: text/plain;
         charset="iso-8859-1"
        Content-Transfer-Encoding: 7bit

        $msg

        --roro
        Content-Type: $mime_type;
         name="$original_filename"
        Content-Transfer-Encoding: base64
        Content-Disposition: attachment;
         filename="$original_filename"

        $base64_str

        --roro--

        12----------------------------------------------------34

        # senden
         my $smtp = new Net::SMTP($smtp_host) or abbruch("Keine Verbindung zu SMTP Host *$smtp_host*");
         # Ab geht die Post und tschuess
         $smtp->mail($abs);
         $smtp->to( $rcp );
         $smtp->data( $mailfile );
         $smtp->quit();

        # Das Senden verkuenden
         a_html;
         print qq(<h3>Die Mail mit Anhang wurde gesendet</h3>\n<p>Backbutton klicken oder <a href="$ENV{'SCRIPT_NAME'}">Script neu laden...</a>\n);
         z_html;
        }

        Die Mail wenn kein Anhang dran ist

        sub text_send{
         # Eingaben zuweisen
         my $abs = $q->param('abs_email') or abbruch "Fehlerhafte Eingabe","Backbutton klicken und Absenderemail eingeben";
         my $rcp = $q->param('rcp_email') or abbruch "Fehlerhafte Eingabe","Backbutton klicken und Empfängeremail eingeben";
         my $subj = $q->param('betreff');
         my $msg = $q->param('text');
         $subj ||= "Kein Betreff";

        # senden
         my $smtp = new Net::SMTP($smtp_host) or abbruch("Keine Verbindung zu SMTP Host *$smtp_host*");
         my $mailfile = qq(From: $abs\nTo: $rcp\nSubject: $subj\n\n$msg\n\n);
         # Ab geht die Post und tschuess
         $smtp->mail($abs);
         $smtp->to( $rcp );
         $smtp->data( $mailfile );
         $smtp->quit();

        # Das Senden verkuenden
         a_html;
         print qq(<h3>Die Mail wurde gesendet</h3>\n<p>Backbutton klicken oder <a href="$ENV{'SCRIPT_NAME'}">Script neu laden...</a>\n);
         z_html;
        }

        Abbruchfunktion bei Fehlerhafter Eingabe

        sub abbruch{
         print qq(<h1>$_[0]</h1>\n<p>$_[1]\n);
         exit;
        }

        Das Frontendformular

        sub form{
        print<<"x-----------------------------------------------------------------x";

        <form action="$ENV{'SCRIPT_NAME'}" method="post" enctype="multipart/form-data">

        <table border=1 cellspacing=0 cellpadding=0 width="80%">
        <tr><th colspan=2 align="left">Mailformular, bitte alle Felder ausfüllen</th></tr>
        <tr><td>Absender eMail: </td><td><input name="abs_email" size=50 value="$abs"></td></tr>
        <tr><td>Empfänger eMail: </td><td><input name="rcp_email" size=50></td></tr>
        <tr><td>Betreff: </td><td><input name="betreff" size=50></td></tr>
        <tr><td valign="top">Nachricht: </td><td><textarea name="text" cols=80 rows=20 wrap="physical"></textarea></td></tr>
        <tr><td colspan=2 align="center"><input type="submit" name="senden" value="Mail senden"><input type="reset" value="Eingaben verwerfen"></td></tr>
        <tr><td>Dateianlage: </td><td> <input type="file" name="anhang" size=60> </td></tr>
        </table>

        </form>
        x-----------------------------------------------------------------x
        }

        zwei Funktionen zum Seitenaufbau

        sub a_html{while(<DATA>){print}}
        sub z_html{print qq(</body>\n</html>\n)}

        ###########################################################################

        Kopf der HTML Datei ist hier definiert, Änderungen unterhal des __END__

        __END__
        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
        <HTML>
        <HEAD>
        <TITLE>xMail Frontend zum Versenden von Mails mit Anhang</TITLE>
        <LINK REL="stylesheet" HREF="/nv.css" TYPE="text/css">
        <META NAME="Author" CONTENT="Rolf Rost">
        </HEAD>
        <BODY>

        <h2>xMail Frontend zum Versenden von Mails mit Anhang</h2>