IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web Perl Discussion :

CGI-BIN formulaire pl


Sujet :

Web Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 26
    Par défaut CGI-BIN formulaire pl
    Bonjour

    J'ai souscris à l'achat d'une espace web sous ovh. Le truc entrée de gamme : 20gp. Seulement j'aimerais réaliser un formulaire sur mon site web, et le 20gp n'accpete pas les cgi-bin. Alors j'ai pris un espace web gratuit sur 100webspace (qui accepte la présence de codes cgi).

    Ainsi, dans mon formulaire, je place la balise <form method="post" action="http://monsitesous100webscpace.com/formmail.pl">

    (ici formmail est un exemple, j'ai essayé avec plusieurs)

    Je configure comme il faut mon script, je spécifie bien le chemin de sendmail, etc... seule petite manip pour éviter l'erreur 500, je mets "-w" derrière #!/usr/bin/perl -w

    Et dès que je teste mon formulaire, tout fonctionne, sauf que je ne reçois JAMAIS d'email...

    Etant novice en la matière, est-ce que j'ai homis quelque chose ?
    J'ai pu lire ça et là que certains modifient leur .htaccess, suis-je dans ce cas ?
    Bref je suis perdu.

    Merci pour toute aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut
    Voici un script qui marche a merveille


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    #!/usr/bin/perl
     
    #---------------------------#
    # DEBUT DE LA CONFIGURATION #
    #---------------------------#
     
    $mailCmd = '/usr/sbin/sendmail';
     
    $page = "page.html";
     
    $remerciement = "Votre message a bien &eacute;t&eacute; envoy&eacute;";
     
    $confirm="non";
     
    $texte_confirm = "Merci de confirmer l'envoi du fomulaire contenant les informations suivantes :<br><br><br>";
     
    # Adresses des sites d'où l'execution de ce script est possible :
    @sites =
    	(
    	'http://monsite.com',
    	);
     
     
     
     
    #------------------------------------#
    #         Programme principale       #
    #------------------------------------#
     
     
    if ($ENV{'HTTP_REFERER'}) 
    {
    foreach $executeur (@sites)
    	{
    	if ($ENV{'HTTP_REFERER'} =~ /$executeur/i) { $url_ok = '1'; last; }
    	}
    }
    else { $url_ok = '1'; }
     
    if ($url_ok != 1) { &erreur ("Vous n'êtes pas autorisé à utiliser ce script à cette adresse<br><a href=$ENV{'HTTP_REFERER'}>$ENV{'HTTP_REFERER'}</a>"); }
     
    read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
    if ($ENV{'QUERY_STRING'})
    	{$buffer = "$buffer\&$ENV{'QUERY_STRING'}";}
    @pairs = split(/&/,$buffer);
    foreach $pair (@pairs) 
      {
      ($name, $value) = split(/=/, $pair);
      $name =~ tr/+/ /;
      $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
      $value =~ tr/+/ /;
      $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
      if ($name eq 'destinataire' && ($value)) 
      	{ $destinataire = $value; }
      elsif ($name =~ /email/i && ($value)) { $expediteur = $value; $Form{$name} = "$value"; }
      elsif ($name eq 'sujet' && ($value)) 	{ $sujet = $value; }
      elsif ($name eq 'confirm' && ($value)) { $confirm = $value; }
      elsif ($name eq 'requis' && ($value)) { @requis = split(/\,/,$value); } 
      elsif ($Form{$name} && ($value)) { $Form{$name} = "$Form{$name}, $value"; }
      elsif ($value) { $Form{$name} = $value; }
      }
     
    $domain = $ENV{'SERVER_NAME'};
    $n_script = $ENV{'SCRIPT_NAME'};
     
    $script ="http://$domain$n_script";
     
    if (!$destinataire) { &erreur ("ERREUR : <br><br>Vous n'avez pas donné de destinaire dans votre formulaire<br>Veuillez verifier dans votre formulaire que le champs 'destinataire' y figure bien.<br><br>Utilisez la touche retour de votre navigateur pour retourner au formulaire."); }
    elsif ($destinataire !~ /\S+?\@\S+?(\.\S+?)+/) { &erreur ("ERREUR : <br><br>Le format de l'adresse de destinataire de votre formulaire n'est pas valide.<br>Veuillez verifier dans votre formulaire que le champs caché 'destinataire' y figure bien ou qu'il ne comporte pas d'erreur.<br><br>Utilisez la touche retour de votre navigateur pour retourner au formulaire."); }
    elsif (!$sujet) { $sujet = "Sujet non spécifié"; }
     
    foreach $champs (@requis)
    	{
    	$champs =~ s/^\s+//;
            $champs =~ s/\s+$//;
    	if (!$Form{$champs}) { $erreur++; $liste_champs .= "$champs "; }
    	}
     
    if ($erreur == 1) { &erreur ("Le champs <b>$liste_champs</b> est obligatoire, mais vous ne l'avez pas remplis.<br><br>Utilisez la touche retour de votre navigateur pour retourner au formulaire."); } 
    elsif ($erreur > 1) { &erreur ("Les champs <b>$liste_champs</b> sont obligatoires, mais vous ne les avez pas remplis.<br><br>Utilisez la touche retour de votre navigateur pour retourner au formulaire."); } 
     
    if ($confirm =~ /oui/i)
    {
    $txt .= "$texte_confirm\n";
    $txt .= "<FORM ACTION=$script METHOD=POST>\n";
    $txt .= "<input type=hidden name=confirm value=1>\n";
    $txt .= "<input type=hidden name=destinataire value=\"$destinataire\">\n";
    $txt .= "<input type=hidden name=sujet value=\"$sujet\">\n";
    $txt .= "<input type=hidden name=email value=\"$expediteur\">\n";
    foreach $name (sort {uc($a) cmp uc($b)} keys %Form)
    	{
    	$Form{$name} =~ s'"'&quot;'g;
    	$Form{$name} =~ s/\</&lt;/g;
    	$Form{$name} =~ s/\>/&gt;/g;
    	$Form{$name} =~ s/\r\n/<BR>/g;
    	$txt .= "\n<input type=hidden name=$name value=\"$Form{$name}\">\n";
    	$txt .= "<b>$name</b> :<br>$Form{$name}<br><br>\n";
    	}
    $txt .= "<input type=submit value=\"Confirmer l'envoi\">";
    $_[0]="$txt";
    &erreur;
    }
     
    open MAIL , "|$mailCmd -t" || &erreur ("Ne peux pas ouvrir $mailCmd!");
    print MAIL "To: $destinataire\r\n";
    print MAIL "From: $expediteur\r\n";
    print MAIL "Subject: $sujet\r\n\n"; 
    foreach $name (sort {uc($a) cmp uc($b)} keys %Form)
    	{
    	$Form{$name} =~ s'&quot;'"'g;
    	$Form{$name} =~ s/&lt;/\</g;
    	$Form{$name} =~ s/&gt;/\>/g;
    	$Form{$name} =~ s/<BR>/\n/g;
    	print MAIL "$name :\n$Form{$name}\n\n";	
    	}
    print MAIL "\n\n------------------------------------------------\n";
    print MAIL "Adresse IP de l'expediteur : $ENV{'REMOTE_ADDR'}\n";
    print MAIL "Navigateur utilisé : $ENV{'HTTP_USER_AGENT'}\r\n";
    if ($referer) { print MAIL "Formulaire envoyé de : $ENV{'HTTP_REFERER'}\n"; }
    close(MAIL);
    &erreur ("$remerciement");
    exit;
     
    sub erreur
    {
    print "Content-type: text/html\n\n";
    open(TEMPLATE,"$page");
    while (<TEMPLATE>){ $template .= $_; }
    close(TEMPLATE);
    $template =~ s/%%%MESSAGE%%%/$_[0]/g;
    print $template;
    exit;
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Par défaut
    Pour l'invoquer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    <form action="form_mail.cgi" method="post">
    <input type="hidden" name="destinataire" value="toi@domaine.com">
    <input type="hidden" name="requis" value="nom, email, texte">
     
     
    Nom
    <input type="text" name="nom" size="56">
     
    Email
    <input type="text" name="email" size="56">
     
    <select size="1" name="sujet">
    <option value="blabla">blabla</option>
    </select>>
     
    Message
    <textarea rows="9" name="texte" cols="40"></textarea>
    <input type="submit" value="Envoyer">
     
     
    </form>

  4. #4
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 26
    Par défaut
    Merci pour le code.
    Mais ça ne fonctionne toujours pas....

    J'ai repris exactement le code en l'adaptant à ma configuration.

    J'ai mis le formulaire sur mon site sous OVH, et j'ai placé form_mail.cgi sur mon site 100webspace qui accepte les cgi, j'ai pris garde de le transférer en ASCII et de mettre 755 en permission.

    Eh bien c'est comme pour tous les autres codes que j'ai pu tester : tout fonctionne parfaitement bien sauf qu'à l'arrivée il n'y a aucun mail de réceptionné dans la boîte du destinataire du formulaire (moi).

    Comprends pas

    Une idée ????

  5. #5
    Expert confirmé
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Par défaut
    C'est probablement parce que tous ces scripts (comme celui qu'on t'a proposé plus haut) essayent d'utiliser le logiciel "sendmail", et que celui-ci n'est pas disponible sur le serveur en question. Utiliser le module Net::SMTP à la place devrait régler le problème.

    --
    Jedaï

  6. #6
    Membre averti
    Inscrit en
    Décembre 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 26
    Par défaut
    Bravo Jedai.
    J'allais justement envoyer un post pour dire que je venais de comprendre pourquoi ca ne fonctionnait pas.... Une petite recherche sur google que j'aurais du faire avant toute chose.....

    Néanmoins, comment utilise t'on le module Net::SMTP ??? merci

  7. #7
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 165
    Par défaut
    Voilà un exemple de l'utilisation de Net::SMTP sans avoir de Sendmail sur le PC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    my $smtp = Net::SMTP->new('smtp.neuf.fr', Debug => 0, Timeout => 30);
            $smtp->mail('expediteur@a.fr');
            $smtp->to('destinataire@e.com');
            $smtp->data();
            $smtp->datasend( << "EOM");
    From: Moi <expediteur\@a.fr>
    To: Toi <destinataire\@e.com>
    Subject: Le sujet qui va bien
     
     
    Le blabla
     
     
    EOM
            $smtp->dataend();
            $smtp->quit();
    Petites précisions :
    Mettre EOM entre guillements (") pour permettre l'interprétation de variables dans le corps du texte.
    Mettre 2-3 retour-chariots après le sujet pour bien distinguer les en-tetes, sinon le coprs du message se retrouvera dans le en-têtes dans le mail reçu.

Discussions similaires

  1. cgi-bin + perl
    Par olifile dans le forum Apache
    Réponses: 3
    Dernier message: 29/07/2007, 21h14
  2. Configurer cgi-bin
    Par nkki_nkki dans le forum Apache
    Réponses: 7
    Dernier message: 23/01/2007, 22h50
  3. Pas autorisé à accéder au répertoire "cgi-bin" ave
    Par Pragmateek dans le forum Serveurs (Apache, IIS,...)
    Réponses: 3
    Dernier message: 09/04/2006, 15h45
  4. apache et cgi-bin
    Par djibril dans le forum Apache
    Réponses: 2
    Dernier message: 08/04/2006, 17h07
  5. [web] Apache Cgi-Bin
    Par Tommy Jean dans le forum Web
    Réponses: 8
    Dernier message: 23/08/2004, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo