Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Perl > Perl Misc > problems cgi and sendmail

Reply
Thread Tools

problems cgi and sendmail

 
 
john.swilting
Guest
Posts: n/a
 
      01-21-2007
Why the e-mail is not to send
Why on every page he indicates to me No recipient addresses found in header

my code
#!/usr/bin/perl -w

use strict;
use CGI qw(:standard escapeHTML);
use CGI::Carp qw(fatalsToBrowser);

my %Etats;
my @liste_param;
my $Ecran_actuel;

## hachage des documents et des fonctions

%Etats = (
'DĂ©faut' =>\&document_de_garde,
'Chemises' =>\&chemise,
'Chaussures' =>\&chaussures,
'Passage Ă* la caisse' =>\&passage_a_la_caisse,
'Carte' =>\&carte_de_credit,
'Commande' =>\&commande,
'Annnulation' =>\&document_de_garde,
);

$Ecran_actuel = param(".Etat") || "DĂ©faut";
die "Pas d'Ă©cran pour $Ecran_actuel" unless $Etats{$Ecran_actuel};

## engendre le document courant

en_tete_standard();

while ( my ($nom_ecran,$fonction) = each %Etats){
$fonction->($nom_ecran eq $Ecran_actuel);

}
open(COURRIER, "|/usr/lib/sendmail -oi -t")
or die "fork de sendmail impossible : $!";
print COURRIER <<EOF;
From: $0(votre script cgi)
To:john.swilting\@wanadoo.fr
Subject: soumission de formulaire par courrier electronique

$Etats{'Defaut'};
$Etats{'Chemises'};
$Etats{'Chaussures'};
$Etats{'Passage Ă* la caisse'};
$Etats{'Carte'};
$Etats{'Commande'};
@liste_param;
EOF
close(COURRIER)or die "je ne peux fermer sendmail";
pied_de_page_standard();
exit;

################################################## ######################
## fonctions d'en-tete, de pied de page, de menu #######################
################################################## ######################

sub en_tete_standard {
print header(),
start_html(-Title => "Chemises", -BGCOLOR=>"White");
print start_form(); ##start_multipart_form()
##s'il faut exporter des fichiers sur le reseau
}

sub pied_de_page_standard { print end_form(), end_html() }

sub menu_boutique {
print p(defaults("Vider mon caddie"),
vers_doc("Chemises"),
vers_doc("Chaussures"),
vers_doc("Passage Ă* la caisse"));
}

################################################## #####################
## sous-programmes pour chaque Ă©cran ##################################
################################################## #####################


## le document par defaut

sub document_de_garde {
my $actif = shift;
return unless $actif;

print "<H1>salut!</H1>\n";
print "bienvenue dans notre magasin d'habillement!\n",
print "faites votre choix dans le menu ci-dessous.\n";

menu_boutique();
}

## document Ă* partir duquel commander une chemise

sub chemise {
my $actif = shift;
my @tailles = qw(XL L M S);
my @couleurs = qw(Noire Blanche);

my ($taille, $couleur, $compte) =
(param("taille_chemises"), param("couleur_chemises"),
param("nombre_chemises"));

##verification des donnees reçus
if ($compte) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep {$_ eq $taille } @tailles;
param("couleur_chemises" , $couleur);
param("taille_chemises" , $taille);
}

unless ( $actif ) {
print hidden("taille_chemises") if $taille;
print hidden("couleur_chemises") if $couleur;
print hidden("nombre_chemises") if $compte;
return;
}

print h1("chemises");
print p("quelle chemise! cette petite merveille est\n","livree avec
toutes les options.doublure de luxe,\n",
"finitions avec toutes les options. doublure de luxe\n","finitions en
coton, et un col Ă* en avoir les\n",
"Prix unitaire: 33.00 euros.");

print h2("options");
print p("nombre ?",textfield("nombre_chemises"));
print p("taille ?",popup_menu("taille_chemises",\@tailles ),
"couleur ?", popup_menu("couleur_chemises",\@couleurs ));

