Michael Krueger: Formular via E-Mail versenden

Hello world!
Ist es moeglich, ein ausgefuelltes Formular via e-mail zu uebertragen, ohne auf dem Client-Rechner ein e-mail-Programm zu verwenden? (==> action="mailto:....")
Bei meinen Tests wird immer wieder der lokale e-mail-Client aufgerufen, sein MSG-Body bleibt jedoch leer!

Danke im voraus fuer alle Hinweise!

Mfg
M. Krueger

  1. Hallo Michael,
    es ist möglich, aber nicht ohne ein kleines CGI-Script.

    Hier mal eines unserer Mail-Scripte. Es sollte funktionieren.

    ---------------------Diese Zeile gehört nicht mehr dazu

    #! /usr/bin/perl

    Aufruf: <form action=http://www.ganymed.de/cgi-bin/www/nph-infomail.pl?user=Willi!page=index_response.html

    #          method=post>

    %recipients = ('Willi', 'info@willi.de',                  # Liste möglicher Empfänger und deren E-Mail Adressen
                   'Peter', 'info@peter.de') ;
    $sender     = 'infomail@gaga.de (Infomail)' ;             # Absenderadresse
    $mailprog   = '/usr/lib/sendmail' ;                       # Mail-Programm
    $referer    = 'gaga.de' ;                                 # Domain aus der Script gerufen wird

    if ($ENV{'HTTP_REFERER'} =~ m/$referer/i) {
      $redirect = $ENV{'HTTP_REFERER'} ;
      $redirect =~ s/([^/]*)$// ;
      $query = $ENV{'QUERY_STRING'} ;
      $spacer = "!" ;
      if ($query) {
        @pairs = split(/$spacer/,$query) ;
        foreach $pair (@pairs) {
          ($key, $value) = split(/=/, $pair);
          $value         =~ tr/+/ /;
          $text{$key}    = $value ;
        }
      }
      $redirect = $redirect . $text{'page'} ;
      if (exists $recipients{$text{'user'}}) {
        $recipient = $recipients{$text{'user'}} ;
        &send_mail ;
        print "$ENV{'SERVER_PROTOCOL'} 302 Found\n";
        print "Location: $redirect\n\n";
      }
    }

    sub parse_form {
      read (STDIN, $buffer, $ENV{'CONTENT_LENGTH'}) ;
      @pairs = split(/&/, $buffer) ;
      push(@pairs, @ARGV) ;
      foreach $pair (@pairs) {
        $pair =~ tr/+/ / ;
        $pair =~ s/%(0[adAD])/%20/g ;
        $pair =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg ;
        print MAIL "$pair\n" ;
      }
    }

    sub get_time {
      my($min, $hour, $day, $month, $year) ;
      ($sec, $min, $hour, $day, $month, $year) = (localtime(time))[0,1,2,3,4,5] ;
      if ($min < 10) {
        $min = "0" . $min ;
      }
      if ($sec < 10) {
        $sec = "0" . $sec ;
      }
      $month++ ;
      $date = "$day. $month. $year" ;
      $time = "$hour:$min" ;
    }

    sub send_mail {
      open (MAIL,"|$mailprog -t") ;
      print MAIL "To: $recipient\n\n";
      print MAIL "From: $sender\n" ;
      print MAIL "Subject: Infomail\n\n" ;
      &get_time ;
      print MAIL "Infoanforderung vom $date, $time\n" ;
      print MAIL "--------------------------------------------------------------------------------\n\n" ;
      &parse_form ;
      print MAIL "--------------------------------------------------------------------------------\n\n" ;
      print MAIL "end\n" ;
      close MAIL ;
    }

    ---------------------Diese Zeile gehört nicht mehr dazu

    Viel Erfolg
    Roland

  2. Das Skript von Roland ist sicher nicht übel, aber es geht auch einfacher...

    Leider kann ich Dir den genauen Sourcecode derzeit nicht liefern (Firewall vom Betrieb) aber, ich kann Dir sagen welches Skript Du nutzen darfst:

    Aufruf aus HTML:
    <form action="http://www.m-online.de/maschinen-baur/cgi/email.cgi" method="post">

    Folgende Werte mußt (bzw. solltest) Du dem Skript mitgeben (Als input type="hidden" oder ähnlich)

    fp_from         ..Absender
    fp_to            ..Empfänger  *wichtig*
    fp_sub         ..Subject
    fp_danke      ..File die automatisch nach ausführen gestartet wird (Dankefile)
    fp_echo?      ..Text der unter die Mail gehangen wird (Es empfiehlt sich diesen Teil als "hidden"
                         beizusteuern). Anstelle des "?" muß irgendwas stehen (Zahl oder Buchstabe, hat
                         mit der Reihenfolge aber nichts am Hut.

    Am wichtigsten ist "fp_to" den Rest kannst du Dir auch schenken.

    Alle weiteren Werte werden wiefolgt übergeben:

    name = wert

    -----------
    Solltest Du interesse am Sourcecode haben, oder sonstige Fragen aufkommen, kannst Du dies gerne per E-Mail tun.

    Gruß Andre