problèmes avec le formulaire de contact du wiki

zetraderzetrader Member
janvier 2010 modifié dans Bogues
Bonjour, avec ce formulaire :
[url]http://wiki.pluxml.org/?page=Créer[/url] un formulaire de contact
Quand je teste le formulaire, j'ai souvent l'erreur d'envoi "Une erreur s'est produite au cours de l'envoi de votre message..."
J'ai le problème sous pluxml 4.2, 4.3 et 4.3.1
Le problème est le même sous php 4.4.9 et 5.2.12 (j'ai essayé les deux versions, je suis passé à php5 aujourd'hui) sur mon formulaire de contact :
http://zetrader.fr/?static4/pierre-aribaut-zetrader-contact
Sur le même site, les formulaires de commentaires du blog fonctionnent bien sans aucun bug, et les formulaires avec formmail fonctionnent correctement, pas d'erreur d'envoi.
Voici mon code, c'est c/c du code du wiki avec mail modifié :
<table width=420>
<?php
# Page statique Pluxml : formulaire de contact par florent@pluxml.org
# revision 1.0 par Stephane: compatibilité pluxml 4.2 

if(!defined('PLX_ROOT')) exit;

# Renseignez ici votre adresse mail
$email = 'monmail@gmail.com';

# Notre capcha
$capcha = new plxCapcha();

# Nos variables
$erreur = '';
$succes = '';

if(!empty($_POST)) { # Formulaire valide

	if($_POST['rep2'] == md5($capcha->gds.$_POST['rep'])) { # Capcha valide
		$_POST['nom'] = trim($_POST['nom']);
		$_POST['content'] = trim($_POST['content']);
		$_POST['ip'] = plxUtils::getIp();
		# On verifie les donnees
		if(empty($_POST['nom']) OR empty($_POST['mail']) OR empty($_POST['content']))
			$erreur = 'Merci de remplir tous les champs obligatoires';
		if($erreur == '' AND !plxUtils::checkMail(trim($_POST['mail'])))
			$erreur = 'L\'adresse mail saisie n\'est pas valide';
		# On peut envoyer si pas d'erreur
		if($erreur == '') {
			$corps = 'Son nom : '.$_POST['nom']."\n";
			$corps .= 'Son mail : '.$_POST['mail']."\n";
			$corps .= 'Son adresse IP : '.$_POST['ip']."\n";
			$corps .= 'Son message : '."\n";
			$corps .= $_POST['content'];
			# On retire certains caracteres
			$corps = str_replace("\r"," ",$corps);
			# On envoi le mail
			$headers = 'From: '.$_POST['mail']."\n";
			$headers .= 'MIME-Version: 1.0'."\n";
			$headers .= 'Content-type: text/plain; charset="'.PLX_CHARSET.'"'."\n";
			$headers .= 'Content-transfer-encoding: 8bit'."\n";
			if(mail($email,'## Pluxml ## contact depuis votre formulaire de contact',$corps, $headers))
				$succes = 'Merci de nous avoir contacté, nous vous répondrons le plus rapidement possible.';
			else
				$erreur = 'Une erreur s\'est produite au cours de l\'envoi de votre message...';
		}
	} else { # Capcha non valide
		$erreur = 'la vérification anti-spam a échouée';
	}
} else {
	# Initialisation
	$erreur = 'Merci de remplir le formulaire ci-dessous';
	$_POST['nom'] = '';
	$_POST['content'] = '';
	$_POST['mail'] = '';
}
?>
<div id="form">
	<p class="message_contact"><?php echo (!empty($erreur))?$erreur:$succes; ?></p>
	<?php if(!empty($erreur) OR empty($_POST)): ?>
		<form action="#form" method="post">
			<fieldset>
				<label>Votre nom :</label>
				<input name="nom" type="text" size="30" value="<?php echo plxUtils::strCheck($_POST['nom']) ?>" maxlength="30" /><br />
				<label>Votre e-mail :</label>
				<input name="mail" type="text" size="30" value="<?php echo plxUtils::strCheck($_POST['mail']) ?>" /><br />
				<label>Votre message :</label>
				<textarea name="content" cols="35" rows="8"><?php echo plxUtils::strCheck($_POST['content']) ?></textarea>
				<label><strong>Vérification anti-spam</strong> :</label>
				<p><?php echo $capcha->q(); ?> : <input name="rep" type="text" size="10" /></p>
				<input name="rep2" type="hidden" value="<?php echo $capcha->r(); ?>" />
				<p><input type="submit" value="Envoyer" /> <input type="reset" value="Effacer" /></p>
			</fieldset>
		</form>
	<?php endif; # Fin du if si mail envoye ?>
