Bonjour,

Je vous contact car je suis en train de faire un site en local (avec MAMP) et je ne comprends pas pourquoi les mails ne sont jamais reçus dans ma boite mail :'(

Voici mon code PHP

<?php

$destinataire = 'monemail@quejenevaispasecrire.ici';
$copie = 'non'; 
$message_envoye = "Votre message nous est bien parvenu ! <a href=\"./#contact\">Retour au site</a>";
$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";
$message_erreur_formulaire = "Vous devez d'abord <a href=\"./#contact\">envoyer le formulaire</a>.";
$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

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 = htmlspecialchars(trim($text), ENT_QUOTES);
		if (1 === get_magic_quotes_gpc())
		{
			$text = stripslashes($text);
		}

		$text = nl2br($text);
		return $text;
	};

	/*
	 * Cette fonction sert à vérifier la syntaxe d'un email
	 */
	function IsEmail($email)
	{
		$value = preg_match('/^(?:[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+\.)*[\w\!\#\$\%\&\'\*\+\-\/\=\?\^\`\{\|\}\~]+@(? [decu]? [decu]?:[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!\.)){0,61}[a-zA-Z0-9_-]?\.)+[a-zA-Z0-9_](?:[a-zA-Z0-9_\-](?!$)){0,61}[a-zA-Z0-9_]?)|(?:\[(? [decu]?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\.){3}(?:[01]?\d{1,2}|2[0-4]\d|25[0-5])\]))$/', $email);
		return (($value === 0) || ($value === false)) ? false : true;
	}

	// formulaire envoyé, on récupère tous les champs.
	$nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
	$email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
	$objet   = (isset($_POST['objet']))   ? Rec($_POST['objet'])   : '';
	$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';

	// 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 != '') && ($objet != '') && ($message != ''))
	{
		// les 4 variables sont remplies, on génère puis envoie le mail
		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'From:'.$nom.' <'.$email.'>' . "\r\n" .
				'Reply-To:'.$email. "\r\n" .
				'Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed '."\r\n" .
				'Content-Disposition: inline'. "\r\n" .
				'Content-Transfer-Encoding: 7bit'." \r\n" .
				'X-Mailer:PHP/'.phpversion();

		// envoyer une copie au visiteur ?
		if ($copie == 'oui')
		{
			$cible = $destinataire.';'.$email;
		}
		else
		{
			$cible = $destinataire;
		};

		// Remplacement de certains caractères spéciaux
		$caracteres_speciaux     = array('&#039;', '&#8217;', '&quot;', '<br>', '<br />', '&lt;', '&gt;', '&amp;', '…',   '&rsquo;', '&lsquo;');
		$caracteres_remplacement = array("'",      "'",        '"',      '',    '',       '<',    '>',    '&',     '...', '>>',      '<<'     );

		$objet = html_entity_decode($objet);
		$objet = str_replace($caracteres_speciaux, $caracteres_remplacement, $objet);

		$message = html_entity_decode($message);
		$message = str_replace($caracteres_speciaux, $caracteres_remplacement, $message);

		// Envoi du mail
		$num_emails = 0;
		$tmp = explode(';', $cible);
		foreach($tmp as $email_destinataire)
		{
			if (mail($email_destinataire, $objet, $message, $headers))
				$num_emails++;
		}

		if ((($copie == 'oui') && ($num_emails == 2)) || (($copie == 'non') && ($num_emails == 1)))
		{
			echo '<p>'.$message_envoye.'</p>';
		}
		else
		{
			echo '<p>'.$message_non_envoye.'</p>';
		};
	}
	else
	{
		// une des 3 variables (ou plus) est vide ...
		echo '<p>'.$message_formulaire_invalide.' <a href="./#contact">Retour au formulaire</a></p>'."\n";
	};
}; // fin du if (!isset($_POST['envoi']))
?>


Et voici mon code html :


            <form action="contact.php" method="post" class="contact-form">

              <div class="row form-group">
                <div class="col-md-12 mb-3 mb-md-0">
                  <label class="font-weight-bold" for="nom">Prénom</label>
                  <input type="text" id="nom" name="nom" class="form-control" placeholder="Prénom">
                </div>
              </div>
              <div class="row form-group">
                <div class="col-md-12">
                  <label class="font-weight-bold" for="email">Email</label>
                  <input type="email" id="email" name="email" class="form-control" placeholder="Adresse e-mail">
                </div>
              </div>
              <div class="row form-group">
                <div class="col-md-12">
                  <label class="font-weight-bold" for="objet">Sujet</label>
                  <input type="text" id="objet" name="objet" class="form-control" placeholder="Sujet">
                </div>
              </div>


              <div class="row form-group">
                <div class="col-md-12">
                  <label class="font-weight-bold" for="message">Message</label>
                  <textarea name="message" id="message" cols="30" rows="5" class="form-control"
                    placeholder="Votre message ici"></textarea>
                </div>
              </div>

              <div class="row form-group">
                <div class="col-md-11">
                  <input type="submit" value="Envoyer" name="envoi" class="btn btn-primary py-3 px-4">
                </div>
              </div>


            </form>


Je suis en train de penser que c'est mon MAMP qui divague mais bon, j'ai l'impression que le problème se trouve entre le clavier et la chaise...