menu_boutique();
push(@liste_param,$taille);
push(@liste_param,$couleur);
push(@liste_param,$compte);
}


## document Ă* partir duquel commander des chaussures

sub chaussures {
my $actif = shift;
my @tailles = qw(35 36 37 38 39 40 41 42 43 44 45 46 47 4;
my @couleurs = qw(Ivoire Noisette Ebene);

my ( $taille, $couleur, $compte) =
(param("taille_chaussures"), param("couleur_chaussures"),
param("nombre_chaussures"));

##verification des donnees reçus
if ( $compte ) {
$couleur = $couleurs[0]
unless grep { $_ eq $couleur } @couleurs;
$taille = $tailles[0]
unless grep { $_ eq $taille } @tailles;
param("couleur_chaussures",$couleur);
param("taille_chaussures", $taille);
}


unless ( $actif ) {
print hidden("taille_chaussures") if $taille;
print hidden("couleur_chaussures") if $couleur;
print hidden("nombre_chaussures") if $compte;
return;
}

print h1("chaussures");
print p("vous ne serez jamais aussi elegant que chausse de
ces\n", "souliers magnifiques\n",
"prix unitaires: 49.99 euros.");

print h2("options");
print p("nombre de paires?", textfield("nombre_chaussures"));
print p("pointure?", popup_menu("taille_chaussures",\@tailles));
print p("teinte?",popup_menu("couleur_chaussures",\@coul eurs));

menu_boutique();
push(@liste_param,$taille);
push(@liste_param,$couleur);
push(@liste_param,$compte);

}

## document qui affiche la commande actuelle en attente de comfirmation

sub passage_a_la_caisse {
my $actif = shift;

return unless $actif;

print h1("confirmation de la commande");
print p("vous avez commande:");
print texte_commande();
print p("est-ce correct?\nn",
"choissisez «Carte» pour regler ces\n",
"objets, ou «chemises» ou\n",
"«chaussures» pour continuer vos courses.");
print p(vers_doc("Carte"),
vers_doc("Chemises"),
vers_doc("Chaussures"));

}

## document pour ollecter les informations relatives Ă* la carte de credit

sub carte_de_credit {
my $actif = shift;
my @gadgets = qw(Nom Adresse1 Adresse2 Ville Code_postal Pays Telephone
Carte Expire_en);

unless ( $actif ) {
print map { hidden($_) } @gadgets;
return;
}

print pre ( p ("Nom\&nbsp;: ",textfield("Nom")),
p ("Adresse\&nbsp;: ",textfield("Adresse1")),
p (" ",textfield("Adresse2")),
p ("Ville\&nbsp;: ",textfield("Ville")),
p ("Code Postal\&nbsp;: ",textfield("Code_postal")),
p ("Pays\&nbsp;: ",textfield("Pays")),
p ("Telephone\&nbsp;: ",textfield("Teléphone")),
p ("Carte numéro\&nbsp;: ",textfield("Carte")),
p ("Expire en\&nbsp;: ",textfield("Expire_en")));

print p ( "Selectionner «Commande» pour commander\n",
"ces objets. selectionner «Annulation»\n");

print p ( vers_doc("Commande"), vers_doc("Annulation"));
push(@liste_param,$gadgets[0]);
push(@liste_param,$gadgets[1]);
push(@liste_param,$gadgets[2]);
push(@liste_param,$gadgets[3]);
push(@liste_param,$gadgets[4]);
push(@liste_param,$gadgets[5]);
push(@liste_param,$gadgets[6]);
push(@liste_param,$gadgets[7]);
push(@liste_param,$gadgets[8]);
}

## document pour terminer une commande

sub commande {
my $actif = shift;

unless ( $actif) {
return;
}

## ici on verifie les valeurs donnees pour la carte de credit

print h1("Commandé\&nbsp;!");
print p("vous avez commandé ce qui suit:");
print texte_commande();

print p (defaults ("Retour au debut"));
}

## renvoie de l ' HTML pour la commande actuelle("vous avez ommande")

sub texte_commande {
my $html = '';

if ( param ("nombre_chemises")) {
$html .= p("vous avez commandé" , param("nombre_chemises"),
"chemises de taille", param("taille_chemises"),
" et de couleur " , param("couleur_chemises"),",");
}
if ( param ("nombre_chaussures")) {
$html .= p("vous avez comandé",param("nombre_chaussures"),
"paires de chaussures de pointures" ,
param("taille_chaussures"),
" et de teinte ", param ("couleur_chaussures"),".");
}
$html = p("Rien!") unless $html;
$html .= p("pour un prix total de ",calcule_prix());
return $html;
}

sub calcule_prix {
my $chemises = param("nombre_chemises") || 0 ;
my $chaussures = param("nombre_chaussures") || 0;
return sprintf("%.2f\&nbsp;euros", $chemises * 33 + $chaussures *
49.99);
}

sub vers_doc { submit (-NAME => ".Etat", -VALUE => shift) }

 
Reply With Quote
 
 
 
 
john.swilting
Guest
Posts: n/a
 
      01-21-2007
john.swilting wrote:

> Why the e-mail is not to send
> Why on every page he indicates to me No recipient addresses found in
> header
>
> my code
> #!/usr/bin/perl -w
>
> use strict;
> use CGI qw(:standard escapeHTML);
> use CGI::Carp qw(fatalsToBrowser);
>
> my %Etats;
> my @liste_param;
> my $Ecran_actuel;
>
> ## hachage des documents et des fonctions
>
> %Etats = (
> 'DĂ©faut' =>\&document_de_garde,
> 'Chemises' =>\&chemise,
> 'Chaussures' =>\&chaussures,
> 'Passage Ă* la caisse' =>\&passage_a_la_caisse,
> 'Carte' =>\&carte_de_credit,
> 'Commande' =>\&commande,
> 'Annnulation' =>\&document_de_garde,
> );
>
> $Ecran_actuel = param(".Etat") || "DĂ©faut";
> die "Pas d'Ă©cran pour $Ecran_actuel" unless $Etats{$Ecran_actuel};
>
> ## engendre le document courant
>
> en_tete_standard();
>
> while ( my ($nom_ecran,$fonction) = each %Etats){
> $fonction->($nom_ecran eq $Ecran_actuel);
>
> }
> open(COURRIER, "|/usr/lib/sendmail -oi -t")
> or die "fork de sendmail impossible : $!";
> print COURRIER <<EOF;
> From: $0(votre script cgi)
> To:john.swilting\@wanadoo.fr
> Subject: soumission de formulaire par courrier electronique
>
> $Etats{'Defaut'};
> $Etats{'Chemises'};
> $Etats{'Chaussures'};
> $Etats{'Passage Ă* la caisse'};
> $Etats{'Carte'};
> $Etats{'Commande'};
> @liste_param;
> EOF
> close(COURRIER)or die "je ne peux fermer sendmail";
> pied_de_page_standard();
> exit;
>
> ################################################## ######################
> ## fonctions d'en-tete, de pied de page, de menu #######################
> ################################################## ######################
>
> sub en_tete_standard {
> print header(),
> start_html(-Title => "Chemises", -BGCOLOR=>"White");
> print start_form(); ##start_multipart_form()
> ##s'il faut exporter des fichiers sur le reseau
> }
>
> sub pied_de_page_standard { print end_form(), end_html() }
>
> sub menu_boutique {
> print p(defaults("Vider mon caddie"),
> vers_doc("Chemises"),
> vers_doc("Chaussures"),
> vers_doc("Passage Ă* la caisse"));
> }
>
> ################################################## #####################
> ## sous-programmes pour chaque Ă©cran ##################################
> ################################################## #####################
>
>
> ## le document par defaut
>
> sub document_de_garde {
> my $actif = shift;
> return unless $actif;
>
> print "<H1>salut!</H1>\n";
> print "bienvenue dans notre magasin d'habillement!\n",
> print "faites votre choix dans le menu ci-dessous.\n";
>
> menu_boutique();
> }
>
> ## document Ă* partir duquel commander une chemise
>
> sub chemise {
> my $actif = shift;
> my @tailles = qw(XL L M S);
> my @couleurs = qw(Noire Blanche);
>
> my ($taille, $couleur, $compte) =
> (param("taille_chemises"), param("couleur_chemises"),
> param("nombre_chemises"));
>
> ##verification des donnees reçus
> if ($compte) {
> $couleur = $couleurs[0]
> unless grep { $_ eq $couleur } @couleurs;
> $taille = $tailles[0]
> unless grep {$_ eq $taille } @tailles;
> param("couleur_chemises" , $couleur);
> param("taille_chemises" , $taille);
> }
>
> unless ( $actif ) {
> print hidden("taille_chemises") if $taille;
> print hidden("couleur_chemises") if $couleur;
> print hidden("nombre_chemises") if $compte;
> return;
> }
>
> print h1("chemises");
> print p("quelle chemise! cette petite merveille est\n","livree avec
> toutes les options.doublure de luxe,\n",
> "finitions avec toutes les options. doublure de
> luxe\n","finitions en
> coton, et un col Ă* en avoir les\n",
> "Prix unitaire: 33.00 euros.");
>
> print h2("options");
> print p("nombre ?",textfield("nombre_chemises"));
> print p("taille ?",popup_menu("taille_chemises",\@tailles ),
> "couleur ?", popup_menu("couleur_chemises",\@couleurs ));
>
> menu_boutique();
> push(@liste_param,$taille);
> push(@liste_param,$couleur);
> push(@liste_param,$compte);
> }
>
>
> ## document Ă* partir duquel commander des chaussures
>
> sub chaussures {
> my $actif = shift;
> my @tailles = qw(35 36 37 38 39 40 41 42 43 44 45 46 47 4;
> my @couleurs = qw(Ivoire Noisette Ebene);
>
> my ( $taille, $couleur, $compte) =
> (param("taille_chaussures"), param("couleur_chaussures"),
> param("nombre_chaussures"));
>
> ##verification des donnees reçus
> if ( $compte ) {
> $couleur = $couleurs[0]
> unless grep { $_ eq $couleur } @couleurs;
> $taille = $tailles[0]
> unless grep { $_ eq $taille } @tailles;
> param("couleur_chaussures",$couleur);
> param("taille_chaussures", $taille);
> }
>
>
> unless ( $actif ) {
> print hidden("taille_chaussures") if $taille;
> print hidden("couleur_chaussures") if $couleur;
> print hidden("nombre_chaussures") if $compte;
> return;
> }
>
> print h1("chaussures");
> print p("vous ne serez jamais aussi elegant que chausse de
> ces\n", "souliers magnifiques\n",
> "prix unitaires: 49.99 euros.");
>
> print h2("options");
> print p("nombre de paires?", textfield("nombre_chaussures"));
> print p("pointure?", popup_menu("taille_chaussures",\@tailles));
> print p("teinte?",popup_menu("couleur_chaussures",\@coul eurs));
>
> menu_boutique();
> push(@liste_param,$taille);
> push(@liste_param,$couleur);
> push(@liste_param,$compte);
>
> }
>
> ## document qui affiche la commande actuelle en attente de comfirmation
>
> sub passage_a_la_caisse {
> my $actif = shift;
>
> return unless $actif;
>
> print h1("confirmation de la commande");
> print p("vous avez commande:");
> print texte_commande();
> print p("est-ce correct?\nn",
> "choissisez «Carte» pour regler ces\n",
> "objets, ou «chemises» ou\n",
> "«chaussures» pour continuer vos courses.");
> print p(vers_doc("Carte"),
> vers_doc("Chemises"),
> vers_doc("Chaussures"));
>
> }
>
> ## document pour ollecter les informations relatives Ă* la carte de credit
>
> sub carte_de_credit {
> my $actif = shift;
> my @gadgets = qw(Nom Adresse1 Adresse2 Ville Code_postal Pays
> Telephone
> Carte Expire_en);
>
> unless ( $actif ) {
> print map { hidden($_) } @gadgets;
> return;
> }
>
> print pre ( p ("Nom\&nbsp;: ",textfield("Nom")),
> p ("Adresse\&nbsp;: ",textfield("Adresse1")),
> p (" ",textfield("Adresse2")),
> p ("Ville\&nbsp;: ",textfield("Ville")),
> p ("Code Postal\&nbsp;: ",textfield("Code_postal")),
> p ("Pays\&nbsp;: ",textfield("Pays")),
> p ("Telephone\&nbsp;: ",textfield("Teléphone")),
> p ("Carte numéro\&nbsp;: ",textfield("Carte")),
> p ("Expire en\&nbsp;: ",textfield("Expire_en")));
>
> print p ( "Selectionner «Commande» pour commander\n",
> "ces objets. selectionner «Annulation»\n");
>
> print p ( vers_doc("Commande"), vers_doc("Annulation"));
> push(@liste_param,$gadgets[0]);
> push(@liste_param,$gadgets[1]);
> push(@liste_param,$gadgets[2]);
> push(@liste_param,$gadgets[3]);
> push(@liste_param,$gadgets[4]);
> push(@liste_param,$gadgets[5]);
> push(@liste_param,$gadgets[6]);
> push(@liste_param,$gadgets[7]);
> push(@liste_param,$gadgets[8]);
> }
>
> ## document pour terminer une commande
>
> sub commande {
> my $actif = shift;
>
> unless ( $actif) {
> return;
> }
>
> ## ici on verifie les valeurs donnees pour la carte de credit
>
> print h1("Commandé\&nbsp;!");
> print p("vous avez commandé ce qui suit:");
> print texte_commande();
>
> print p (defaults ("Retour au debut"));
> }
>
> ## renvoie de l ' HTML pour la commande actuelle("vous avez ommande")
>
> sub texte_commande {
> my $html = '';
>
> if ( param ("nombre_chemises")) {
> $html .= p("vous avez commandé" , param("nombre_chemises"),
> "chemises de taille", param("taille_chemises"),
> " et de couleur " , param("couleur_chemises"),",");
> }
> if ( param ("nombre_chaussures")) {
> $html .= p("vous avez comandé",param("nombre_chaussures"),
> "paires de chaussures de pointures" ,
> param("taille_chaussures"),
> " et de teinte ", param ("couleur_chaussures"),".");
> }
> $html = p("Rien!") unless $html;
> $html .= p("pour un prix total de ",calcule_prix());
> return $html;
> }
>
> sub calcule_prix {
> my $chemises = param("nombre_chemises") || 0 ;
> my $chaussures = param("nombre_chaussures") || 0;
> return sprintf("%.2f\&nbsp;euros", $chemises * 33 + $chaussures *
> 49.99);
> }
>
> sub vers_doc { submit (-NAME => ".Etat", -VALUE => shift) }



Pine does not work
sendmail is not ok
It is maybe necessary to use Net::SMTP
 
Reply With Quote
 
 
 
 
Martin Kißner
Guest
Posts: n/a
 
      01-21-2007
john.swilting wrote :
> Why the e-mail is not to send
> Why on every page he indicates to me No recipient addresses found in header
>
> my code


<code snipped>

Who is supposed to read about 300 lines of your code?

For sending Email you might want to use the Module Mail::Mailer wich is
quite simple to use.

--- example code with less then ten lines ---
use Mail::Mailer;
my $mailer = Mail::Mailer->new;
$mailer->open({ To => '(E-Mail Removed)',
From => '(E-Mail Removed)',
Subject => 'hello'});
print $mailer "This is the first part of the message.\n";
print $mailer "This is the second part of the message.\n";
#now send the message
$mailer->close;
--- example code ---


Best regards
Martin

--
perl -e '$S=[[73,116,114,115,31,96],[108,109,114,102,99,112],
[29,77,98,111,105,29],[100,93,95,103,97,110]];
for(0..3){for$s(0..5){print(chr($S->[$_]->[$s]+$_+1))}}'
 
Reply With Quote
 
john.swilting
Guest
Posts: n/a
 
      01-21-2007
Martin Kißner wrote:

> john.swilting wrote :
>> Why the e-mail is not to send
>> Why on every page he indicates to me No recipient addresses found in
>> header
>>
>> my code

>
> <code snipped>
>
> Who is supposed to read about 300 lines of your code?
>
> For sending Email you might want to use the Module Mail::Mailer wich is
> quite simple to use.
>
> --- example code with less then ten lines ---
> use Mail::Mailer;
> my $mailer = Mail::Mailer->new;
> $mailer->open({ To => '(E-Mail Removed)',
> From => '(E-Mail Removed)',
> Subject => 'hello'});
> print $mailer "This is the first part of the message.\n";
> print $mailer "This is the second part of the message.\n";
> #now send the message
> $mailer->close;
> --- example code ---
>
>
> Best regards
> Martin
>


will sendmail work on localhost server
maybe or not

code snipped
compil nice
its sendmail the problem
 
Reply With Quote
 
Martin Kißner
Guest
Posts: n/a
 
      01-21-2007
john.swilting wrote :
> Martin Kißner wrote:


>> --- example code with less then ten lines ---
>> use Mail::Mailer;
>> my $mailer = Mail::Mailer->new;
>> $mailer->open({ To => '(E-Mail Removed)',
>> From => '(E-Mail Removed)',
>> Subject => 'hello'});
>> print $mailer "This is the first part of the message.\n";
>> print $mailer "This is the second part of the message.\n";
>> #now send the message
>> $mailer->close;
>> --- example code ---
>>
>>
>> Best regards
>> Martin
>>

>
> will sendmail work on localhost server
> maybe or not

Mail::Mailer requires a working MTA (sendmail, postfix etc.)
If your mail does not get send you might want to check the logfiles (i.
e. /var/log/mail.log) to find out the reason. But this is OT in this
newsgroup. You could also try to send an email by using the mail command
(on Unix/Linux) to see if this works.
>
> code snipped
> compil nice
> its sendmail the problem

If you can not get your MTA working properly you could consider using
Net::SMTP.

Your problems could also be locatetd at the recipient's mailserver. Some
servers do not accept mail from MTAs with dynamic IP addresses. If this
is the case you should be able to find out by reading the logfiles.

HTH
Martin

--
perl -e '$S=[[73,116,114,115,31,96],[108,109,114,102,99,112],
[29,77,98,111,105,29],[100,93,95,103,97,110]];
for(0..3){for$s(0..5){print(chr($S->[$_]->[$s]+$_+1))}}'
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: [sendmail,perl] How to catch a mailer error [perl script as sendmail.cf mailer] Andrzej Adam Filip Perl 0 03-31-2008 09:24 PM
Unable to load tag handler class "com.cj.smtp.Sendmail" for tag "send:Sendmail" sugapablo Java 0 09-21-2007 01:41 PM
strange error in cgi script using sendmail sstark Perl Misc 1 05-30-2007 12:22 AM
CGI/sendmail help Vespasian Perl Misc 6 01-05-2006 09:44 PM
smtplib sendmail problems Hank Python 1 02-09-2004 08:07 PM



Advertisments