#!/usr/bin/perl

#------------------------------------------------------------------------------
#
#  NewTopicMailer - (w) 19.08.2002 by Zuul
#
#  Für das Rapidforum (und wahrscheinlich viele andere Foren) nutbare Routine
#  um Benutzern Nachrichten über neue Topics zukommen zu lassen.
#
#  Benötigt wird eine Datei "rapidemails.txt" mit folgendem Aufbau:
#
#  - Zeile 0:    EMailadressen ALLER Benutzer, die eine EMail über allgemein
#                zugängliche Areas bekommen sollen
#
#  - Zeile 1..n: EMailadressen für die verschiedenen Areas 1..n
#                Im Sonderfall, daß die Zeile leer gelassen bzw. mit dem 
#                Inhalt "ALL_USERS" gefüllt wird, so wird an die Benutzer
#                aus Zeile 0 die EMail verschickt!
#
#
#  Weiterhin werden folgende FORM-Variablen benutzt:
#
#  fid_URI     = Die URI des Forums
#  mail_to     = sichtbarer Empfänger der EMail (z. B. eine Pseudolisteadresse)
#  mail_from   = Absenderadresse (z. B. der Benutzer, der das Topic erstellt)
#  area        = Die Nummer der Area (ist bei RapidForum ja sowieso nötig)
#  headline    = Die Kopfzeile des neuen Topic (s. "area")
#
#------------------------------------------------------------------------------

use CGI  qw(:cgi);
$input = new CGI;

$fid_URI = $input->param('fid_URI');

$locate = "$fid_URI?";

foreach $key (sort $input->param) 
{
	if ($key ne "fid_URI")
	{
		my $parm = $input->param($key);
		$parm    =~ s/([\n|\r|\&|\?|\%|\t|\#|\=])/'%' . sprintf("%02lx", ord (substr($1, 0, 1)))/ego;
		$locate .= $key . '=' . $parm . '&';
	}
}

chop $locate;

$mailfile = "rapidemails.txt";

if (-e $mailfile)
{
        open (DATA, "<$mailfile") and @mail_bcc_list =  and close DATA or @mail_bbc_list = ();
	$mail_to      = $input->param('mail_to');
	$mail_bcc     = join ',', $mail_bcc_list[$input->param('area')];
	chomp $mail_bcc;
	if ($mail_bcc eq "ALL_USERS" | $mail_bcc eq "")
	{
		$mail_bcc = $mail_bcc_list[0];
		chomp $mail_bcc;
	}
	$mail_from    = $input->param('mail_from');
	$mail_subject = "$fid_URI - Neuer Thread wurde eingestellt!";
	$mail_body    = "Im Forum ist ein neuer Thread eingestellt worden!\n\n\n";
	$mail_body   .= "Titel: \"" . $input->param('headline') . "\"\n\n";
	$mail_body   .= "Link: $fid_URI/area=" . $input->param('area');

	&SendMail ($mail_to, $mail_bcc, $mail_from, $mail_subject, $mail_body);
}

print "Location: $locate\n\n";

#------------------------------------------------------------------------------

sub SendMail
{
	my $mailprog = &findSendMail;

	if ($mail_program ne "")
	{
		open (MAIL, "|$mailprog -t -i ");
		print MAIL 'To: ' . $_[0] . "\n";
		print MAIL 'Bcc: ' . $_[1] . "\n";
		print MAIL 'From: ' . $_[2] . "\n";
		print MAIL 'Subject: ' . $_[3] . "\n";
		print MAIL 'Content-type: text/plain' . "\n\n";
		print MAIL $_[4] . "\n";
		close (MAIL);
	}
}

#------------------------------------------------------------------------------

sub findSendMail
{
	$mail_program = "";
	local($mailer)  = '/usr/lib/sendmail';
	local($mailer1) = '/usr/bin/sendmail';
	local($mailer2) = '/usr/sbin/sendmail';
	if    ( -e $mailer )  {$mail_program=$mailer;}
	elsif ( -e $mailer1 ) {$mail_program=$mailer1;}
	elsif ( -e $mailer2 ) {$mail_program=$mailer2;}
	else                  {$mail_program = "";}
	return $mail_program;
}