</div>
</table>
Nota : j'ai encadré le tout dans une table de 420 pixels sinon le champ du message se barre à droite de la page, mais le bug aléatoire de l'échec d'envoi se fait que j'encadre de la table ou non.
Un coup ça marche j'ai :
"Merci de nous avoir contacté, nous vous répondrons le plus rapidement possible."
Et la tentative suivante j'ai :
"Une erreur s'est produite au cours de l'envoi de votre message..."

Une idée d'où ça peut venir ? Cela arrive à d'autres ?

Réponses

  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour zetrader

    Est-ce que la fonction mail() de php est autorisée sur ton hébergeur ?

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • zetraderzetrader Member
    janvier 2010 modifié
    J'aurais tendance à dire que oui puisque le formmail marche, et là je viens de faire un test de me faire renvoyer mon pass par mail sur le forum dnf (un forum sans base de données), et ça fonctionne.

    Le code utilisé par ce forum pour la fonction de renvoi du mot de passe :
    if ($mb_infos = checkpseudo(strtolower($login_pseudo),'',4)) {
    $mail = $mb_infos['mail'];
    $passrecover = $mb_infos['password'];
    if (!$mb_infos['nomail']) {
    if (ereg(".+@.+\..+",$mail)) {
    if (mailspam()) {
    if (mail($mail,"Votre mot de passe","Votre nom d'utilisateur et mot de passe sur les forums $sitename.\n\nURL : $thisurl\nPseudo : $login_pseudo\nPassword : $passrecover\n\nLe forum vous a envoyé ces informations suite à une demande. Cette fonction est automatisée mais protégée contre un trop grand flood. Si vous n'avez pas demandé ces informations, nous nous en excusons et merci de contacter l'administrateur du site en répondant à cet email.", "From: Forums $sitename <$sitemail>\r\nReply-To: <$sitemail>"))
    	msg("Mot de passe pour $login_pseudo envoyé par email",1);
    	else msg("Impossible d'envoyer un email, contactez directement l'admin pour votre password.",1);}
    else msg("<center>« EMAIL ANTISPAM »</center><br>Pour minimiser le spam, l'envoi d'email resque bloqué pendant une heure après un envoi. Repassez plus tard ou crééz un nouveau pseudo.",0);}
    else msg("Email invalide<br> L'adresse email fournie lors de l'inscription ne semble pas être valide. Contactez directement l'administrateur.",0);}
    else msg("Permission refusée<br> Cet utilisateur a demandé à ne plus recevoir d'email.",0);}
    else msg("Pseudo inexistant",0);
    
    Suite au passage à php5 j'ai rajouté un fichier php.ini dans le répertoire d'un forum avec bdd qui me faisait une erreur me disant qu'il ne peut pas modifier des headers déjà envoyés.
    En mettant un fichier php.ini avec la ligne output_buffering = 4096 ça a supprimé ce message d'erreur.
    Pour le répertoire du forum dnf sans bdd, j'ai mis aussi ce fichier php.ini même si javais pas ce message d'erreur.
    En revanche sur le répertoire racine du blog, n'ayant pas eu de pb au passage avec php5, je n'ai pas mis de fichier php.ini, je devrais ?
    Sinon voici la config php installée :
    http://zetrader.fr/phinfo.php
    Tu sauras probablement mieux décrypter que moi si y a un truc bloqué au niveau de la fonction mail.

    Le code php du fichier appelé pour mon formulaire mail utilisant formmail via un input (formulaire qui fonctionne bien) :
    <?php
    // Pour contrer les spams, on va faire une petite regex
    if(preg_match("!http|/|www|\[A-Za-z]{2,4}!is",@$_POST['nom']))
    {
       echo "<blockquote><h1>Anti-Spams</h1>
          <p><em>Les URL et les slashs sont interdits.</em></p>
                    </blockquote>\n";
       exit();
    }
    if(preg_match("!http|/|www|\[A-Za-z]{2,4}!is",@$_POST['email']))
    {
       echo "<blockquote><h1>Anti-Spams</h1>
          <p><em>Les URL et les slashs sont interdits.</em></p>
                    </blockquote>\n";
       exit();
    }
    if(preg_match("!http|/|www|\[A-Za-z]{2,4}!is",@$_POST['sujet']))
    {
       echo "<blockquote><h1>Anti-Spams</h1>
          <p><em>Les URL et les slashs sont interdits.</em></p>
                    </blockquote>\n";
       exit();
    }
    if(preg_match("!http|/|www|\[A-Za-z]{2,4}!is",@$_POST['message']))
    {
       echo "<blockquote><h1>Anti-Spams</h1>
          <p><em>Les URL et les slashs sont interdits.</em></p>
                    </blockquote>\n";
       exit();
    }
    $TO = "monmail@gmail.com";
    
    $h  = "From: " . $TO;
    
    $message = "";
    
    $email = $_POST['email'];
    if(empty($email)) 
    { 
    print("<center>Mettez votre mail pour la réponse ! merci :)</center>"); 
    exit(); 
    } 
    $sujet = $_POST['sujet'];
    if(empty($sujet)) 
    { 
    print("<center>indiquez moi le sujet du message ! merci :)</center>"); 
    exit(); 
    }
    $message = $_POST['message'];
    if(empty($message)) 
    { 
    print("<center>Vous oubliez le principal, le message ! merci :)</center>"); 
    exit(); 
    }
    $nom = $_POST['nom'];
    if(empty($nom)) 
    { 
    print("<center>Merci de laisser votre nom ! merci :)</center>"); 
    exit(); 
    }
    while (list($key, $val) = each($HTTP_POST_VARS)) {
      $message .= "$key : $val\n";
    }
    
    mail($TO, $subject, $message, $h);
    
    Header("Location: zetrader-pierre-aribaut-merci-message.php");
    
    ?>
    
  • ah au fait sinon j'ai un pb en ayant mis php5 dans l'interface admin, quand je vais dans "vérifier la version officielle"
    J'ai le message :
    "Impossible de vérifier les mises à jour tant que 'allow_url_fopen' est désactivé sur ce système"
    J'imagine que ça se règle aussi via un fichier php.ini mais est-ce que ça peut avoir d'autres conséquences que l'impossiblité de voir la mise à jour ? Cette fonction 'allow_url_fopen' est utilisée pour l'envoi du mail ?
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour zetrader

    Pour l'erreur allow_url_fopen c'est lié à la configuration de ton serveur.
    D'ailleurs tu peux le voir avec ton phpinfo() : allow_url_fopen = Off
    Il faut qu'il soit à On pour ne plus avoir l'erreur et permettre à pluxml de vérifier les nouvelles versions dispos.

    Pour l'envoi de mail. Il ne faut pas confondre un formmail (qui souvent s'appuie sur un cgi du serveur/hébergeur) et la fonction mail() de php

    D'après le code utilisé par ton forum pour la fonction de renvoie du mot de passe, la fonction mail() et utilisée. Comme tu dis que cela fonctionne, j'en déduis que la fonction est bien présente et fonctionnelle. Donc le problème doit venir d'ailleurs. Je n'ai pas de réponse à te donner pour le moment.

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • J'ai mis sur On le paramètre allow_url_fopen mais ça change rien ni dans l'interface, ni par rapport au formulaire de mail.
    J'ai tenté plusieurs choses par rapport au formulaire de contact du wiki, retirer le texte avant le formulaire ça change rien, ce formulaire me fait une erreur au moins une fois sur deux, si la fonction mail() n'était pas autorisé, ça n'arriverait que ça puisse marcher puisque des fois ça marche.
    Bref je n'arrive pas à voir d'où vient le problème mais je ne peux pas laisser en place un formulaire de contact qui marche moins d'une fois sur deux.
    Donc je me suis débrouillé autrement, j'ai intégré le formulaire de contact à base de formmail à la place puisque ce formulaire fonctionne à tous les coups (jusqu'ici en tout cas).
    Mon hébergeur c'est 1and1, personne d'autre n'a ce problème avec le formulaire de contact du wiki chez 1and1 ?
    Il faut faire quelques tests pour voir puisque des fois ça marche, sait-on jamais qu'un seul test soit "chanceux".
Connectez-vous ou Inscrivez-vous pour répondre.