8741 sujets

Développement web côté serveur, CMS

Pages :
Bonjour,
Désolé, j'ai l'impression de monopoliser le forum avec mes questions! Mais malgré des heures de recherches sur le Net, je ne trouve pas de solution, alors il ne me reste plus qu'à demander ici.

Pour qu'un utilisateur envoie un mail, j'ai utilisé ce code dans le traitement du formulaire de contact Php:
$destinataire='lanorey@hotmail.fr';
			$sujet="commentaire";
		
			mail($destinataire,
				 $sujet,
				 $_POST['message'],
				 $_POST['email']);

Mais je n'arrive pas à utiliser la balise *from* dans les headers.
Je voudrais que sur ma boite de réception s'affiche le nom de l'utilisateur, puis dans le message, son mail.

Voila mon problème.
Merci pour votre aide.
Salut
Tout ce que je peux te dire, c'est ce que j'utilise en général :

$to = "example@example.com";
$subject = "My subject";
$txt = "my txt";
$headers = "From: example@example.com" . "\r\n" .
"CC: example@example.com";

mail($to,$subject,$txt,$headers);

rien de plus classique
Modifié par JENCAL (25 Apr 2016 - 14:23)
Bonjour Jencal, merci pour ta réponse ultra rapide, comme d'habitude.
Mais tu utilises pour les headers:
$headers = "From: example@example.com" . "\r\n" .
"CC: example@example.com"

Moi je voudrais utiliser la variable *$_POST['email']* que j'ai définie dans mon formulaire de contact.
et je ne sais pas comment la placer dans le header pour que ce soit plus confortable à lire.
Par exemple, je voudrais avoir:

Commentaire de Marcel Dupont, Marcel.dupont@hotmail.fr
Bonjour monsieur blablabla


Merci pour tes explications.
Modifié par abeille (25 Apr 2016 - 14:31)
Salut,
Il faut que tu lises la doc, tout est dedans, avec des exemples en plus : http://php.net/manual/fr/function.mail.php

Y'a un truc que je ne comprends pas, dans ta précédente question, tu utilisais des headers avec From:, tu as oublié comment faire ou bien c'était un hasard la dernière fois ?

Voici comment tu peux faire la partie envoi du mail et seulement la partie d'envoi, il faut absolument dans le reste de ton code nettoyer et sécuriser tes valeurs envoyées par l'utilisateur !!!!
$destinataire = 'tonmail@mail.com';
  $sujet = "Commentaire de mon site";
  $headers  = 'MIME-Version: 1.0' . "\r\n";
  $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; //html et gestion des caractères spéciaux
  $headers .= 'From: ' . $nom . '<' . $email . '>'; //ton from, c'est comme ça que ça se gère...

  $message = str_replace("\n", '<br>', $message); //pour avoir des retour à ligne
  $new_message = '<p>' . $message . '</p><p>Envoyé par ' . $nom . ' dont l\'email est : ' . $email . '</p>'; //tu fais se que tu veux du message...
  mail($destinataire, $sujet, $new_message, $headers); //$headers est le 4è argument optionnel de mail()
  header('Location: contact.php');

Mais le plus important, LIS LA DOCUMENTATION !!!
Merci Matthieu, j'ai bien lu la documentation, j'ai recopié et adapté le code que tu m'as mis...Mais les messages n'arrivent pas!
Voila le code:
$nom=$_POST['nom'];
			$email=$_POST['email'];
			$message=$_POST['message'];
			$_SESSION['succes']=1;
			$destinataire='lanorey@hotmail.fr';
			$sujet="commentaire";
			$message = str_replace("\n", '<br>', $message); //retour à ligne
			$new_message = '<p>' . $message . '</p><p>Envoyé par ' . $nom . ' dont l\'email est : ' . $email . '</p>'; 
			$headers  = 'MIME-Version: 1.0' . "\r\n";
			$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";  
			$headers .= 'From: ' . $nom. '<' . $email . '>';  
  
			mail($destinataire,
				 $sujet,
				 $new_message,
				 $headers);
				 header('Location: contact.php');
			}	

Merci pour ton aide!
si tu essaye

     $headers  = 'MIME-Version: 1.0' . "\r\n";
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
     $headers .= 'From: test <test@example.com>' . "\r\n";
mail('lanorey@hotmail.fr', 'commentaire',  'newmessage',  $headers);


en dur... as-tu quelques chose qui se passe ?
JENCAL a écrit :
si tu essaye

     $headers  = 'MIME-Version: 1.0' . "\r\n";
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
     $headers .= 'From: test &lt;test@example.com&gt;' . "\r\n";
mail('lanorey@hotmail.fr', 'commentaire',  'newmessage',  $headers);


en dur... as-tu quelques chose qui se passe ?

LE message n'arrive pas dans la boite mail.
Après l'envoi du formulaire et traitement Php, je ne suis pas redirigé sur la page du formulaire: page blanche.
Et si tu fais cela ?

if(mail('lanorey@hotmail.fr', 'My Subject', 'message')){
echo "le message à été envoyé";
}else{
echo "le message n'a pas été envoyé et donc mail n'est pas installé";
}
JENCAL a écrit :
Et si tu fais cela ?

if(mail('lanorey@hotmail.fr', 'My Subject', 'message')){
echo "le message à été envoyé";
}else{
echo "le message n'a pas été envoyé et donc mail n'est pas installé";
}

Le message arrive bien dans la boite mail.
JE ne suis pas redirigé sur la page formulaire de contact, mais "le message à été envoyé" s'affiche sur une page blanche
JENCAL a écrit :
Alors je vois pas pourquoi en suivant le code Mathieu rien ne ce produit...
Je ne sais pas moi non plus!
Voici le code qu'a mis Matthieu:
$destinataire='lanorey@hotmail.fr';
		$sujet="commentaire";
		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";  
		$headers .= 'From: ' . $nom . '<' . $email . '>'; 
		$message = str_replace("\n", '<br>', $message); 
		$new_message = '<p>' . $message . '</p><p>Envoyé par ' . $nom . ' dont l\'email est : ' . $email . '</p>';  
			
		mail($destinataire, $sujet, $new_message, $headers);
		header('Location: contact.php');

Quand j'envoie un commantaire, je suis redirigé vers la page de formulaire de contact, indiquand que le message a bien été envoyé, mais je ne reçois rien dans la boite mail!
Modifié par abeille (25 Apr 2016 - 17:24)
JENCAL a écrit :
T'a regardé dans les spams ?

Oui, les messages sont arrivés dans les spam!
J'oublie toujours de vérifier ça.

Je fais quoi alors pour que les messages aillent direct dans la boite de réception?
Tu ne peux pas gérer cela. D'où l'existence des spams Smiley smile .. Imagine si tous les spams arrivaient dans ta boite .... aie aie aie..
Modifié par JENCAL (25 Apr 2016 - 17:41)
Allez, encore une fois, montre l'ensemble de ta page de ton formulaire et de traitement... Il n'y a aucune raison que ça ne fonctionne pas, il va falloir que tu sois d'une logique implacable et ne changé qu'une seule chose à chaque test.
Tu n'as aucune erreur affichée ?
L'affichage des erreurs est bien activée ? dans ton php.ini tu as bien une ligne avec ça :
error_reporting(E_ALL);

Pour tester, peux-tu créer un fichier test.php dans lequel il y a UNIQUEMENT cette ligne :
<?php $a = 52/0; //declenche une erreur...

Que se passe-t-il quand tu appelles ce fichier ?

Une fois ta réponse tu iras plus loin :

Tu vas mettre des var_dumps partout pour voir où ça va pas. Tu en mets à chaque action un peu crucial (à l'entrée des conditions, après l'appel d'une fonction, pour voir le contenu d'une variable...), sois logique !

JENCAL t'as fait tester un bout de code :
if(mail('lanorey@hotmail.fr', 'My Subject', 'message')){
echo "le message a été envoyé";
header('Location: contact.php');
}else{
echo "le message n'a pas été envoyé et donc mail n'est pas installé";
}

Ajoute le header dans ta première condition, ça fait quoi ?
JENCAL a écrit :
Tu ne peux pas gérer cela. D'où l'existence des spams Smiley smile .. Imagine si tous les spams arrivaient dans ta boite .... aie aie aie..
Alors je vais rester avec la fonction mail la plus basique:
* affichage de l'adresse de l'utilisateur
* message

Merci pour votre aide Matthieu et Jencal.
J'aurais encore une question sur la sécurité de l'envoi de formulaire, mais d'abord je vais un peu approfondir la question, faille Xss, faille include et cie.
Quand je t'écrivais un roman, je vois que tes mails arrivaient en spams...
Ca n'empêche que j'aimerais quand même savoir si tes erreurs sont correctement affichées, car j'ai souvent l'impression que rien ne s'affiche.
MatthieuR a écrit :
Quand je t'écrivais un roman, je vois que tes mails arrivaient en spams....


Passe au nouvelle Smiley langue
MatthieuR a écrit :
Allez, encore une fois, montre l'ensemble de ta page de ton formulaire et de traitement... Il n'y a aucune raison que ça ne fonctionne pas, il va falloir que tu sois d'une logique implacable et ne changé qu'une seule chose à chaque test.
Tu n'as aucune erreur affichée ?
non, juste que le message n'arrive pas, avec ton code.
MatthieuR a écrit :
L'affichage des erreurs est bien activée ?
Oui, puisque lorsqu'il y a des erreurs dans mon code Php, je reçois un message m'indiquant des trucs barbares et la ligne où est l'erreur.
MatthieuR a écrit :
dans ton php.ini tu as bien une ligne avec ça :
error_reporting(E_ALL);

Pour tester, peux-tu créer un fichier test.php dans lequel il y a UNIQUEMENT cette ligne :
&lt;?php $a = 52/0; //declenche une erreur...

Que se passe-t-il quand tu appelles ce fichier ?
Je n'ai pas de Php ini! ( Smiley rolleyes mais quand je fais ta ligne de code, j'ai une page blanche.

"passe aux nouvelles"...oui, faut que je vérifie tout ce que tu me dis.
La meilleure solution pour avoir des mails qui n'arrivent pas dans les spams du destinataire est de passer par un smtp correctement signé et configuré.
Utilise une librairie comme PHPMailer ou swiftmailer et tu verras comme envoyer des mails est facile Smiley cligne , celles-ci en plus te génèrent des entêtes propres et optimisées.
Ensuite, utiliser une adresse gmail ne va sûrement pas t'aider à passer correctement les barrières anti-spams.
Pages :