Fonction mail() et serveur smtp en local

fab1105 Messages postés 118 Statut Membre -  
 le père -
Bonjour,

Je cherche à tester une fonction mail() de php en local avec wampserver , j'ai modifié dans le fichier php.ini la ligne SMTP en mettant SMTP = smtp.free.fr (mon fai), mais cela ne marche toujours pas j'ai l'erreur suivante :
Warning: mail() [function.mail]: SMTP server response: 504 5.5.2 <you@yourdomain>: Sender address rejected: need fully-qualified address in C:\wamp\www\...

Je suis assez novice en la matière, quelqu'un aurait-il une solution à me proposer ?

Merci d'avance pour vos réponse.
A voir également:

23 réponses

fab1105 Messages postés 118 Statut Membre 7
 
RESOLU

Ca y'est c'es bon j'ai trouvé

dans le fichier php.ini

j'ai remplacé la ligne :
; For Win32 only.
sendmail_from = you@yourdomain

par :
; For Win32 only.
sendmail_from = fabiloute@gmail.com

et tout marche!

Merci encore pour ton aide.
5
le père
 
Bonjour

D'abord, tu as bien fait de mettre SMTP = smtp.free.fr
Si ton mail est rejeté, d'après le message, c'est que tu as une adresse incorrecte. Il te manque très probablement un "From:machin@truc.fr" dans les headers supplémentaires que tu passes à la fonction mail.
0
fab1105 Messages postés 118 Statut Membre 7
 
Bonjour le père,

Oui tu as surement raison il doit manquer quelque chose, c'est juste un bout de code que j'ai écris pour tester la fonction, il n'est pas complet mais je pensais qu'il fonctionnerait comme ça.
Pour faire simple j'aurai du donner le code dès le début :-) (les variables sont récupérées d'un formulaire)

Le voici :

$adresse_dest ="moi@moi.com";
$sujet = "Une nouvelle question est arrivée";
$contenu_message = "Nom demandeur : ".$nom."\n" .
"Email demandeur : ".$mail."\n".
"Demande :\n" .$question. "\n";
$adresse_exp = $mail;

mail($adresse_dest, $sujet, $contenu_message, $adresse_exp);

Il y 'a surement des erreurs dans ce script mais comme je débute, c'est normal et tu vas certainement me dire lesquelles....

Merci encore pour ton aide.
0
le père
 
Regarde la doc de la fonction mail :
https://www.php.net/manual/fr/function.mail.php
Le 4ème paramètre n'est pas l'adresse de l'expéditeur, mais les en-têtes supplémentaires.
Parmi ces en-têtes supplémentaires, il y en a un qui s'appelle From et qui indique l'expéditeur. Mais il pourrait aussi y en avoir d'autres.
Laisse tomber le $adresse_exp qui ne sert à rien, et crée le bon en-tête :

$headers = "From:$mail";
mail($adresse_dest, $sujet, $contenu_message, $headers);
Ça devrait aller mieux
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fab1105 Messages postés 118 Statut Membre 7
 
Merci je vais essayer de faire un script complet et je reviendrai poster ici quand ça fonctionnera nickel, ça pourra peut-être en aider d'autre....

Merci encore pour ton aide.
0
fab1105 Messages postés 118 Statut Membre 7
 
Bonjour,

En fait j'ai trouvé un post avec le même problème, il n'est apparemment pas possible de tester l'envoi en local sans avoir installé un serveru mail

https://forums.commentcamarche.net/forum/affich-12926383-envoyer-donnees-formulaire-par-mail

voilà merci pour vos réponses.
0
le père
 
Mais si c'est possible, je le fais tous le jours.Et je ne suis pas le seul.
Le message d'erreur que tu donnes dans ta question indique clairement que tu arrives bien à te connecter au serveur SMTP de free mais qu'il te rejette à cause d'une adresse incorrecte.
Peux-tu montrer le script prenant en compte mon message 3 ? Il devrait marcher.
0
fab1105 Messages postés 118 Statut Membre 7
 
Bonjour le père,

J'ai essayé avec ton script du message 3 sur un site que j'ai hébergé pour tester et il fonctionne sans problème, mais lorsque je l'essaie en local il ne fonctionne pas et me donne l'erreur indiquée plus haut :

Warning: mail() [function.mail]: SMTP server response: 504 5.5.2 <you@yourdomain>: Sender address rejected: need fully-qualified address in C:\wamp\www\...

Cela provient donc surement d'un problème de configuration chez moi non ?

Merci pour ta réponse.
0
le père
 
Je répète : Peux-tu montrer le script prenant en compte mon message 3 ?
Et l'essayes-tu avec la même adresse d'expéditeur que quand tu l'essayes en ligne ?
0
le père
 
