Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonction mail Bad sender address syntax

    17 mai 2021 à 9:03:46

    Bonjour,

    J'ai une fonction mail qui ne fonctionne pas sur ma page alors que si je mets mon script sur une page à part juste du php, cela fonctionne bien voici mon code php:

    <?php
    
    require_once '../controller/dbConfig.php';
    
        $dateActuelle = valid_donnees($_POST['dateActuelle']);
        $nom = valid_donnees($_POST['nom']);
        $email = valid_donnees($_POST['email']);
        $telephone = valid_donnees($_POST['telephone']);
        $adresse = valid_donnees($_POST['adresse']);
        $ville = valid_donnees($_POST['ville']);
        $cp = valid_donnees($_POST['cp']);
        $dateRdv = valid_donnees($_POST['dateRdv']);
                if (isset($_POST['radio'])) {
                    $ddeConcerne = $_POST['radio'];
                } else {
                    $ddeConcerne = '';
                }
                if (isset($_POST['checkbox'])) {
                    $fonctionnalites = $_POST['checkbox'];
                } else {
                    $fonctionnalites = '';
                }
        $message = valid_donnees($_POST['message']);
    
        function valid_donnees($donnees)
        {
            $donnees = trim($donnees);
            // $donnees = json_encode($donnees);
            $donnees = stripslashes($donnees);
            $donnees = htmlspecialchars($donnees);
            $donnees = htmlspecialchars($donnees);
            $donnees = str_replace(["\r\n", "\n"], '<br>', $donnees);
            // $donnees = utf8_decode($donnees);
    
            return $donnees;
        }
    
    // extract($_POST);
    
    $valid = 'true';
    $erreurs = '';
    
    if (!empty($nom)
    && strlen($nom) <= 100
    && preg_match('/^[*]+$/', $nom)) {
        $valid = false;
        $erreurs .= 'Le nom doit comporter au maximum 100 caractères'.PHP_EOL;
    }
    if (!empty($email)
    && filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $valid = false;
        $erreurs .= "L\'E-mail n\'est pas valide".PHP_EOL;
    }
    if (!empty($telephone)
    && strlen($telephone) <= 10
    && preg_match('/^0[6-7]{1}\d{8}$/', $telephone)) {
        $valid = false;
        $erreurs .= 'Le téléphone doit comporter 10 caractères'.PHP_EOL;
    }
    if (!empty($adresse)
    && strlen($adresse) <= 150
    && preg_match('/^[*]+$/', $adresse)) {
        $valid = false;
        $erreurs .= 'L\'adresse doit comporter au maximum 150 caractères'.PHP_EOL;
    }
    if (!empty($ville)
    && strlen($ville) <= 100
    && preg_match('/^[*]+$/', $ville)) {
        $valid = false;
        $erreurs .= 'La ville doit comporter au maximum 100 caractères'.PHP_EOL;
    }
    if (!empty($cp)
    && strlen($cp) <= 5
    && preg_match('/^[0-9]{5}$/', $cp)) {
        $valid = false;
        $erreurs .= 'Le code postal doit comporter 5 caractères'.PHP_EOL;
    }
    if (!empty($message)
    && strlen($message) <= 3
    && preg_match('/^[*]+$/', $message)) {
        $valid = false;
        $erreurs .= 'Vous devez saisir votre message'.PHP_EOL;
    }
    if ($dateRdv == '') {
        echo 'Le participant ne souhaite pas de rendez-vous';
    }
    if (isset($_POST['radio'])) {
        $ddeConcerne = $_POST['radio'];
    } else {
        $ddeConcerne = '';
    }
    if (isset($_POST['checkbox'])) {
        $fonctionnalites = implode(' | ', $_POST['checkbox']);
    } else {
        $fonctionnalites = '';
    }
    
        // RECUP CHEMIN FICHIER
        $sql = 'SELECT * FROM documents';
        $result = $conn->query($sql);
        if ($result->num_rows > 0) {
            while ($row = $result->fetch_assoc()) {
                $document_id = $conn->insert_id;
            }
        }
    
        if ($valid) {
            $fichiersJoints = '<a href="'.$row['file_path'].'">'.$row['file_path'].'</a>';
    
            // $expediteur = $row['email_admin'];
            // $destinataire = $expediteur;
            // $reponse = $expediteur;
    
            $accepte = '';
            if ($accepte == 'on') {
                $accepte = '';
            }
    
            $objet = 'Demande d\'informations sur le site '.$siteTitle.'';
            $codehtml =
            '<html>
            <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            </head>
            <body>
            <h1>'.$siteTitle.'</h1>
            <P>Courrier demande d\'informations sur le site '.$siteTitle.'</P>
            <strong>Date de la demande:</strong> '.$dateActuelle.'<br>
            <strong>Nom complet:</strong> '.$nom.'<br>
            <strong>E-mail: </strong>'.$email.'<br>
            <strong>Téléphone:</strong> '.$telephone.'<br>
            <strong>Adresse: </strong>'.$adresse.'<br>
            <strong>Ville:</strong> '.$ville.'<br>
            <strong>Code postal:</strong> '.$cp.'<br>
            <strong>Votre demande concerne:</strong> '.$ddeConcerne.'<br>
            <strong>Fonctionnalités:</strong> '.$fonctionnalites.'<br>
            <strong>Message:</strong><br>'.$message.'<br>
            <strong>Date de rendez-vous souhaitée:</strong>'.$dateRdv.'<br><hr>
            <strong>Fichiers joints:</strong>'.$fichiersJoints.'<br><hr>
            Merci pour votre confiance, nous allons vous répondre dans les meilleurs délais, à bientôt.
            </body></html>';
            $destinataire = $email;
            $headers = 'From:'.$siteTitle."\r\n";
            $headers .= 'Bcc:'.$row['email_admin']."\r\n";
            // $headers .= 'MIME-Version: 1.0'."\r\n";
            $headers .= "X-Priority : 1\n";
            $headers .= 'Content-Transfer-Encoding: 8bit';
            if (mail($destinataire, $objet, $codehtml, $headers)) {
                echo 'Formulaire envoyé !';
            } else {
                echo 'Il y a des erreurs dans le formulaire';
            }
        }
    // print_r($_POST);
    

    L'erreur est la suivante:

    Warning: mail(): SMTP server response: 501 Error: Bad sender address syntax 

    Même en saisissant une adresse mail à la place de destinataire, cela me renvoie la même erreur et malgré tout, le script fonctionne bien sur une page à part je reçois bien mon mail au format html dans maildev.

    A mon avis, c'est peut-être une erreur simple que je ne vois pas mais bon...

    Je vous remercie de votre aide


    -
    Edité par baraton 17 mai 2021 à 18:16:19

    • Partager sur Facebook
    • Partager sur Twitter
      17 mai 2021 à 9:26:28

      Salut

      Je pense que tu ne peux pas simplement mettre un texte qui ne soit pas une adresse mail pour les en-têtes From:, Cc: et Bcc:.

      Les entêtes ont généralement ce format : Un-Texte-Kebab-Case-Avec-Majuscule-En-Debut-De-Chaque-Mot: la valeur\r\n, donc pas d'espace avant le deux-points :, mais au moins une espace après, et la fin de ligne systèmatiquement avec les deux caractères (ça c'est principalement pour les vieux clients mail, ça a un peu moins d'importance aujourd'hui). Dans ta concaténation, à moins que tu n'ajoutes l'espace dans $siteTitle et que la donnée en base pour l'adresse de l'administrateur commence par une espace, ça risque de ne pas le faire. Pour la priorité, tu as oublié le \r.

      • Partager sur Facebook
      • Partager sur Twitter
        17 mai 2021 à 11:51:39 - Message modéré pour le motif suivant : La demande de l'équipe de modération a été honorée


        Pas d'aide concernant le code par MP, le forum est là pour ça :)

          17 mai 2021 à 12:03:24

          Il y a tout de même pas grand chose de correct :

          • les conditions des validations
          • le double htmlspecialchars (+ stripslashes inutile)
          • le SELECT * FROM documents qui parcourt toute la table avec l'usage de insert_id dans une boucle, mais pas après une requête INSERT et $document_id n'est pas réutilisé non plus

          Au passage, mail accepte maintenant un tableau associatif (nom de l'entête => valeur) pour se faciliter la tâche.

          -
          Edité par julp 17 mai 2021 à 12:04:53

          • Partager sur Facebook
          • Partager sur Twitter
            17 mai 2021 à 18:23:24


            Merci mais pour la boucle, je ne peux pas tester dans la mesure ou cela ne marche pas encore et pour les entêtes, je regarderai demain. Le htmlspecialchars en double, je n'avais pas vu. Pour le tableau associatif, je ne savais pas.

            Je regarderais cela demain matin merci mais je me demande pourquoi cela fonctionne sur une page à part

            -
            Edité par baraton 17 mai 2021 à 18:25:35

            • Partager sur Facebook
            • Partager sur Twitter

            fonction mail Bad sender address syntax

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown