Page 1 sur 1

Fonction mail() pour envoyer a gMail

Posté : 11 janv. 2012, 07:33
par Maltroth
Salut tout le monde, j'ai un problème avec un script qui prends les champs d'un formulaire et envoie l'info à un adresse courriel gMail. Tous mes variables fonctionnent mais le mail ne s'envoie pas et va tout de suite dans le else ... voici le code `:

HTML :

Code : Tout sélectionner

<form id="fiche" method="post" action="mon_url.php"> <fieldset><legend>Vos coordonnées</legend> <p><label for="nom">Nom :</label><input type="text" id="nom" name="nom" tabindex="1" /></p> <p><label for="email">Email :</label><input type="text" id="email" name="email" tabindex="2" /></p> </fieldset> <fieldset><legend>Informations du band</legend> <p><label for="nomband">Nom :</label><input type="text" id="nomband" name="nomband" tabindex="3" /></p> <p><label for="style">Style :</label><input type="text" id="style" name="style" tabindex="3" /></p> <p><label for="formation">Année de formation :</label><input type="text" id="formation" name="formation" tabindex="3" /></p> <p><label for="ville">Ville :</label><input type="text" id="ville" name="ville" tabindex="3" /></p> <p><label for="membres">Membres (et fonction) :</label><textarea id="membres" name="membres" tabindex="4" cols="30" rows="6">Exemple: George LePoil - Vocals</textarea></p> <p><label for="facebook">*Url Facebook :</label><input type="text" id="facebook" name="facebook" tabindex="3" /></p> <p><label for="reverbnation">*Url ReverbNation :</label><input type="text" id="reverbnation" name="reverbnation" tabindex="3" /></p> <p><label for="myspace">*Url Myspace :</label><input type="text" id="myspace" name="myspace" tabindex="3" /></p> <p><label for="imglogo">Url Image Logo :</label><input type="text" id="imglogo" name="imglogo" tabindex="3" /></p> <p><label for="imgband">Url Image Band :</label><input type="text" id="imgband" name="imgband" tabindex="3" /></p> <div style="text-align:right;"><input type="submit" name="envoi" value="Envoyer les informations !" /></div> </fieldset> </form>
PHP :

Code : Tout sélectionner

<?php /* ******************************************************************************************** CONFIGURATION ******************************************************************************************** */ // destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule $destinataire = '[email protected]'; // Messages de confirmation du mail $message_envoye = "Votre message nous est bien parvenu !"; $message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP."; // Messages d'erreur du formulaire $message_erreur_formulaire = "Vous devez d'abord <a href='mon_url'>envoyer le formulaire</a>."; $message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur."; /* ******************************************************************************************** FIN DE LA CONFIGURATION ******************************************************************************************** */ // on teste si le formulaire a été soumis if (!isset($_POST['envoi'])) { // formulaire non envoyé echo '<p>'.$message_erreur_formulaire.'</p>'."\n"; } else { /* * cette fonction sert à nettoyer et enregistrer un texte */ function Rec($text) { $text = trim($text); // delete white spaces after & before text if (1 === get_magic_quotes_gpc()) { $stripslashes = create_function('$txt', 'return stripslashes($txt);'); } else { $stripslashes = create_function('$txt', 'return $txt;'); } // magic quotes ? $text = $stripslashes($text); $text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well $text = nl2br($text); return $text; }; /* * Cette fonction sert à vérifier la syntaxe d'un email */ function IsEmail($email) { $pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$"; return (eregi($pattern,$email)) ? true : false; }; // formulaire envoyé, on récupère tous les champs. $nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : ''; $email = (isset($_POST['email'])) ? Rec($_POST['email']) : ''; $nomband = (isset($_POST['nomband'])) ? Rec($_POST['nomband']) : ''; $style = (isset($_POST['style'])) ? Rec($_POST['style']) : ''; $formation = (isset($_POST['formation'])) ? Rec($_POST['formation']) : ''; $ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : ''; $membres = (isset($_POST['membres'])) ? Rec($_POST['membres']) : ''; $facebook = (isset($_POST['facebook'])) ? Rec($_POST['facebook']) : ''; $reverbnation = (isset($_POST['reverbnation'])) ? Rec($_POST['reverbnation']) : ''; $myspace = (isset($_POST['myspace'])) ? Rec($_POST['myspace']) : ''; $imglogo = (isset($_POST['imglogo'])) ? Rec($_POST['imglogo']) : ''; $imgband = (isset($_POST['imgband'])) ? Rec($_POST['imgband']) : ''; // On va vérifier les variables et l'email ... $email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré if (($nom != '') && ($email != '') && ($nomband != '') && ($style != '') && ($formation != '') && ($ville != '') && ($membres != '')) { // les 4 variables sont remplies, on génère puis envoie le mail $headers = "From: ".$nom."<".$email.">"."\n"; //On mets tous les variables dans un '$message' et on créé la variable de l'objet $message = "Nom : ".$nomband."\n Style : ".$style."\n Formation : ".$formation."\n Ville : ".$ville."\n Membres : ".$membres."\n Facebook : ".$facebook."\n Reverb Nation : ".$reverbnation."\n MySpace : ".$myspace."\n Url image logo : ".$imglogo."\n Url image band : ".$imgband; $objet = "Fiche de groupe : ".$nomband; // Remplacement de certains caractères spéciaux $message = str_replace("'","'",$message); $message = str_replace("&#8217;","'",$message); $message = str_replace(""",'"',$message); $message = str_replace('<br>','',$message); $message = str_replace('<br />','',$message); $message = str_replace("<","<",$message); $message = str_replace(">",">",$message); $message = str_replace("&","&",$message); // Envoi du mail if (mail($cible, $objet, $message, $headers)) { echo '<p>'.$message_envoye.'</p>'."\n"; } else { echo '<p>'.$message_non_envoye.'</p>'; }; } else { // une des 3 variables (ou plus) est vide ... echo '<p>'.$message_formulaire_invalide.' <a href="mon_url">Retour au formulaire</a></p>'."\n"; }; }; // fin du if (!isset($_POST['envoi'])) ?>
Donc à chaque fois, ça m'affiche : L'envoi du mail a échoué, veuillez réessayer SVP. Avez-vous des idées ?

Re: Fonction mail() pour envoyer a gMail

Posté : 11 janv. 2012, 09:24
par Mazarini
Est ce que le problème est lié à gmail ?

Autrement, je n'ai pas vu l'initialisation de $cible
 if (mail($cible, $objet, $message, $headers))

Re: Fonction mail() pour envoyer a gMail

Posté : 11 janv. 2012, 18:46
par Maltroth
Je ne crois pas que c'est seulement lié à gmail parce que j'ai essayé aussi avec un compte hotmail et même résultat. À moins qu'il me faut autre chose pour envoyé un mail à ces hébergeurs.

Oui j'avais supprimer la partie inutile où l'initialisation de $cible se faisait. J'ai remplacé $cible par $destinataire mais sans résultats ...

Re: Fonction mail() pour envoyer a gMail

Posté : 12 janv. 2012, 10:36
par Shenryu
Ajoute error_reporting(E_ALL); au début de ton script afin d'avoir les messages d'erreurs stp.

Re: Fonction mail() pour envoyer a gMail

Posté : 12 janv. 2012, 15:47
par Maltroth
J'ai ajouté la ligne mais ça me donne rien nul part ..
Mais je trouvé une erreur qui s'affiche l'instant d'un moment dans ma console de Chrome :
POST http://mon_url/traitement_formulaire.php 500 (Internal Server Error)

Je n'ai pas mentionné que tout ça est sur serveur dans un site Wordpress

Re: Fonction mail() pour envoyer a gMail

Posté : 12 janv. 2012, 15:50
par Maltroth
Désolé du douple-post mais cela aurait-il rapport au .htaccess ?

Re: Fonction mail() pour envoyer a gMail

Posté : 12 janv. 2012, 19:18
par moogli
L'erreur 500 est souvent due à un .htaccess foireux effectivement (une errer de conf quoi ;) ).

Après faut voir si c'est tout le temps ou la pas ;)

Vu le message affiché mail() retourne false.
Cela veux dire que la conf du gestionnaire de mail est sûrement foireuse (dans le php.ini ou dans un .htaccess voir dans un php.ini "utilisateur" situé dans le répertoire.

À quoi ressemble ton code maintenant ?
Si tu utilise php5 (<5.4 :mrgreen: ) l'error _repporting devrait être E_ALL|E_STRICT ;)

@+

Re: Fonction mail() pour envoyer a gMail

Posté : 12 janv. 2012, 19:50
par Maltroth
Je n'avais ni .htaccess, ni php.ini et je ne sais pas vraiment comment les configurer :?
J'ai chercher longuement sur internet à chercher un solution et rien ne fonctionne..

J'ai essayé de créer un .htaccess qui ressemble à ça :

Code : Tout sélectionner

# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> # END WordPress AddType x-mapp-php5 .php AddHandler x-mapp-php5 .php
Et j'ai aussi testé un php.ini comme ça au cas où ce serait la mémoire allouée :

Code : Tout sélectionner

memory=20mb
Mon code php ressemble à ça :
<?php
	error_reporting(E_ALL);
	/*
		********************************************************************************************
		CONFIGURATION
		********************************************************************************************
	*/
	// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
	$destinataire = '[email protected]';

	// Messages de confirmation du mail
	$message_envoye = "Votre message nous est bien parvenu !";
	$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

	// Messages d'erreur du formulaire
	$message_erreur_formulaire = "Vous devez d'abord <a href='http://www.wtfmetalmusic.com/index.php/envoyer-une-fiche-de-groupe/'>envoyer le formulaire</a>.";
	$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

	/*
		********************************************************************************************
		FIN DE LA CONFIGURATION
		********************************************************************************************
	*/

	// on teste si le formulaire a été soumis
	if (!isset($_POST['envoi']))
	{
		// formulaire non envoyé
		echo '<p>'.$message_erreur_formulaire.'</p>'."\n";
	}
	else
	{
		/*
		 * cette fonction sert à nettoyer et enregistrer un texte
		 */
		function Rec($text)
		{
			$text = trim($text); // delete white spaces after & before text
			if (1 === get_magic_quotes_gpc())
			{
				$stripslashes = create_function('$txt', 'return stripslashes($txt);');
			}
			else
			{
				$stripslashes = create_function('$txt', 'return $txt;');
			}

			// magic quotes ?
			$text = $stripslashes($text);
			$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
			$text = nl2br($text);
			return $text;
		};

		/*
		 * Cette fonction sert à vérifier la syntaxe d'un email
		 */
		function IsEmail($email)
		{
			$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
			return (eregi($pattern,$email)) ? true : false;
		};

		// formulaire envoyé, on récupère tous les champs.
		$nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
		$email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
		$nomband   = (isset($_POST['nomband']))   ? Rec($_POST['nomband'])   : '';
		$style = (isset($_POST['style'])) ? Rec($_POST['style']) : '';
		$formation = (isset($_POST['formation'])) ? Rec($_POST['formation']) : '';
		$ville = (isset($_POST['ville'])) ? Rec($_POST['ville']) : '';
		$membres = (isset($_POST['membres'])) ? Rec($_POST['membres']) : '';
		$facebook = (isset($_POST['facebook'])) ? Rec($_POST['facebook']) : '';
		$reverbnation = (isset($_POST['reverbnation'])) ? Rec($_POST['reverbnation']) : '';
		$myspace = (isset($_POST['myspace'])) ? Rec($_POST['myspace']) : '';
		$imglogo = (isset($_POST['imglogo'])) ? Rec($_POST['imglogo']) : '';
		$imgband = (isset($_POST['imgband'])) ? Rec($_POST['imgband']) : '';

		// On va vérifier les variables et l'email ...
		$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré

		if (($nom != '') && ($email != '') && ($nomband != '') && ($style != '') && ($formation != '') && ($ville != '') && ($membres != ''))
		{
			// les 4 variables sont remplies, on génère puis envoie le mail
			$headers = "From: ".$nom."<".$email.">"."\n";
			
			//On mets tous les variables dans un '$message' et on créé la variable de l'objet
			$message = "Nom : ".$nomband."\n Style : ".$style."\n Formation : ".$formation."\n Ville : ".$ville."\n Membres : ".$membres."\n Facebook : ".$facebook."\n Reverb Nation : ".$reverbnation."\n MySpace : ".$myspace."\n Url image logo : ".$imglogo."\n Url image band : ".$imgband;
			$objet = "Fiche de groupe : ".$nomband;
			
			// Remplacement de certains caractères spéciaux
			$message = str_replace("'","'",$message);
			$message = str_replace("&#8217;","'",$message);
			$message = str_replace(""",'"',$message);
			$message = str_replace('<br>','',$message);
			$message = str_replace('<br />','',$message);
			$message = str_replace("<","<",$message);
			$message = str_replace(">",">",$message);
			$message = str_replace("&","&",$message);
			
			// Envoi du mail
			if (mail($destinataire, $objet, $message, $headers))
			{
				echo '<p>'.$message_envoye.'</p>'."\n";
			}
			else
			{
				echo '<p>'.$message_non_envoye.'</p>';
			};
		}
		else
		{
			// une des 3 variables (ou plus) est vide ...
			echo '<p>'.$message_formulaire_invalide.' <a href="http://www.wtfmetalmusic.com/index.php/envoyer-une-fiche-de-groupe/">Retour au formulaire</a></p>'."\n";
		};
	}; // fin du if (!isset($_POST['envoi']))
?>
Merci beaucoup de votre aide, c'est apprécié !

Re: Fonction mail() pour envoyer a gMail

Posté : 13 janv. 2012, 20:40
par Maltroth
Salut, merci beaucoup de l'aide mais j'ai trouver un plugin pour Wordpress qui me simplifiera la tâche.