IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Fonction mail() ne marche plus


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut Fonction mail() ne marche plus
    Bonjour à tous,

    cette semaine j'ai fait un formulaire pour que les internautes qui passent sur le site puissent m'envoyer un message. Cela fonctionnait bien.

    Je n'ai rien changé depuis sur cette page, et aujourd'hui, ça ne marche plus ...

    j'ai passé l'après midi à trrouver d'où cela peut venir. Mais rien ...

    Pour faire un test, j'ai alors écris la page minimaliste suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
     
    $alert = '';
     
    if (isset($_POST['envoye']))
    {
    	$to = 'mon_mail@orange.fr';
        $subject = 'Test Mail';
        $msg = 'Message du mail ...';
     
        if (mail($to, $subject, $msg))
            {
            $alert = 'e-mail envoyé';
            }
        else
            {
            $alert = 'erreur';
            };
    	unset($_POST);
    }
    ?>
     
    <!DOCTYPE html>
    <html lang="fr" />
        <head>
            <title>Mon titre</title>
            <meta charset="utf-8" />
    	<meta name="description" content="Ma description"/>
    	</head>
     
    	<body>
    		<form method="post">
     
    			<input type="submit" name="envoye" value="Envoyer" />
     
    			<?php
    				echo '<p>'.$alert.'</p>';
    			?>
    		</form>
    	</body>
    </html>
    Il n'y a donc presque rien :
    Quand on clic sur le bouton "Envoyer", un e-mail est envoyé et le message "e-mail envoyé apparait" à l'écran si tout s'est bien passé.

    J'ai bien le message "e-mail envoyé", mais je ne reçois jamais l'e-mail !

    J'ai essayé avec plusieurs adresses, il n'y a rien à faire. Les messages n'arrivent pas. Ils ne sont pas non plus dans les indésirables.

    Quelqu'un aurai-t-il une idée d'où cela peut venir ?

    Merci d'avance.

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    J'ajoute que je suis allé voir le fichier php.ini chez mon hébergeur (Amen).

    j'y ai trouvé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [mail function]
    ; For Win32 only.
    ;SMTP = localhost
    ;smtp_port = 25
     
    ; For Win32 only.
    ;sendmail_from = me@example.com
     
    ; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
    sendmail_path = /usr/sbin/sendmail -t -i
     
    ; Force the addition of the specified parameters to be passed as extra parameters
    ; to the sendmail binary. These parameters will always replace the value of
    ; the 5th parameter to mail(), even in safe mode.
    ;mail.force_extra_parameters =
    Le version php est 5.2.5
    Il est indiqué chez mon hébergeur :


    Tout me semble bon...
    Je n'ai jamais touché à ça.

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton email peut etre considéré comme un spam par le serveur de mail et être non traité.

    Utilise PHPMailer en mode SMTP plutôt que directement la fonction mail(), tu auras moins de chances que ton mail soit refusé et il sera de toute facon plus facile de debuguer.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Merci pour ta réponse.

    J'ai fait un essai (exemple ci dessus) avec du code qui peut passer pour du spam en effet.

    Voilà le code complet qui ne marche pas, et qui ne sera pas pris pour un spam :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    <?php
     
    /* Définir l'adresse e-mail destination */
    $to = 'me@orange.fr';
     
    /* Si le formulaire est envoyé alors on fait les traitements */
    if (isset($_POST['envoye']))
    {
        /* Récupération des valeurs des champs du formulaire */
        if (get_magic_quotes_gpc())
        {
          $civilite	= stripslashes(trim($_POST['civilite']));
          $nom	     	= stripslashes(trim($_POST['nom']));
          $expediteur	= stripslashes(trim($_POST['email']));
          $message	= stripslashes(trim($_POST['message']));
        }
        else
        {
          $civilite	= trim($_POST['civilite']);
          $nom= trim($_POST['nom']);
          $expediteur	= trim($_POST['email']);
          $message	= trim($_POST['message']);
        }
     
        /* Expression régulière permettant de vérifier si le 
        * format d'une adresse e-mail est correct */
        $regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';
     
        /* Expression régulière permettant de vérifier qu'aucun 
        * en-tête n'est inséré dans nos champs */
        $regex_head = '/[\n\r]/';
     
        /* Si le formulaire n'est pas posté de notre site on renvoie 
        * vers la page d'accueil */
        if($_SERVER['HTTP_REFERER'] != ('http://www.veista.fr/contact.php' or 'http://veista.fr/contact.php'))
        {
      /*    header('Location: http://www.veista.fr/');  */
              $alert = 'Opération annulée. L\'e-mail n\'a pas été envoyé.';
      }
        /* On vérifie que tous les champs sont remplis */
        elseif (empty($civilite) 
               || empty($nom) 
               || empty($expediteur) 
               || empty($message))
        {
          $alert = 'Veuillez renseigner tous les champs marqués d\'une *';
        }
        /* On vérifie que le format de l'e-mail est correct */
        elseif (!preg_match($regex_mail, $expediteur))
        {
          $alert = 'L\'adresse "'.$expediteur.'" n\'est pas valide';
        }
        /* On vérifie qu'il n'y a aucun header dans les champs */
        elseif (preg_match($regex_head, $expediteur) 
                || preg_match($regex_head, $nom) 
                || preg_match($regex_head, $sujet))
        {
            $alert = 'En-têtes interdites dans les champs du formulaire';
        }
        else
       {
        /*  on construit le message et on envoie l'e-mail */
    		/* Sujet du message */
    		$sujet = 'Message de veista.fr';
     
     		//=====Création de la boundary
    		$boundary = "-----=".md5(rand());
    		//==========
     
    		$passage_ligne = "\r\n";
     
    		//=====Création du header de l'e-mail.
    		$header = 'From: '.$nom.' <'.$expediteur.'>'.$passage_ligne;
    		$header.= "Reply-to: \"".$nom."\" <".$expediteur.">".$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_txt  = 'Bonjour,'.$passage_ligne.$passage_ligne;
            $message_txt .= 'Ce mail a été envoyé depuis veista.fr par '.$civilite.' '.$nom.$passage_ligne.$passage_ligne;
            $message_txt .= 'Voici le message qui vous est adressé :'.$passage_ligne.$passage_ligne;
            $message_txt .= '***************************'.$passage_ligne;
            $message_txt .= $message.$passage_ligne;
            $message_txt .= '***************************'.$passage_ligne;
     
    		$msg = $passage_ligne.$boundary.$passage_ligne;
    		//=====Ajout du message au format texte.
    		$msg.= "Content-Type: text/plain; charset=\"utf-8\"".$passage_ligne;
    		$msg.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
    		$msg.= $passage_ligne.$message_txt.$passage_ligne;
    		$msg.= $passage_ligne."--".$boundary."--".$passage_ligne;
    		//==========
     
            /* Envoi de l'e-mail */
            if (mail($to, $sujet, $msg, $header))
            {
                $alert = 'Message envoyé avec succès';
     
                /* On détruit la variable $_POST */
                unset($_POST);
            }
            else
            {
                $alert = 'Erreur d\'envoi de l\'e-mail';
            }
        }
    }
    Je vais voir ce que ça donne avec PHPMailer.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Alors voilà,

    j'ai installé PHPMailer sur mon serveur, et j'ai placé ce code php à la place de l'ancien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    require "phpmailer/phpmailer/_lib/class.phpmailer.php"; 
    $mail = new PHPmailer(); 
    $mail->IsSMTP(); 
    $mail->Host='smtp.orange.fr'; 
    $mail->From='lui@orange.fr'; 
    $mail->AddAddress('moi@orange.fr'); 
    $mail->AddReplyTo('lui@orange.fr');      
    $mail->Subject='Exemple trouvé sur DVP'; 
    $mail->Body='Voici un exemple d\'e-mail au format Texte'; 
    if(!$mail->Send()){ //Teste le return code de la fonction 
        $alert=$mail->ErrorInfo;
    } 
    else{      
        $alert='Mail envoyé avec succès'; 
    } 
    $mail->SmtpClose(); 
    unset($mail);
    Il m'affiche l'erreur "SMTP Error: Could not connect to SMTP host."

    Comment faire pour qu'il trouve mon hote SMTP ?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est le SMTP de ton hebergeur qu'il faut indiquer, pas celui d'Orange.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 41
    Points : 22
    Points
    22
    Par défaut
    Merci Sabotage pour ton aide.

    Mais je viens juste de trouver la raison, après presque 2 jours de recherches intensives.

    J'ai alors envoyé un message avec la fonction mail de php sur une adresse gmail, et miracle, ça marche du premier coup !!!

    Je n'ai plus qu'à faire un transfert automatique de gmail vers orange. (parceque je ne peux pas me passer de cette adresse mail)

    Ils exagèrent vraiment chez orange ! L'e-mail n'est même pas mis en spam, il est éjecté sans aucune information nulle part. C'est vraiment inadmissible !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PHP 4] fonction mail ne fonctionne plus
    Par goofyto8 dans le forum Langage
    Réponses: 0
    Dernier message: 25/04/2010, 14h41
  2. ispconfig, fonction mail ne marche pas
    Par morgan47 dans le forum Hébergement
    Réponses: 0
    Dernier message: 21/10/2009, 23h59
  3. La fonction mail() ne fontionne plus
    Par Fikou-Sama dans le forum Langage
    Réponses: 3
    Dernier message: 03/09/2009, 21h32
  4. Réponses: 1
    Dernier message: 27/09/2007, 22h50
  5. [Forum] Fonction mail() ne marche pas chez OVH ?
    Par quanou dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 8
    Dernier message: 08/11/2005, 13h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo