#!/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; }