Roland Koch: Formular via E-Mail versenden

Beitrag lesen

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