Merci pour votre aide
Modifié par Fifouak (31 Oct 2019 - 02:59)
Merci pour ta réponse !

Seul hic, le formulaire doit envoyer le contenu du formulaire sur mon mail @hotmail.fr et @gmail.com
Désolé j’ai oublié de préciser
D'accord.
Du coup je suis chez Bouygues et du coup je vois pas ce que je dois rajouter dans la ligne sendmail_path =/usr/sbin/sendmail -t -i -f votreidentifiant@votreFournisseurInternet.fr
Un message pour ne pas répondre à ta question^^
C'est juste deux petites remarques générales sur ton code...

Pour la vérification d'email, du devrais utiliser:

$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
if($email === false) $email = '';

La fonction marche très bien et est simple d'utilisation Smiley cligne

Ensuite, au niveau des envois de mails en général, je te suggère d'utiliser une librairie telle que PHPMailer, c'est assez facile à prendre en main et ça permet de paramétrer correctement l'envoi de mails (envoi SMTP, signature DKIM, ...) en évitant des problèmes de syntaxe ou autre. Rédiger correctement les headers d'un mail c'est jamais évident!
Ok je vais voir ce que ça donne Smiley cligne Merci

Je ne reçois rien du tout, pourtant ça passe bien dans le paramètre de validation d'envoi...
Parce que si mail() return true, alors le mail part.

Par contre s'il return false, il faut checker pourquoi !

ici =>
$success = mail('example@example.com', 'My Subject', $message);
if (!$success) {
    $errorMessage = error_get_last()['message'];
}
Merci pour ton retour

Voici ce qui est retourné lors de l'envoi du mail :

Votre message nous est bien parvenu !

Et voici ce qu'affiche print_r($_POST):
Array ( Smiley nom => monom Smiley email => monnom@hotmail.fr Smiley objet => probleme d'envoi formulaire Smiley message => toujours aucun mail reçu Smiley envoi => Envoyer )

Toujours pas de mail reçu, j'ai beau changé l'identifiant dans le php.ini par mon adresse mail @hotmail.fr, une autre en @icloud.com, ou celle de mon mac user@macbook-de-user.home.
Possible que ce soit un port bloqué par Bouygues ?

Merci pour vos réponses
En vrai je pense que c'est surtout la config de mon php.ini et/ou mon FAI qui bloque je ne sais pas ahhhhh 3 semaines que je suis sur ce problème j'en peu plus ^^
Hello,
tourne toi vers PhpMailer c'est robuste et ultra simple d'utilisation.

L'utilisation de mail() n'est pas vivement conseillé, car la conception du header est toujours source d'erreurs. D'autant que les header des emails sont très sensibles à tout (espace, saut de ligne,etc) qui peuvent les faire bloquer par le SMTP avant même d'être relayé.

D'expérience comme il y a mille est une raison qu'un email ne parte pas (ex : limite d'emails par ip et par heures), j'ai tendance à faire :
1 : tentative d'envoi avec phpmailer via le smtp du serveur qui héberge l'application Smiley tronconne
2 : si erreur de 1 envoi via une API (genre mailjet) Smiley firing
3 : si erreur de 1 et de 2 tentative en bas niveau avec mail() avec journalisation du mail en base pour garder une trace et pouvoir le renvoyer si vraiment tout craque. Smiley frappe

si tu arrive à 3... faut commencer à se poser des questions sur l'hébergement ! Smiley lol
Merci beaucoup pour ta réponse.
Je pense que je vais passer par ça en local.

Petite question, j'ai pas trouvé comment on fait une fois que le site est en ligne.
J'ai pris un hébergement chez OVH ainsi qu'un nom de domaine, et je vois que le mail n'est toujours pas envoyé.
Et j'avoue que je suis un peu perdu car je ne vois pas comment ni par quel mail il compte l'envoyer...
Je n'ai pas changé le code PHP.
Merci !
Arretez tout les gars ! J'ai trouvé ce qui bug.
Mon code est bon, c'est juste que mail() ne gere tout simplement pas @hotmail.fr, @gmail...etc.
J'ai pris mon hébergement chez OVH, fais mon petit MXPLAN, et là bim ! Avec ma nouvelle adresse mail attaché à mon nom de domaine ça fonctionne !
Voilà.
Merci beaucoup pour vos réponses et vos compléments d'infos.
Des bisous
Meilleure solution
Mail gère tout a fait hotmail et autres adresses e-mail, comme je te l'ai déjà dit, l'adresse où tu envoies n'a aucune incidence. Comme le fait d'avoir créé une adresse e-mail attaché a ton domaine ne change rien a la fonction mail.

Il faut bien comprendre qu'il faut un serveur pour envoyer des mails ce que tu n'as pas avec un logiciel comme mamp car tu es en local.

Sur ton mx plan tu utilises les serveurs d'ovh pour envoyer tes mails, c'est pour cela que ça fonctionne.
C'est bizarre car quand j'indique mon mail @hotmail, ça ne fonctionne pas.
En tout cas ça fonctionne bien comme ça Smiley smile
Merci beaucoup !
Après le monde des e-mails c'est loin d'être simple notamment a cause des abus et il est possible que la communication entre ovh et hotmail soit compliquée. Smiley cligne
Justement, depuis que j’ai pris mon abonnement chez OVH tout va mieux.
C’est en localhost que ça pêche pour moi