problems cgi and sendmail

J

john.swilting

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 48);
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",\@couleurs));

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) }
 
J

john.swilting

john.swilting said:
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 48);
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",\@couleurs));

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
 
M

Martin Kißner

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 address removed)',
From => '(e-mail address 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
 
J

john.swilting

Martin said:
john.swilting wrote :

<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 address removed)',
From => '(e-mail address 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
 
M

Martin Kißner

john.swilting wrote :
Martin Kißner wrote:

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,484
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top