J'ai volontairement provoqué ton erreur. La valeur <you@yourdomain> montre que TU N'AS PAS ajouté de header From
0
fab1105 Messages postés 118 Statut Membre 7
 
Alors voici le code complet, c'est le même en local que sur le site j'ai fais un copier coller :

<h2>Formulaire de contact</h2>

<?php

if (isset($_POST['nom']) and isset($_POST['prenom']) and isset($_POST['mail']) and isset($_POST['jour']) and isset($_POST['mois']) and isset($_POST['annee']) and isset($_POST['question']))

{
if ($_POST['nom'] != NULL and $_POST['prenom'] != NULL and $_POST['mail'] != NULL and $_POST['jour'] != NULL and $_POST['mois'] !=NULL and $_POST['annee'] != NULL and $_POST['question'] != NULL )

{
if(preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $_POST['mail']))

{

if (is_numeric($_POST['jour']) && is_numeric($_POST['mois']) && is_numeric($_POST['annee']) && checkdate($_POST['mois'],$_POST['jour'],$_POST['annee']))

{

echo'<div id="confirmation"><p>Votre demande a bien été prise en compte.</p></div><br />';
echo'Je vous réponderai dans un délai de 24 heures, sur votre boîte e-mail.<br /><br />';

echo'<div id="retour"><a href="index.html">Revenir à l\'accueil</a></div><br /><br />';

$sujet = "Une nouvelle question est arrivée";
$contenu_message = "Nom demandeur : ".$nom."\n" .
"Email demandeur : ".$mail."\n".
"Demande :\n" .$question. "\n";

$headers = "From:fabiloute@gmail.com";
mail($mail, $sujet, $contenu_message, $headers);

$adresse_client = $mail;
$apropos = "Contact";
$contenu = "Votre question m'est bien parvenue, je vous réponderai dans un délai de 24 heures";
$adresse_moi = "fabiloute@gmail.com";

mail($adresse_client, $apropos, $contenu, $adresse_moi);

}
}
}
}

et voici les 2 mails que je recois (j'ai rentré mon adresse dans le formulaire) :

date 1 septembre 2009 18:05
objet Contact
envoyé par free.fr

fabiloute@gmail.com
Date: Tue, 01 Sep 2009 18:05:17
To: fabiloute@gmail.com

Votre question m'est bien parvenue, je vous réponderai dans un délai de 24 heures

et

à fabiloute@gmail.com
date 1 septembre 2009 20:05
objet Une nouvelle question est arrivée

Nom demandeur : fab
Email demandeur : fabiloute@gmail.com
Demande :
Hello!!!

Ne me demande pas pourquoi l'heure est à 20:05 sur un et à 18:05 sur l'autre, alors qu'il est 17h40, je n'en ai aucune idée.

C'est le même code que j'ai mis en local et j'ai toujours la même erreur.
0
le père
 
Je vois que tu as répondu (message10) à 17h41 mais le message ne s'affiche pas chez moi. Peux-tu le re-poster?
Je vais m'absenter mais je reviendrai ce soir
0
le père
 
Ça y est ça s'affiche...
Et effectivement, tu n'as pas tenu compte de ma remarque du message 3

$headers = "From:fabiloute@gmail.com"; 
...
$adresse_moi = "fabiloute@gmail.com";
mail($adresse_client, $apropos, $contenu, $adresse_moi);


Le 4ème paramètre DOIT être un header "From" c'est à dire ta variable $headers, pas la variable $adresse_moi.
0
fab1105 Messages postés 118 Statut Membre 7
 
Alors j'ai changé le code c'est toujours pareil, ça marche sur le site hébergé, mais pas en local où j'ai toujours la même erreur. (c'est peut etre pas encore le bon code)

Voici le code :

$sujet = "Une nouvelle question est arrivée";
$contenu_message = "Nom demandeur : ".$nom."\n" .
"Email demandeur : ".$mail."\n".
"Demande :\n" .$question. "\n";

$headers = "From:fabiloute@gmail.com";
mail($mail, $sujet, $contenu_message, $headers);

$adresse_client = $mail;
$apropos = "Contact";
$contenu = "Votre question m'est bien parvenue, je vous réponderai dans un délai de 24 heures";
$headers = "fabiloute@gmail.com";

mail($adresse_client, $apropos, $contenu, $headers);

Je reçois bien les deux mail sur ma boite quand je teste en ligne mais en local c'est toujours pareil.
Est-ce que tu es sur qu'il ne faut pas que j'installe quelque chose pour tester en local, ça me parait bizarre que le même code fonctionne en ligne mais pas en local alors que j'ai bien modifié le php.ini ?

