Mail php ne fonctionne pas...

Résolu
Bonjour,

J'ai un script php qui envoi les informations saisies par mail... le script s'éxécute bien, mais je ne reçois rien.

Pourquoi ? Merci...!

<?php
// Couleur du texte des champs si erreur saisie utilisateur
$color_font_warn="#FF0000";
// Couleur de fond des champs si erreur saisie utilisateur
$color_form_warn="#FFCC66";
// Ne rien modifier ci-dessous si vous n'êtes pas certain de ce que vous faites !
if(isset($_POST['submit'])){
	$erreur="";
	// Nettoyage des entrées
	while(list($var,$val)=each($_POST)){
	if(!is_array($val)){
		$$var=strip_tags($val);
	}else{
		while(list($arvar,$arval)=each($val)){
				$$var[$arvar]=strip_tags($arval);
			}
		}
	}
	// Formatage des entrées
	$f_1=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_1)));
	$f_2=trim(ucwords(eregi_replace("[^a-zA-Z0-9éèàäö\ -]", "", $f_2)));
	$f_3=strip_tags(trim($f_3));
	// Verification des champs
	if(strlen($f_1)<2){
		$erreur.="<li><span class='txterror'>Le champ « Nom » est vide ou incomplet.</span>";
		$errf_1=1;
	}
	if(strlen($f_2)<2){
		$erreur.="<li><span class='txterror'>Le champ « Prénom » est vide ou incomplet.</span>";
		$errf_2=1;
	}
	if(strlen($f_3)<2){
		$erreur.="<li><span class='txterror'>Le champ « Adresse e-mail valide » est vide ou incomplet.</span>";
		$errf_3=1;
	}else{
		if(!ereg('^[-!#$%&\'*+\./0-9=?A-Z^_'a-z{|}~]+'.
		'@'.
		'[-!#$%&\'*+\/0-9=?A-Z^_'a-z{|}~]+\.'.
		'[-!#$%&\'*+\./0-9=?A-Z^_'a-z{|}~]+$',
		$f_3)){
			$erreur.="<li><span class='txterror'>La syntaxe de votre adresse e-mail n'est pas correcte.</span>";
			$errf_3=1;
		}
	}
	if($erreur==""){
		// Création du message
		$titre="Nouveau membre !";
		$tete="From:".$f_3."\n";
		$corps.="Nom : ".$f_1."\n";
		$corps.="Prénom : ".$f_2."\n";
		$corps.="Adresse e-mail valide : ".$f_3."\n";
		if(mail("inscriptions@toprougemedias.fr", $titre, stripslashes($corps), $tete)){
			$ok_mail="true";
		}else{
			$erreur.="<li><span class='txterror'>Une erreur est survenue lors de l'envoi du message, veuillez refaire une tentative.</span>";
		}
	}
}
?>

13 réponses

  1. Si tu testes en local ou sur un dédié, tu dois installer un serveur SMTP.
    Et si tu es en mutualisé, c'est que ton hébergement n'autorise pas l'utilisation de mail()
    1. En fait, ce script fonctionnait bien quand j'utilisais le webmail de mon hébergeur web.

      Hors maintenant c'est Gmail qui est devenu le webmail de l'adresse qui reçoit le mail.
      ...et il n'y a rien dans les spams...
      1. Essaye en précisant les entêtes, comme ceci :
        <?php
             $to      = 'personne@example.com';
             $subject = 'le sujet';
             $message = 'Bonjour !';
             $headers = 'From: webmaster@example.com' . "\r\n" .
             'Reply-To: webmaster@example.com' . "\r\n" .
             'X-Mailer: PHP/' . phpversion();
        
             mail($to, $subject, $message, $headers);
         ?>
        (exemple prit sur la doc. officielle)
        1. Merci,

          J'ai du mal à voir comment modifier mon script (étant donné qu'il est en partie généré,...)

          Pourrais-tu effectuer les modifs dessus ?

          Merci beaucoup :)
          1. Je te remercie infiniment.

            Je teste ça tout de suite et te tiens au courant.
            1. Bon, j'ai l'erreur suivante :

              Parse error: syntax error, unexpected T_STRING in /home/toprouge/public_html/register.php on line 40

              Qu'est-ce qu'il ne lui plait pas ?
              1. Essaye comme ça : http://paste.pocoo.org/show/208611/
                Dans ta regex d'origine, il y a des apostrophes non échappés.
                1. Ok, je viens de retester.

                  Voici à nouveau l'erreur :

                  Parse error: syntax error, unexpected T_IF in /home/toprouge/public_html/register.php on line 60
                  1. Supprimes la ligne 56, j'ai oublié de la retirer en mettant ajouter des données dans $tete (le "From" étant déjà indiqué, j'avais mis cette ligne de côté).
                    1. Bon ben écoute, cette fois je n'ai pas d'erreurs, mail le message n'arrive pas.

                      J'ai changé l'adresse d'envoi en en mettant une autre à moi, sur SFR et ça fonctionne.

                      Gmail semble bloquer l'adresse qu'il gère lui-même ! c'est bizare.

                      Est-ce que gmail est plus rigoureux que les autres webmail dans la lecture des entêtes des messages ?
                      1. Est-ce que gmail est plus rigoureux que les autres webmail dans la lecture des entêtes des messages ?
                        Je t'ai proposé d'ajouter des entêtes (le X-Mailer) car ça peut parfois régler le problème.
                      2. Oui, j'ai bien utilisé ta version de mon script modifiée, mais ce la ne change rien...
                    2. as tu testé la fonction mail() pour savoir si elle marchait tout simplement une page avec juste:

                      <?php

                      mail('monemail@email.fr','sujet test' , 'ceci est un test', 'From: webmaster@example.com');

                      ?>

                      Quel est le contenu du mail? Si c'est du html ou autre lanage de balisage il faut indiquer le TYPE MIME(il n'y a pas non plus de solutions miracles, certaines boites mails bloquebnt systématiquement du contenu venant de tel ou tel expéditeur...)

                      @https://www.php.net/manual/fr/function.mail.php
                      // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
                      $headers = 'MIME-Version: 1.0' . "\r\n";
                      $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
                      1. Je cite Woody69 :
                        « J'ai changé l'adresse d'envoi en en mettant une autre à moi, sur SFR et ça fonctionne. »
                        Donc je ne vois pas ce que tu cherches à vérifier.
                      2. Je ne cherche pas à vérifier quelque chose, je constate juste que lorsque le mail est envoyée à une adresse gmail (ou gérée par gmail), le mail n'arrive pas, ce qui est embêtant !
                      3. Comme je le disais plus haut, le script fonctionne très bien avec n'importe quelle adresse email sauf celles qui dépendent de gmail !.

                        J'ai vu que d'autres utilisateurs avaient déjà rencontré ce type de problème. Apparemment, il faut que la structure du message et en particulier celle des headers soit bien rigoureuse...
                    3. Essaye avec ça comme entêtes :
                      $tete= 'From:'.$f_3."\r\n".
                        'Reply-To: '.$f_3."\r\n".
                        'X-Mailer: PHP/'.phpversion()."\r\n".
                        'MIME-Version: 1.0'."\r\n".
                        'Content-type: text/plain; charset=iso-8859-1'."\r\n".
                        'Content-Transfer-Encoding: 8bit'."\r\n".
                        'X-Priority: 1'."\r\n".
                        'X-MSMail-Priority: High'."\r\n".
                        'X-originating-IP: '.$_SERVER['REMOTE_ADDR']."\r\n";
                      À la 5ème ligne, si tu n'es pas en iso-8859-1, mets ton encodage (utf-8, ...).