Bonjour,

Suite à la perte la semaine précédente du site internet de l'entreprise dans laquelle je travaille, et avant de faire refaire un site correct, nous souhaitons mettre en ligne une page simple "d'urgence" pour ne pas avoir une page blanche.
J'ai donc lu plusieurs tutoriels (ici et sur developpez) et j'ai fait appel à 2 IA (LE CHAT et BLACKBOX) pour faire une structure responsive simple, comportant un header, une bannière, un menu latéral, un contenu en 3 colonnes et un formulaire de contact de 3 zones de texte ("Name", "Email", "Message").
La première IA (LE CHAT) m'a également fourni un script JS pour la vérification des données et un script php pour l'envoi du mail. Il semblerait que dans cette première mouture du PHP, il manquait l'instruction d'envoi (mail).
J'ai donc regarder plusieurs autres forums, les tuto, et passer une petite heure avec notre hébergeur.
J'ai essayé 4 autres scripts et aucun ne fonctionnent. Avec les 2 derniers scripts, j'ai enlevé le javascript de vérification, qui à priori n'est pas nécessaire.

Voici le code html en question :
 <div class="contact" id="CONTACT">
                <h1>Contactez-nous</h1>
                    <form id="contactForm" action="send_email.php" method="post">
                     <label for="name">Nom:</label>
                     <input type="text" id="name" name="name" required>

                      <label for="email">Email:</label>
                      <input type="email" id="email" name="email" required>

                     <label for="message">Message:</label>
                     <textarea id="message" name="message" required></textarea>

                     <button type="submit">Envoyer</button>
                    </form>
                 <div id="responseMessage"></div>

et voici le dernier script PHP :
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Collect and sanitize input data
    $name = htmlspecialchars(trim($_POST['name']));
    $email = htmlspecialchars(trim($_POST['email']));
    $message = htmlspecialchars(trim($_POST['message']));

    // Validate input data
    if (empty($name) || empty($email) || empty($message)) {
        die("Merci de compléter entièrement le formulaire.");
    }

    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        die("L'adresse mail n'est pas valide.");
    }

    // Set the recipient email address
    $to = "chazelle.imp@wanadoo.fr"; // Replace with your email address
    $subject = "Message depuis chazelleimprimeurs.com";
    $body = "Name: $name\nEmail: $email\nMessage:\n$message";
    $headers = "From: $email";

    // Send the email
    if (mail($to, $subject, $body, $headers)) {
        echo "Email envoyé !";
    } else {
        echo "L'email n'a pas été envoyé";
    }
} else {
    echo "Demande invalide";
}
?>


Chacun des scripts PHP vu ou testé étant assez différents, il m'est impossible de comprendre pourquoi cela ne fonctionne pas.
Quelqu'un peut-il m'éclairer ?

Merci.
Bonjour,
avant de se plonger dans le code, il faut savoir que de plus en plus d'hébergeurs n'acceptent plus les scripts de la fonction mail de php. J'en ai fait les frais récemment. Il faut passer par PHPMail ou une autre application.
Aussi, mais je ne crois pas que ce soit le cas ici, les pages en hébergement gratuit "free pages perso" n'acceptent pas les SMTP extérieurs (le php chez eux est de toute façon limite).
Avez-vous essayé PHPMail, on en a parlé dernièrement sur ce forum.
Bonjour,
Tout d'abord merci de votre réponse.
notre hébergeur est IONOS.
Un conseiller m'a affirmé que la fonction n'était pas bloquée. Mais il est vrai que j'ai eu la nette impression d'avoir face à moi quelqu'un d'encore moins compétent que moi.
Non, je n'ai pas essayé PHPMail. J'ai vu ce nom plusieurs fois, mais je privilégiais les solutions qui me paraissaient les plus simples, peut-être à tord.
Est-ce simple à mettre en place ?
Bonjour,
simple à mettre en place, c'est une réponse toujours difficile. Tout dépend de son expérience en php.
N'étant pas un cador en php, j'ai dû demander quelques conseils (ici), mais maintenant, ça fonctionne.
https://github.com/PHPMailer/PHPMailer
Pour l'installer, ensuite, vous demanderez des conseils au fur et à mesure de l'avancement.
Bonjour, le script renvoie sur votre serveur "L'email n'a pas été envoyé".
Vérifier auprès de votre hébergeur si la fonction mail est bien active puisque celle-ci vous retourne false.
Sinon votre hébergeur met à votre disposition une documentation pour PHPMailer
https://www.ionos.fr/digitalguide/email/aspects-techniques/phpmailer/

Édit : En consultant la documentation de votre hébergeur, vous constaterez qu'il n'est pas possible d'envoyer un mail avec une adresse différente que celle de votre hébergement.
https://www.ionos.fr/assistance/hebergement/aucun-envoi-de-mails-avec-une-adresse-dexpediteur-differente/
Suivez les recommandations de votre hébergeur, soit :
a écrit :
assurez-vous dans votre script PHP que l'adresse d'expéditeur "From" inscrite dans $headers appartient au domaine de votre contrat d'hébergement Web sur lequel le script est exécuté.

Modifié par casper2 (11 Apr 2025 - 22:39)
Merci pour ce partage de situation très claire.

Il semble que votre script soit techniquement correct dans sa structure, mais qu’il se heurte à une restriction désormais très fréquente chez les hébergeurs : l’adresse de l’expéditeur (From) ne peut pas être arbitraire, elle doit appartenir au domaine de votre hébergement.

Dans votre script, vous avez :

php
Copier
Modifier
$headers = "From: $email";
Or $email contient l’adresse saisie par l’utilisateur, par exemple toto@gmail.com. Or IONOS (comme d'autres hébergeurs) bloque souvent ce type d'envoi car cela favorise le spoofing (usurpation d'identité email).

Solution simple :
Remplacez la ligne $headers par :

php
Copier
Modifier
$headers = "From: contact@votre-domaine.fr\r\nReply-To: $email";
(en remplaçant bien sûr contact@votre-domaine.fr par une adresse rattachée à votre domaine chez IONOS, comme no-reply@chazelleimprimeurs.com).

Cela règle souvent le problème : l’email est envoyé par une adresse légitime, mais la réponse ira bien vers l’adresse que l’utilisateur a fournie grâce au Reply-To.

Alternative recommandée :
Même si cela semble plus complexe au départ, PHPMailer apporte :

Une meilleure gestion des erreurs

Des entêtes email plus propres

Le support de SMTP avec authentification (souvent exigé par les hébergeurs)

IONOS propose une documentation spécifique ici :
https://www.ionos.fr/digitalguide/email/aspects-techniques/phpmailer/

Et le dépôt officiel PHPMailer se trouve là :
https://github.com/PHPMailer/PHPMailer

Si vous partez sur cette solution, n’hésitez pas à poster vos essais ici, on pourra vous accompagner étape par étape.

Bon courage pour la suite de la remise en ligne,
et bravo pour votre persévérance malgré les scripts récalcitrants ! ????
Bonjour à tous
et merci pour vos réponses très claires.
J'étais en déplacement en début de semaine et je n'ai pas eu le temps de vous répondre.
Je pense donc appliquer la solution la plus simple immédiatement (changement du "from") et ensuite installer PHPMailer pour une solution plus propre.
Je posterai à nouveau quand j'aurai débuté l'installation.

Merci encore à vous trois.

Excellente journée.