Merci pour tes réponses.
0
le père
 
Il y avait deux manières, par le php.ini ou avec le header. J'ai préféré te suggérer la version avec le header parce qu'elle marche dans tous les cas de figure (alors que le sendmail_from dans le php.ini est une particularité de win32

Pourquoi n'avais tu pas mis de From dans le header du 2ème mail ?

$headers = "fabiloute@gmail.com";
mail($adresse_client, $apropos, $contenu, $headers); 


Ce qui est bizarre, c'est que ça marche en ligne, car la valeur que tu passes au 4ème paramètre est absolument anormale. Je suppose que le PHP de ton hébergeur est configuré pour fournir une en-tête From par défaut, et que le paramètre que tu fournis est ignoré.
0
fab1105 Messages postés 118 Statut Membre 7
 
Ben en fait je ne savais pas s'il fallait mettre un From ou non, j'ai donc essayé avec et sans, et les deux marchent, donc tu dois avoir raison quand tu dis que le PHP de mon hébergeur est configuré pour fournir un en-tête par défaut .

Maintenant je sais qu'il faut mettre un From.

Quand tu dis que sendmail_from dans le php.ini est une particularité de win32 , cela veut dire que sous linux et lampp , je n'aurai pas eu ce problème qui m'a fait galérer ?
0
le père
 
Pardon, j'ai écrit une bêtise. Le sendmail_from n'est pas propre à la version windows. Mais ce n'est pas lui qui t'a fait galérer, ça marche très bien sans. Il faut mettre un header "From", c'est tout.

Ben en fait je ne savais pas s'il fallait mettre un From ou non C'est écrit en toutes lettres à la description de la fonction mail dans le manuel de référence PHP. Quand on a un problème avec une fonction, la moindre des choses est de lire la page (elle n'est pas très longue) du manuel sur la fonction en question.
0
fab1105 Messages postés 118 Statut Membre 7
 
Mais alors pourquoi rien ne marchait avec ou sans header "From", et lorsque j'ai modifié le php.ini, tout a fonctionné avec ou sans header "From" également puisque je recevais les 2 mails dans les 2 cas de figure ?

Dailleurs j'avais essayé avec un code assez bien écrit trouvé sur le site du zero avec un header "From" et le problème était le même, c'est juste en modifiant le php.ini que le problème a été résolu.

Tous mes codes qui ne marchaient pas ont marché dès la modification du fichier, j'ai testé et retesté.

Voici le code dont je te parle il est bien plus élaboré que mon petit bout de code et il ne marchait pas non plus :
<?php
$mail = 'fabiloute@gmail.com'; // Déclaration de l'adresse de destination
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // O,n filtre les serveurs qui bugs
{
$passage_ligne = "\r\n";
}
else
{
$passage_ligne = "\n";
}
//=====Déclaration des messages au format texte et au format HTML
$message_txt = "Salut à tous, voici un e-mail envoyé par un script PHP.";
$message_html = "<html><head></head><body><b>Salut à tous</b>, voici un e-mail envoyé par un <i>script PHP</i>.</body></html>";
//==========

//=====Création de la boundary
$boundary = "-----=".md5(rand());
//==========

//=====Définition du sujet
$sujet = "Hey mon ami !";
//=========

//=====Création du header de l'e-mail
$header = "From: \"Fab\"<fabiloute@gmail.com>".$passage_ligne;
$header.= "Reply-to: \"Fab\" <fabiloute@gmail.com>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========

//=====Création du message
$message = $passage_ligne.$boundary.$passage_ligne;
//=====Ajout du message au format texte
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//=====Ajout du message au format HTML
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========

//=====Envoi de l'e-mail
mail($mail,$sujet,$message,$header);
//==========
?>

Voilà c'est donc pour ça que je trouve mystérieux le fait que ça ne marchait pas.

Bonne soirée le père et merci.
0
le père
 
Je n'avais pas écrit de bêtise tout à l'heure, sendmail_from est bien propre à windows mais je n'arrivais pas à retrouver où j'avais vu ça :
https://www.php.net/manual/fr/mail.configuration.php

Mais ça n'explique pas du tout pourquoi ça ne marche pas avec header From sans sendmail_from. C'est comme ça que je marche depuis toujours, mon FAI est free aussi... Peut-être qu'il y a quelque chose dans Wamp, mais je ne vois vraiment pas ce que ça peut être.

Bonsoir à toi aussi
0
fab1105 Messages postés 118 Statut Membre 7
 
Si tu n'as pas de réponse à cette question ce n'est pas grave, tu m'as déjà bien aidé et puis l'important c'est que ça fonctionne-:)

Merci et bonne nuit.
0