#![]{perl}[]
#
# Huuh, we are perl!
#
# Copyright (c) 1994 by Hochschulrechenzentrum der Universit"at Gie"sen
# All rights reserved.
#
# Author: Markus Porto
#         Markus Porto@physik.uni-giessen.de
#
# This software may be freely copied, modified, and redistributed
# provided that this copyright notice is preserved on all copies.
#
# You may not distribute this software, in whole or in part, as part of
# any commercial product without the express consent of the author.
#
# There is no warranty or other guarantee of fitness of this software
# for any purpose. It is provided solely "as is".
#
# Diese Datei sendet eine Nachricht via EMail aus einem HTML--Dokument
# heraus.
#
# Dazu wird die "ubergebene Environmentvariable $CONTENT_LENGTH ausgewertet
# und die Eingabe dann von STDIN gelesen.
# Zus"atzlich wird die Environmentvariable $QUERY_STRING ausgewertet.
#
# Parameter:
# addr={porto,local,webmaster}
#  Der Adressat (ohne Angabe wird webmaster eingestellt).
# subject=
#  Das Betreff.
# sender=
#  Der Absender.
# senderaddr=
#  Der Absender (EMail--Adresse).
# letter=
#  Der Brief.
# icon=
#  Welches Icon anzeigen
#
# Revision: 30. September 1994
#

# Behandlung des TERM--Signals
$SIG{'TERM'}= handler;

# Datum und Uhrzeit
$date= `[]{cgibin}[]/tex/germandate`;
$time= `[]{cgibin}[]/tex/germantime`;

# wo ist sendmail?
$sendmail= "[]{sendmail}[]";

# ein Dateiname
$filename= "/tmp/tmpsendmail" . $$;

# Neuladen verhindern
if( $ENV{"CONTENT_TYPE"} eq "" )
{
  print `[]{cgibin}[]/tex/reload`;
  exit 0;
}

# der Typ des Textes
print "Content-type: text/html\n\n";

# Zerlegen der Eingabe in einzelne Zeilen
read( STDIN, $content, $ENV{"CONTENT_LENGTH"});
@items= split( /&/, $content);
foreach $item ( @items)
{
  local( $name, $value)= split( /=/, $item);
  
  $value =~ tr/\+/ /;
  $value =~ s/%([\da-f][\da-f])/pack("C",hex($1))/gei;
  $values{$name}= $value;
}
@items= split( /&/, $ENV{"QUERY_STRING"});
foreach $item ( @items)
{
  local( $name, $value)= split( /=/, $item);
  
  $value =~ tr/\+/ /;
  $value =~ s/%([\da-f][\da-f])/pack("C",hex($1))/gei;
  $values{$name}= $value;
}

# welcher Empf"anger
SWITCH:
{
  ($values{"addr"} eq "porto") &&
    ( $addr= "Markus.Porto@physik.uni-giessen.de" , last SWITCH);
 ($values{"addr"} eq "weiss") &&
    ( $addr= "Dieter.Weiss@hrz.uni-giessen.de" , last SWITCH);
($values{"addr"} eq "local") &&
    ( $addr= "[]{local_email}[]" , last SWITCH);
  $addr= "[]{server_email}[]";
}

# Betreff, mit vorangestelltem "WWW-Server: "
$subject= "WWW-Server: " . $values{"subject"};

# Absender
$sender= $values{"sender"};
$senderaddr= $values{"senderaddr"};

# Brief
$letter= $letter .
  "From: " . $sender . " <" . $senderaddr . ">\n" .
  "Subject: " . $subject . "\n" .
  "To: " . $addr . "\n";
if( $senderaddr ne "")
{
  $letter= $letter .
  "Reply-To: " . $senderaddr . "\n";
}
$letter= $letter .
  "X-Mailer: email <Markus.Porto@physik.uni-giessen.de>\n" .
  "\n" .
  "Absender: " . $sender . " <" . $senderaddr . ">\n" .
  "Remote Addr: " . $ENV{"REMOTE_ADDR"} . "\n" .
  "Remote Host: " . $ENV{"REMOTE_HOST"} . "\n\n". 
  $values{"letter"};

# Logeintrag
open( LOGFILE, ">>/tmp/sendmail.logfile");
print LOGFILE "Zeitpunkt:   ", $date, " um ", $time, "\n";
print LOGFILE "Name:        ", $sender, "\n";
print LOGFILE "EMail:       ", $senderaddr, "\n";
print LOGFILE "Betreff:     ", $subject, "\n";
print LOGFILE "Empf\"anger:  ", $addr, "\n";
print LOGFILE "Remote Addr: ", $ENV{"REMOTE_ADDR"}, "\n";
print LOGFILE "Remote Host: ", $ENV{"REMOTE_HOST"}, "\n";
print LOGFILE "---\n";
close( LOGFILE);

# Absender angegeben?
if( ($sender ne "") || ($senderaddr ne ""))
{
  # Nachricht abschicken
  open( MAIL, "| $sendmail $addr");
  print MAIL $letter;
  close( MAIL);
  
  # Text erzeugen
  print "<HTML>\n";
  print "<HEAD>\n";
  print "<TITLE>R&uuml;ckmeldung</TITLE>\n";
  print "</HEAD>\n";

  print "<BODY>\n";
  print "<H1>";
  if( $values{"icon"} ne "")
  {
    print "<IMG ALT=\"\" SRC=\"$values{'icon'}\"><BR>\n";
  }
  print "R&uuml;ckmeldung</H1>\n";
  
  print "Ihre Nachricht an <TT>", $addr;
  print "</TT> wurde soeben abgeschickt.\n<P>\n";
  
  print "<HR><EM>WWW-Server []{server_institution}[], TeX-Service, Revision ", $date, "</EM>\n";
  
  print "</BODY>\n";
  print "</HTML>\n";
  
  unlink( $filename);
}
else
{
  # Text erzeugen
  print "<HTML>\n";
  print "<HEAD>\n";
  print "<TITLE>Fehlender Absender</TITLE>\n";
  print "</HEAD>\n";

  print "<BODY>\n";
  print "<H1>";
  if( $values{"icon"} ne "")
  {
    print "<IMG ALT=\"\" SRC=\"$values{'icon'}\"><BR>\n";
  }
  print "Fehlender Absender</H1>\n";

  print "Bitte geben Sie einen Absender an! Wenn Sie &uuml;ber keine\n";
  print "EMail-Adresse verf&uuml;gen, geben Sie bitte wenigstens\n";
  print "Ihren Namen an.\n<P>\n";
  print "Danke.\n<P>\n";
  
  print "<HR><EM>WWW-Server []{server_institution}[], TeX-Service, Revision ", $date, "</EM>\n";
  
  print "</BODY>\n";
  print "</HTML>\n";
}

sub handler
{
  unlink $filename;
  
  exit( 0);
}
