Bonjour,

Je rencontre un problème.. ah bon Smiley lol

Je comprends pas pourquoi mon mail s'envoi pas.

En gros je veux envoyer un mail de confirmation à mon utilisateur pour qu'il reçoit les infos qu'il m'a donné.

Voici le code


<?php
$expediteur = 'contact@mondomaine.fr';
$form_action = '';
$copie = "oui";

function Rec($text)
{
	$text = htmlspecialchars(trim($text), ENT_QUOTES);
	if (1 === get_magic_quotes_gpc())
	{
		$text = stripslashes($text);
	}

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

function IsEmail($destinataire)
{
	$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])\]))$/', $destinataire);
	return (($value === 0) || ($value === false)) ? false : true;
}

$login   = (isset($_POST['login_user']))     ? Rec($_POST['login_user'])     : '';
$pass    = (isset($_POST['pass_user']))     ? Rec($_POST['pass_user'])     : '';
$prenom  = (isset($_POST['prenom_user']))     ? Rec($_POST['prenom_user'])     : '';
$nom     = (isset($_POST['nom_user']))     ? Rec($_POST['nom_user'])     : '';
$adresse = (isset($_POST['adresse_user']))     ? Rec($_POST['adresse_user'])     : '';
$societe = (isset($_POST['societe_user']))     ? Rec($_POST['societe_user'])     : '';
$role    = (isset($_POST['role_user']))     ? Rec($_POST['role_user'])     : '';
$tel     = (isset($_POST['tel_user']))     ? Rec($_POST['tel_user'])     : '';
$destinataire   = (isset($_POST['mail_user']))   ? Rec($_POST['mail_user'])   : '';
$robot   = 'Robot - Mon Domaine';
$objet   = 'mondomaine.fr - Création compte';
$message = 'Voici les informations que vous nous avez communiqué : <br>
Login : '.$login.' <br>
Mot de passe : '.$pass.' <br>
Nom : '.$nom.' <br>
Prénom  : '.$prenom.' <br>
Role : '.$role.' <br>
Telephone : '.$tel.' <br>
Votre email : '.$destinataire;


$destinataire = (IsEmail($destinataire)) ? $destinataire : ''; // soit l'email est vide si erroné, soit il vaut l'email entré

if (isset($_POST['submit_crea_user']))
{
	if (($nom != '') && ($destinataire != '') && ($objet != '') && ($message != ''))
	{
		// les 4 variables sont remplies, on génère puis envoie le mail
		$headers   = 'MIME-Version: 1.0' . "\r\n";
		$headers 	.= 'From:'.$robot.' <'.$destinataire.'>' . "\r\n" .
								'Reply-To:'.$expediteur. "\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();
								
		if ($copie == 'oui')
		{
			$cible = $destinataire.';'.$expediteur;
		}
		else
		{
			$cible = $destinataire;
		};

                 $message = str_replace("&#039;","'",$message);
		$message = str_replace("&#8217;","'",$message);
		$message = str_replace("&quot;",'"',$message);
		$message = str_replace('<br>','',$message);
		$message = str_replace('<br />','',$message);
		$message = str_replace("&lt;","<",$message);
		$message = str_replace("&gt;",">",$message);
		$message = str_replace("&amp;","&",$message);

    $envoi_reussi = mail($destinataire, $objet, $message, $headers);
  };

};
?>


En fait j'ai surtout un doute sur le corps du mail.

Ma function mail() renvoi bien True mais le mail n'est jamais reçu, que ce soit sur un Server WEB OVH ou en LOCALHOST

Merci pour votre aide.
Modifié par Fifouak (19 Nov 2019 - 02:29)
Salut,
As-tu vérifié les spams? Essaye de tester ton envoi sur mail-tester
Et puis pour l'envoi de mails, c'est bien de passer par une librairie comme PHPMailer ça t'affranchira de beaucoup de problèmes et c'est beaucoup plus simple à utiliser...
Meilleure solution
Salut Mathieu !

Oui évidemment rien dans mes spams.
On m'a déjà dit de passer par cette librairie mais je refuse de ne pas comprendre pourquoi la fonction mail() est si m***ique à prendre en main.
Surtout qu'elle fonctionne pour moi dans un autre cas.
Pour toi mon code est bon ?
Fifouak a écrit :
Pour toi mon code est bon ?

