#!/usr/bin/perl
use strict;
use warnings;

$| = 1;

# ------------------ Beginn Konfiguration ----------------------
# Mailprogramm (in der Regel sendmail)
my $mailprog = '/usr/lib/sendmail -oi -t';

# Username oder Alias fuer den Webmaster, der die Mail bekommt
my $recipient = 'webmaster@host.domain.de';
# ------------------- Ende Konfiguration -----------------------

# Global: Formulardaten
my %FORM = ();

# Dokumenten-Kopf
print "Content-type: text/html\n\n";
print "<html><head><hitle>Formular-Antwort</hitle></head>\n";

ParseForm();
# Sind Formulardaten da?
if (defined($FORM{'submit'}))
  {
  # Antwortseite erzeugen
  print "<Body><H2>Danke!</H2>";
  # Falls die Antwort leer ist
  if (($FORM{'comments'} eq '') or ($FORM{'subject'} eq ''))
    {
    print "Sie haben leider nichts geschrieben oder den Betreff vergessen.\n";
    print "Deshalb wird auch keine E-Mail verschickt!<P>\n";
    }
  else
    {
    print "Vielen Dank f&uuml;r Ihren Kommentar. Er wird per E-Mail \n";
    print "an den Webmaster geschickt!<P>";
    # Wenn Parameter vorhanden sind, Mailversand
    send_mail();
    }
  }
# leerer Aufruf, Formular anzeigen
else
  { show_form(); }

print "<a href=\"javascript:history.back()\">Zur&uuml;ck</a>";
print "</body></html>\n";


sub send_mail
  {
  # E-Mail an $recipient senden, Formulardaten verwenden
  $FORM{'username'} =~ s/[ ;].*$//; # etwas 'putzen'
  open (MAIL, "|$mailprog") || die "Can't open $mailprog!\n";
  print MAIL "From: $FORM{'username'}\n";
  print MAIL "Reply-to: $FORM{'username'} ($FORM{'realname'})\n";
  print MAIL "To:  $recipient\n";
  print MAIL "Mime-Version: 1.0\n";
  print MAIL "Content-Type: text/plain; charset=iso-8859-1\n";
  print MAIL "Content-Transfer-Encoding: 8bit\n";
  print MAIL "Subject: [FEEDBACK] $FORM{'subject'}\n";
  print MAIL "\n";
  print MAIL "$FORM{'username'} ($FORM{'realname'}) schrieb:\n\n";
  print MAIL "$FORM{'comments'}\n";
  print MAIL "Remote IP: $ENV{'REMOTE_ADDR'}\n";
  close (MAIL);
  }

sub show_form
  {
  print qq~
   <HTML>
   <HEAD>
   <TITLE>WWWW to E-Mail</TITLE>
   </HEAD>
   <BODY>
   <H1>E-Mail-Kommentar</H1>
   <P>Mit diesem Formular k&ouml;nnen Sie eine E-Mail an unseren Webmaster
   schicken.
   </P><P>
   <FORM method=POST action="/cgi-bin/formular-mail.cgi">
   <TABLE BORDER=0 CELLPADDING=3>
   <TR><TD>Ihre E-Mail-Adresse:</TD>
       <TD><INPUT TYPE=TEXT NAME="username"></TD></TR>
   <TR><TD>Ihr Name:</TD>
       <TD><INPUT TYPE=TEXT NAME="realname"></TD></TR>
   <TR><TD>Betreff:</TD>
       <TD><INPUT TYPE=TEXT NAME="subject"></TD></TR>
   <TR><TD ALIGN=TOP>Hier bitte Ihren Text eingeben:</TD>
       <TD><TEXTAREA NAME="comments" ROWS=20 COLS=60> </TEXTAREA></TD></TR>
   <TR><TD>&nbsp;</TD>
       <TD><INPUT TYPE="submit" NAME="submit" VALUE="Mail versenden"></TD></TR>
   </TABLE>
   </FORM>
   </P>
   </BODY>
   </HTML>
   ~;
  }

sub ParseForm
    {
    my ($buffer, @pairs, $pair, $name, $value);
    # Read in text
    if ($ENV{'REQUEST_METHOD'} eq "POST")
      { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); }
    else
      { $buffer = $ENV{'QUERY_STRING'};  }
    @pairs = split(/&/, $buffer);
    foreach $pair (@pairs)
      {
      # Name-Wert-Paare trennen
      ($name, $value) = split(/=/, $pair);
      # Leerzeichen wieder einsetzen
      $value =~ tr/+/ /;
      # URL-codierte Zeichen (%xx) ersetzen
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      # im hash speichern
      if (defined $FORM{$name})    # vermutlich checkbox
        { $FORM{$name} = $FORM{$name} . ", " . $value; }
      else
        { $FORM{$name} = $value; }
      }
    }

