problems cgi and sendmail

Discussion in 'Perl Misc' started by john.swilting, Jan 21, 2007.

  1. 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) }
     
    john.swilting, Jan 21, 2007
    #1
    1. Advertising

  2. 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 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
     
    john.swilting, Jan 21, 2007
    #2
    1. Advertising

  3. 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 => '',
    From => '',
    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))}}'
     
    Martin Kißner, Jan 21, 2007
    #3
  4. 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 => '',
    > From => '',
    > 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
     
    john.swilting, Jan 21, 2007
    #4
  5. 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 => '',
    >> From => '',
    >> 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))}}'
     
    Martin Kißner, Jan 21, 2007
    #5
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Hank

    smtplib sendmail problems

    Hank, Feb 5, 2004, in forum: Python
    Replies:
    1
    Views:
    436
    Peter Hansen
    Feb 9, 2004
  2. sugapablo
    Replies:
    0
    Views:
    2,163
    sugapablo
    Sep 21, 2007
  3. Andrzej Adam Filip
    Replies:
    0
    Views:
    4,100
    Andrzej Adam Filip
    Mar 31, 2008
  4. Vespasian

    CGI/sendmail help

    Vespasian, Jan 2, 2006, in forum: Perl Misc
    Replies:
    6
    Views:
    135
  5. sstark
    Replies:
    1
    Views:
    95
    sstark
    May 30, 2007
Loading...

Share This Page