Sincèrement, aucune idée... Comme tu le dis la fonction mail() est ****ique, une petite erreur dans les headers et rien ne fonctionne. Au début je m'acharnais comme toi à vouloir faire fonctionner mes fonctions mail (sans succès, les messages partaient mais arrivaient en spam). PHPMailer ça change la vie!
Bon bah niquel avec Php Mailer, ça m'envoi juste le mail dans les indésirables mais bon ça doit être propre à mon domaine.
Merci mathieu, plus jamais de ma vie je n'utiliserai la fonction mail().
Sujet clos, mais j'utilise mail() et ça fonctionne... Je reçois bien mes mails, voici ma page envoi.php qui contrôle un Re-Captcha avec retour au formulaire en cas d'échec :
(Si ça peut être utile à quelqu'un...)



 <?php
session_start();
$_SESSION['nom']       = htmlspecialchars($_POST['nom']);
$_SESSION['prenom']    = htmlspecialchars($_POST['prenom']);
$_SESSION['email']     = htmlspecialchars($_POST['email']);
$_SESSION['telephone'] = htmlspecialchars($_POST['telephone']);
$_SESSION['text']      = htmlspecialchars($_POST['text']);
// Ma clé privée
$secret                = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// Paramètre renvoyé par le recaptcha
$response              = $_POST['g-recaptcha-response'];
// On récupère l'IP de l'utilisateur
$remoteip              = $_SERVER['REMOTE_ADDR'];

$api_url = "https://www.google.com/recaptcha/api/siteverify?secret=" . $secret . "&response=" . $response . "&remoteip=" . $remoteip;

$decode = json_decode(file_get_contents($api_url), true);

if ($decode['success'] == true) {
    // LE CAPTCHA EST BON => C'est un humain
    $nom          = $_SESSION['nom'];
    $prenom       = $_SESSION['prenom'];
    $email        = $_SESSION['email'];
    $telephone    = wordwrap($_SESSION['telephone'], 2, ' ', true);
    $text         = $_SESSION['text'];
    //$envoi        = "Votre message a bien été envoyé, nous vous répondrons dans les meilleurs délais.";
    $retour       = "index.php";
    $destinataire = "contact@monsite.fr";
    $sujet        = "Formulaire de contact site Internet";
    $contenu      = "\nNom : $nom \nPrenom : $prenom \nTéléphone : $telephone \nE-mail : $email \nMessage : $text";
    $entete       = "From: $nom \n Reply-To: $email";
    mail($destinataire, $sujet, $contenu, $entete);
    $h1     = "Envoi du message !";
    $ligne1 = "Votre message a bien été envoyé, nous vous répondrons dans les meilleurs délais.";
    $ligne2 = "Vous allez être redirigé vers l'accueil, veuillez patienter...";    
    header('Refresh: 5; URL= index.php');
    session_destroy();
} else {
    // C'est un robot ou le code de vérification est incorrect
    $h1     = "Erreur !";
    $ligne1 = "Désolé, votre code de vérification n'est pas correct...";
    $ligne2 = "Vous allez être redirigé vers la page précédente, veuillez patienter...";    
?>
       <script type="text/javascript">
            window.setTimeout('history.back();', 4000);
        </script><?php
}
?>
<!DOCTYPE html>
<html lang="fr">

<head>
...etc...

Fifouak a écrit :
Bon bah niquel avec Php Mailer, ça m'envoi juste le mail dans les indésirables mais bon ça doit être propre à mon domaine.

Avec mail-tester tu pourras voir pourquoi ton mail arrive dans les spams et le corriger (PHPMailer te permet de mettre une signature DKIM par exemple)
PHPMailer utilise logiquement mail() par défaut, lui aussi.

En effet cette fonction pose pleins de soucis principalement parce que c'est un simple tuyau vers ce qui envoie les mails sur le serveur et qu'il est concrètement impossible de gérer quelconque erreur avec cette fonction (du moins j'ai jamais réussi personnellement Smiley smile ).