;
close(TMP);
if ($mode eq 'S')
{ # add mail address
$anz = grep(/$email/,@addresses);
if ($anz == 0) # avoid duplicates
{
$line = $email . "\n";
push(@addresses,$line);
open (TMP,">$base_dir$list") || &safe_die("Can't write $list");
print TMP @addresses;
close(TMP);
}
}
else
{ # delete mail address
open (TMP,">$base_dir$list$suffix") || &safe_die("Can't write $list");
foreach $line(@addresses)
{ print TMP $line unless $line =~ m/$email/i; }
close(TMP);
}
$success = $mode;
last; # Entry found, everything done
}
}
close(IN);
# tell what has happened
print "Newsletter Manager
\n";
print "Ihr Newsletter-Abonnement wurde endgültig freigeschaltet.\n" if ($success eq 'S');
print "Ihr Newsletter-Abonnement wurde endgültig gelöscht.
\n" if ($success eq 'U');
if ($success eq 'N')
{
print "Beim Bearbeiten Ihres Newsletter-Abonnements trat ein Fehler auf:
\n";
print "Der Freigabecode wurde nicht gefunden (stimmt Ihre Eingabe?)\n";
}
}
##################################
# Add entry to "candidates" file
##################################
sub EnterCandidate
{
# subscribe or unsubscribe
my $Subscriber = '';
my $error = '';
my $line = '';
my $item = '';
my $fname = '';
my $ok = 0;
# check email address
if (($FORM{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/) ||
($FORM{'email'} !~ /^.+@\[?(\w|[-.])+\.[a-zA-Z]{2,3}|[0-9]{1,3}\]?$/) ||
($FORM{'email'} !~ /^([-\@\w.]+)$/))
{ $error = $error . 'E-Mail-Adresse falsch
'; }
# make sure the user entered a valid list index
$ok = 0;
foreach $item (@lists)
{
$ok = 1 if ($FORM{'filename'} eq $item);
}
if ($ok == 0)
{ $error = $error . 'Falscher Wert bei der Listenauswahl
'; }
# make sure the user entered a valid name.
if ($FORM{'name'} eq '')
{ $error = $error . 'Bitte geben Sie Ihren Namen ein
'; }
if ($error ne '')
{
print qq~
Die Eingabe ist leider unvollständig oder es hat sich ein Tippfehler eingeschlichen:
$error
Bitte korrigieren Sie Ihre Eingabe und verschicken Sie es noch einmal.
Zurück zum Formular
~;
&PageClose;
exit;
}
# now we can peliminary subscribe/unsubscribe and wait for confirmation
# make subscriber id
srand(time % 1000);
$Subscriber = int(rand(999)) . time() . $$ . int(rand(999));
# write to candidate file
$line = $date . '|';
if ($FORM{'action'} eq 'SUBSCRIBE')
{ $line = $line . 'S|';}
else
{ $line = $line . 'U|'; }
$line = $line . $FORM{'name'} . '|' . $FORM{'email'} . '|';
$line = $line . $FORM{'filename'} . '|' . $Subscriber;
open (OUT,">>$candfile") || &safe_die("Can't add to $candfile");
print OUT "$line\n";
close(OUT);
$fname = $FORM{'filename'};
$fname =~ s/$suffix//;
&ConfirmationMail($FORM{'email'},$FORM{'action'},$FORM{'filename'},$Subscriber);
# tell what has happened
print "
Newsletter Manager
\n";
print "Vielen Dank für Ihre Angaben. Ihrem Wunsch entsprechend werden Sie\n";
if ($FORM{'action'} eq 'SUBSCRIBE')
{ print "für den Newsletter $fname eingetragen\n"; }
else
{ print "beim Newsletter $fname abgemeldet.\n"; }
print "Sie erhalten in Kürze eine E-Mail mit einem Bestätigungscode\n";
print "für die endgütige Freischaltung bzw. Abmeldung.\n";
}
##############################
# Send Confirmation Mail
##############################
sub ConfirmationMail #(recipient, action, listname, subscriber-id)
{
my ($recipient, $action, $listname, $subscriber) = @_;
$listname =~ s/$suffix//;
# send confirmation mail
open(MAIL, "| $SENDMAIL") || &safe_die("Can't open $SENDMAIL");
my $oldfh = select MAIL; $| = 1;
print MAIL "From: $SENTFROM\n";
print MAIL "To: $recipient\n";
print MAIL "Subject: Bestaetigung Newsletter An-/Abmeldung\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 "\n";
print MAIL "B e s t a e t i g u n g s a n f o r d e r u n g\n";
if ($action eq 'SUBSCRIBE')
{ print MAIL "Sie haben den Newsletter $listname abonniert\n"; }
else
{ print MAIL "Sie haben das Abonnement des Newsletters $listname gekuendigt\n"; }
print MAIL "Da manche Zeitgenossen sich ein Spass daraus machen, jemand anderen ohne dessen\n";
print MAIL "Wissen einzutragen oder abzumelden, verwenden wir ein Bestaetigungssystem.\n";
print MAIL "Sie erhalten daher einen Bestaetigungscode, den Sie auf der Webseiten eintragen,\n";
print MAIL "bei der Sie auch das Abonnement ein- oder ausgetragen haben. Der Code lautet:\n\n";
print MAIL "$subscriber\n\n";
print MAIL "Falls Ihr Mailprogramm das Anklicken eines Links innerhalb des Textes einer\n";
print MAIL "E-Mail zuläßt, können Sie die Bestätigung gleich aus dem\n";
print MAIL "Mail-Programm heraus erledigen:\n\n";
print MAIL "$homeurl$script_url?CID=$subscriber\n\n";
print MAIL "Im anderen Fall rufen Sie das Anmelde-Formular noch einmal auf und geben\n";
print MAIL " n u r den Bestätigungscode ein (das geht meist per 'Cut-and-Paste'\n";
print MAIL "ueber die Zwischenablage ganz einfach).\n\n";
print MAIL "Sollten Sie sich nicht selbst an- oder abgemeldet haben, ignorieren Sie diese\n";
print MAIL "E-Mail ganz einfach\n\n";
print MAIL "Viele Gruesse, $MAILFROM\n";
select $oldfh;
}
##############################
# Show initial form
##############################
sub DoForm
{
my ($item, $fname);
print qq~
Newsletter-Verwaltung
Sie können mit diesem Formular einen Newsletter abonnieren oder
das Abonnement wieder kündigen, indem Sie einen Newsletter auswählen,
Namen und E-Mail-Adresse eingeben und auf den Absende-Button klicken.
Da manche Zeitgenossen sich ein Spass daraus machen, jemand anderen ohne dessen
Wissen einzutragen oder abzumelden, verwenden wir ein Bestätigungssystem.
Sie lassen das Feld "Bestätigungscode" zunächst leer. Nach dieser
Erstanmeldung erhalten Sie per E-Mail den Bestätigungscode.
Falls Ihr Mailprogramm das Anklicken eines Links innerhalb des Textes einer
E-Mail zuläßt, können Sie die Bestätigung gleich aus dem
Mail-Programm heraus erledigen. Im anderen Fall rufen Sie dieses Formular
noch einmal auf und geben nur den Bestätigungscode ein (das geht
meist per "Cut-and-Paste" über die Zwischenablage ganz einfach).
~;
}