#!/usr/bin/perl -w
use CGI qw/:standard :html3 :netscape/;
use CGI::Carp qw/fatalsToBrowser/;
use strict;
BEGIN {
eval('use MIME::Lite');
eval('use MIME::Lite::HTML');
}
use Text::Wrap qw(wrap $columns);
use vars qw($clef $gabarit $message $date $mail_form $type_form $message2);
#-------------- Configuration -------------------
# Liste des abonnes. Droit en ecriture necessaires pour tout le monde
my $bd = "/home/alian/newsletter/perso.txt";
#$bd="/home/Administrateur/public_html/newsletter/perso.txt";
# Identite de la personne envoyant la newsletter
my $expediteur = "alian\@alianwebserver.com";
#$expediteur="administrateur";
# Titre des mails
my $titre = "2ème newsletter de Alian Web Server";
# A CHANGER: le nom de ce champ declenche la newsletter
my $password = 'go';
# Adresse suivant la soumission de chacun des formulaires
my $url = 'http://www.alianwebserver.com';
# Adresse de la newsletter à envoyer
my $urlNewsletterHTML = 'http://jupiter/~Administrateur/newsletter/newsletter.htm';
#"file:///c|/tmp/newsletter.html";
my $urlNewsletterTxt = 'http://jupiter/~Administrateur/newsletter/newsletter.txt';
#"file:///c|/tmp/newsletter.txt";
#-------------- Fin de configuration -------------------
#--------------------------------------------------------------
# Script effectuant un mailing a une liste d'abonne, envoi en
# HTML ou texte suivant inscription.
# Gere egalement les inscriptions (ajout,modif,suppression)
# Ce script s'appuie sur les possiblités de MIME::Lite et
# MIME::Lite::HTML
#
# Auteur: alian@alianwebserver.com
#
# $Date: 2000/11/12 19:11:12 $
# $Revision: 1.3 $
#
# $Log: newsletter.cgi,v $
# Revision 1.3 2000/11/12 19:11:12 Administrateur
# - Use of MIME::Lite::HTML
#
# Revision 1.2 2000/03/25 14:25:37 Administrateur
# Ajout gestion CGI des inscriptions
#
# Revision 1.1 2000/03/25 01:30:12 Administrateur
# Premiere version en ligne de commande fonctionnelle
#
#--------------------------------------------------------------
$date = localtime();
# Directive de securite pour -T
$ENV{'PATH'}='';
if (!$ENV{'SCRIPT_NAME'}) {$ENV{'SCRIPT_NAME'}="/newsletter/newsletter.cgi";}
if (!$ENV{'SERVER_NAME'}) {$ENV{'SERVER_NAME'}="www.alianwebserver.com";}
#if (!$ENV{'SCRIPT_NAME'}) {$ENV{'SCRIPT_NAME'}="/~Administrateur/newsletter/newsletter.cgi";}
#if (!$ENV{'SERVER_NAME'}) {$ENV{'SERVER_NAME'}="jupiter";}
#
# Procedure principale
#
if (param($password)) {&send_mail();}
elsif (param('modification')) {&modif_abonne();}
elsif (param('suppression')) {&delete_abonne();}
elsif (param('inscription')) {&ajout_abonne();}
else {&print_forms();}
#
# FORMULAIRES HTML
#
# Affiche les differents formulaires d'inscription, modification
# et suppression
sub print_forms
{
print header;
# Formulaire de modification du type d'envoi de la newsletter
if ((param('modification_form'))&&(param('mail')))
{
print start_html('Modification de votre inscription'),"\n",
h1('Modification de votre inscription'),"\n",
start_form,"\n",
hidden(-'name'=>'mail',-'default'=>param('mail')),
"Votre adresse ? ",
textfield( -'name'=>'new_mail',
-'value'=>param('mail')),
"
\n",
'Format de la newletter ?',
radio_group( -'name'=>'type',
-'values'=>['txt','html'],
-'default'=>param('type')),
hidden(-name=>'mail',-default=>param('mail')),
"
\n",
submit(-name=>'modification'),"\n",
end_form,"\n",
end_html,"\n";
}
# Formulaire de suppression
elsif ((param('suppression_form'))&&(param('mail')))
{
print start_html('Confirmation de la suppression de votre inscription'),"
\n",
h1('Confirmation de la suppression de votre inscription'),"\n",
start_form,"\n",
'Etes-vous sur de vouloir vous desabonné ?',
radio_group( -'name'=>'confirm',
-'values'=>['Non','Oui']),"
",
hidden(-name=>'mail',-default=>param('mail')),
submit(-'name'=>'suppression'),"\n",
end_form,"\n",
end_html,"\n";
}
# Formulaire par defaut d'inscription
else {
print start_html('Un exemple de formulaire d\'inscription'),"\n",
h1('Un exemple de formulaire d\'inscription'),"\n",
start_form,"\n",
"Votre adresse ? ",textfield('mail'),"
\n",
'Format de la newletter ?',"\n",
popup_menu(-'name'=>'type',-'values'=>['txt','html']),"
\n",
submit(-name=>'inscription'),"\n",
end_form,"\n",
end_html,"\n";
}
}
#
# FONCTIONS DE MODIFICATION DU FICHIER BD
#
# Ajout d'un abonne a la liste des inscrits
sub ajout_abonne
{
my $buf;
if (param('mail'))
{
# Envoi texte si non selectionne
my $type = param('type') || 'txt';
open(BD,">>$bd") || die "Can't wrote in $bd:$!\n";
print BD param('mail')."\t$type\n";
close(BD);
print "Location: $url\n\n";
}
else {print header,"Adresse mail manquant, appuyez sur back pour corriger";exit;}
}
# Modifie le type d'evoi effectue (HTML <=> Texte)
sub modif_abonne
{
my $buf;
if (param('new_mail'))
{
open(BD,$bd) || die "Can't read $bd:$!\n";
while (defined(my $l=))
{
chomp($l);
my ($mail,$type)=split(/\t/,$l);
if ((!$mail) ||($mail ne param('mail'))) {$buf.=$l."\n";}
else {$buf.=param('new_mail')."\t".param('type')."\n";}
}
close(BD);
open(BD,">$bd") || die "Can't wrote in $bd:$!\n";
print BD $buf;
close(BD);
print "Location: $url\n\n";
}
else {print header,"Vous devez donner votre adresse mail pour modifier votre abonnement";exit;}
}
# Supprime un abonne des inscrits
sub delete_abonne
{
my $buf;
if (param('confirm') eq 'Oui')
{
if (param('mail'))
{
open(BD,$bd) || die "Can't read $bd:$!\n";
while (defined(my $l=))
{
chomp($l);
my ($mail,$type)=split(/\t/,$l);
if ((!$mail) ||($mail ne param('mail'))) {$buf.=$l."\n";}
}
close(BD);
open(BD,">$bd") || die "Can't wrote in $bd:$!\n";
print BD $buf;
close(BD);
}
else {print header,"Vous devez donner votre adresse mail pour supprimer votre abonnement";exit;}
}
print "Location: $url\n\n";
}
#
# PARTIE MISE EN FORME DU MAILING
#
# Lance le mailing pour chacun des abonnes
sub send_mail
{
print header,start_html;
print "\nLecture des abonnes ...\n";
open(L,$bd) || die "Can't read $bd:$!\n";
# Pour chaque utilisateur
while (defined(my $l = ))
{
chomp($l);
my @l = split(/\t/,$l);
if (($l[1]) && ($l[0]=~/^[^#]/)){
my $email = $l[0]; # Adresse destinataire
my $type_envoi= $l[1]; # Envoi HTML ou texte
my $mail; # Message a envoyer
my $script = 'http://'.$ENV{'SERVER_NAME'}.$ENV{'SCRIPT_NAME'};
my $desabo= $script."?suppression_form=1&mail=$email&type=$type_envoi";
my $modifabo= $script."?modification_form=1&mail=$email&type=$type_envoi";
# Envoi au format HTML
if ($type_envoi eq 'html')
{
$desabo = 'Supprimer votre abonnement';
$modifabo = 'Modifier votre abonnement';
my %hash = (
'desabonnement' => $desabo,
'modif_abonnement' => $modifabo
);
my $mailHTML = new MIME::Lite::HTML
From => $expediteur,
To => $email,
Subject => $titre,
Debug => 1,
HashTemplate => \%hash;
$mail = $mailHTML->parse($urlNewsletterHTML);
}
# Envoi au format texte
else
{
my $req = new HTTP::Request('GET' => $urlNewsletterTxt);
my $ua = new LWP::UserAgent 'MIME-Lite', 'alian@alianwebserver.com';
my $res2 = $ua->request($req);
$desabo = 'Supprimer votre abonnement: '.$desabo;
$modifabo = 'Modifier votre abonnement: '.$modifabo;
$columns = 78;
my $text = wrap('', '', $res2->content);
$mail = new MIME::Lite
From => $expediteur,
To => $email,
Subject => $titre,
Type => 'TEXT',
Data => $text."\n".$desabo;
}
# Envoi du mail
$mail->send;#_by_smtp('jupiter');
print "Mail envoye a $email.
\n";
}}
close(L);
print end_html;
}