Chrome refuse l'envoi de mail
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention -
Depuis de années, sur mon site Internet la page contact fonctionne parfaitement :
l'utilisateur remplit 3 ou 4 champs classiques, valide un reCAPTCHA v2 puis le mail
atterrit dans mon Gmail... Ça c'était avant !
Depuis quelques jours des utilisateurs se sont plaint que nous ne répondions pas à leur
mail envoyés depuis le site alors que nous en recevions encore qq uns par ce biais...
Après quelques tests, j'ai constaté qu'avec Firefox, il n'y avait aucun problème, les mails
arrivaient bien par contre avec Chrome depuis mon Linux ou depuis mon smartphone
Android, j'étais systématiquement dirigé vers un message d'erreur que j'avais écris il
y a plusieurs année pour avertir l'utilisateur que son mail n'avait pas été traité !
J'ai essayé aujourd'hui reCAPTCHA v3 mais j'ai le même problème...
J'ai l'impression que mon problème vient de traitement de l'entête par CHROME,
car quand je vire $entete du traitement de la condition, le problème disparaît !
Voici mon code :
if(check_token($_POST['g-recaptcha-response'],CLESECRETE)){ // LE CAPTCHA EST BON => C'est un humain
$destinataire = "contact@tests.fr";
$sujet = "Formulaire de contact site Internet";
$contenu = "\nNom : $nom \nPrenom : $prenom \nTéléphone : $telephone \nE-mail : $email \nMessage : $text";
$entete= 'MIME-Version: 1.0' . "\r\n";
$entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
'Reply-To:'.$email. "\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(mail($destinataire, $sujet, $contenu, $entete)){
$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...";
$h1 = "Envoi du message !";
}else{
$ligne1 = "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ NOUS N'AVONS PAS ÉTÉ EN MESURE DE
RECEVOIR VOTRE MESSAGE." . '<br>' . "NOUS SOMMES DÉSOLÉS POUR CE DÉSAGRÉMENT";
$ligne2 = "MERCI D'UTILISER VOTRE LOGICIEL DE MESSAGERIE HABITUEL ET CETTE ADRESSE :" . '<br>' .
'<b style="color:blue;"><a href="mailto:contact@tests.fr">contact@tests.fr</a></b><br>';
$h1 = "ERREUR";
}
header('Refresh: 5; URL= index.php');
session_destroy();
}
Merci d'avance pour votre aide !
Configuration: Linux / Chrome 102.0.0.0
- Mrelayeu.kundenserver.de
- Chrome - Télécharger - Navigateurs
- Programmer envoi mail gmail - Guide
- Accès refusé - Guide
- Mise a jour chrome - Accueil - Applications & Logiciels
- Rouvrir onglet fermé chrome - Guide
19 réponses
Un formulaire de contact affiche des échecs d'envoi sur Chrome (Linux/Android) alors que Firefox les livre, et le problème semble lié à l'entête du mail généré par PHP.
Des tests montrent que l'envoi devient fiable lorsque l'en-tête From est statique (contact@domaine.fr) et que le champ Reply-To porte l'adresse de l'utilisateur, évitant les From dynamiques bloquées par certains clients.
Autres échanges recommandent de limiter les en-têtes personnalisés et d'utiliser MIME-Version: 1.0, Content-Type: text/plain; charset=utf-8, afin de préserver la compatibilité SMTP et l'affichage dans les boîtes de réception.
En parallèle, la vérification du reCAPTCHA et le choix de l'expéditeur restent nécessaires, et certains tests suggèrent de loguer les en-têtes échoués pour diagnostiquer les écarts entre Chrome et d'autres navigateurs.
Le PHP s'exécutant côté serveur ... il y a peu de chances que le souci vienne directement du navigateur....
Quand le souci arrive .. as tu essayé de voir ce que contiennent les différentes variables ( en les écrivant dans un fichier de log par exemple ) ou en les mettant dans le ELSE ( bien entendu, pour les voir, retirer la redirection à la fin du script )
Alors, ça je l'ai fait, j'avais mis en commentaire le header('Refresh pour avoir le temps
de lire mes echo $destinataire, $sujet, $contenu, $entete
Que voici :
contact@test.frFormulaire de contact site Internet Nom : MARTIN Prenom : Jean-Marc Téléphone : 0102030405 E-mail : test@test.fr Message : rrrrrrrrrrrrrrrrMIME-Version: 1.0 From:MARTIN Reply-To:test@test.fr Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 7bit X-Mailer:PHP/7.4.29
Pour dépanner j'ai écris ça en attendant :
if(mail($destinataire, $sujet, $contenu)){//, $entete)){
Du coup les mails arrivent MAIS avec ça en entête : sh-184929988@eu.hosting-webspace.io
À noter que certains serveurs bloquent l'envoi des mails si dans le from, l'email indiqué ne correspond pas au nom de domaine du site.
Certains hébergeurs également, ont une limite en nombre de mails envoyés par jour par heure que ce soit au global sur tout leur site et où sur ton site à toi tout simplement.
Tu pourrais essayer également de retirer certains paramètres de ton header histoire de voir lequel peut éventuellement bloquer.
$entete= 'MIME-Version: 1.0' . "\r\n";
//ICI ÇA PLANTE => // $entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
$entete .= 'Reply-To:' . $email . "\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();
Si j'enlève les \\ mon mail ne part pas et j'ai droit au message d'erreur*, si je les remets, le mail arrive dans ma boite !
- = "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ NOUS N'AVONS PAS...etc
$entete= 'MIME-Version: 1.0' . "\r\n";
$entete .='From: webmaster@example.com' . "\r\n"; // <= ÇA FONCTIONNE
//ICI ÇA PLANTE => // $entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
$entete .= 'Reply-To:' . $email . "\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();
Avant d'incriminer Chrome, as-tu essayé sur un autre navigateur (non chrome, donc exit Edge, Safari & co), comme Firefox ?
je cite une partie du message de base.
Après quelques tests, j'ai constaté qu'avec Firefox, il n'y avait aucun problème, les mails
arrivaient bien par contre avec Chrome depuis mon Linux ou depuis mon smartphone
Android, j'étais systématiquement dirigé vers un message d'erreur que j'avais écris il
y a plusieurs année pour avertir l'utilisateur que son mail n'avait pas été traité !
Voici un bout de code qui fonctionne :
$to = 'adresseperso@gmail.com';
$subject = 'Formulaire de contact site Internet';
$message = '\nNom : $nom \nPrenom : $prenom \nTéléphone : $telephone \nE-mail : $email \nMessage : $text';
$headers = 'From: webmaster@example.com' . "\r\n" . 'Reply-To: webmaster@example.com' . "\r\n" . 'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
Si je change ça dans le $header : webmaster@example.com en : webmaster, ça ne fonctionne plus !!!
Le problème d'insertion dynamique de l'adresse du Reply-To: va se poser également !
Je pense qu'une partie de la réponse doit se trouver là dedans :

Mais je pige pas trop ce qu'il faut faire !
Le fait d'envoyer un mail avec une entête From: toto@mondomaine.com peut poser des problèmes de délivrabilité si mondomaine.com n'est pas configuré correctement. Les serveurs SMTP risque de considérer une usurpation d'identité sur l'émetteur toto@mondomaine.com et bloquer le mail.
Essaye de te renseigner auprès de ton registrar sur les enregistrements SPF et DKIM afin de configurer correctement la zone DNS du nom de domaine utilisé pour envoyer les mails.
Tu peux utiliser le site mail-tester.com pour tester la délivrabilité de ton mail et vérifier que les enregistrements SPF et DKIM sont bien configurés (page /spf-dkim-check)
"insertion dynamique de l'adresse du Reply-To": d'où viendrait cette adresse?
Internet tente d'empecher des usurpations d'identité, entr'autres en vérifiant que le "reply-to" correspond bien à celui qui envoie le mail. Sinon, il est trop simple pour chacun d'envoyer des mails en indiquant lepape@vatican.va comme "reply-to".
Je viens donc d'appeler Ionos (mon hébergeur) et un technicien m'a aidé à créer un
enregistrement SPF dans mes paramètres DNS avec comme valeur :
v=spf1 include:_spf.perfora.net include:_spf.kundenserver.de ~all
Bref du Chinois pour moi...
Ce même technicien m'a expliqué que je n'aurai pas la possibilité chez Ionos d'avoir
un enregistrement DKIM, car pas de ça chez eux :-(
J'en ai profité pour modifier mon fichier envoi.php pour remplacer mon mail@nomdedomaine
par monmail@gmail.com car il m'a dit que le problème pouvait aussi venir de Google
et des adresses redirigées !
Il faut maintenant attendre 48h selon lui...
Quand je parlais d'insertion dynamique de données dans l'instruction mail, je
voulais dire que ce qu'avait saisi l'utilisateur dans le formulaire de contact allait
être repris par des variables $_POST pour composer mail($destinataire, $sujet, $contenu, $entete);
Je viens de faire qq essais 15 minutes après la création de SPF et déjà je n'ai plus
le message que j'avais écris pour avertir l'utilisateur que son mail ne nous était pas
parvenu, il y a du mieux...
Par contre dans l'entête du mail j'ai ça maintenant :
sh-184929988@eu.hosting-webspace.io

C'est quoi ce truc ?
$entete= 'MIME-Version: 1.0' . "\r\n";
$entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
$entete .= 'Reply-To:'.$email. "\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();
Quand je clique sur répondre, même avec sh-184929988@eu.hosting-webspace.io
la bonne adresse du client apparaît MAIS 2 fois ???

Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionles paramètres avec le tech d'IONOS :
SPF check
1 SPF record found for the domain mondomaine.fr :
"v=spf1 include:_spf.perfora.net include:_spf.kundenserver.de ~all"
DKIM check
No DNS record found for default._domainkey.mondomaine.fr
Pour ce qui est des détails du message reçu en utilisant "Afficher l'original :
Authentication-Results: mx.google.com;
spf=pass (google.com: domain of sh-184929988@eu.hosting-webspace.io designates 212.xxx.xxx.xxx as permitted sender) smtp.mailfrom=sh-184929988@eu.hosting-webspace.io
Received: from localhost ([xx.xxx.xx.xxx]) by mrelayeu.kundenserver.de (mreue009 [213.xxx.xx.xx]) with ESMTPSA (Nemesis) id 1Mwfj0-1nlGi140zq-00yB9F for <monmail@gmail.com>; Thu, 23 Jun 2022 11:17:48 +0200
From: sh-184929988@eu.hosting-webspace.io
Date: Thu, 23 Jun 2022 11:17:47 +0200
To: monmail@gmail.com
C'est qui ce : mrelayeu.kundenserver.de ?
As-tu essayé d'envoyer un message (normal, pas automatisé) à cette adresse?

As-tu testé avec le fichier envoi.php comme il était précédemment?
J'ai remis l'ancien fichier, avec le ReCaptcha v2 car étrangement le v3 n'empêchait
pas la validation du formulaire de contact avec tous les champs vide, mais ça c'est un autre problème....
J'ai simplement mis comme $destinataire monmail@gmail.com à la place de mail@nomdedomaine
//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom']: NULL;
$prenom = !empty($_POST['prenom']) ? $_POST['prenom']: NULL;
$email = !empty($_POST['email']) ? trim($_POST['email']): NULL;
$telephone = !empty($_POST['telephone']) ? $_POST['telephone']: NULL;
$text = !empty($_POST['text']) ? $_POST['text']: NULL;
$_SESSION['nom'] = htmlspecialchars($nom);
$_SESSION['prenom'] = htmlspecialchars($prenom);
$_SESSION['email'] = htmlspecialchars($email);
$_SESSION['telephone'] = htmlspecialchars($telephone);
$_SESSION['text'] = htmlspecialchars($text);
.../...
if(check_token($_POST['g-recaptcha-response'],CLESECRETE)){
// LE CAPTCHA EST BON => C'est un humain
$destinataire = "monadresse@gmail.com";
$sujet = "Formulaire de contact site Internet";
$contenu = "\nNom : $nom \nPrenom : $prenom \nTéléphone : $telephone \nE-mail : $email \nMessage : $text";
$entete= 'MIME-Version: 1.0' . "\r\n";
$entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
$entete .= 'Reply-To:'.$email. "\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(mail($destinataire, $sujet, $contenu, $entete)){
$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...";
$h1 = "Envoi du message !";
}else{
$ligne1 = "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ NOUS N'AVONS PAS ÉTÉ EN MESURE DE
RECEVOIR VOTRE MESSAGE." . '<br>' . "NOUS SOMMES DÉSOLÉS POUR CE DÉSAGRÉMENT";
$ligne2 = "MERCI D'UTILISER VOTRE LOGICIEL DE MESSAGERIE HABITUEL ET CETTE ADRESSE :" . '<br>' .
'<b style="color:blue;"><a href="mailto:monadresse@gmail.com">monadresse@gmail.com</a></b><br>';
$h1 = "ERREUR";
}
header('Refresh: 5; URL= index.php');
session_destroy();
}
else {
// C'est un robot ou le code de vérification est incorrect
$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...";
$h1 = "Erreur !";?>
<script type="text/javascript">
window.setTimeout('history.back();', 4000);
</script>
<?php
}
?>
"message_origine.txt" dont voici le lien : https://www.cjoint.com/c/LFygTIKV1WC
J'ai vérifié que toute les adresses expéditeur étaient la bonne, je les ai remplacées à chaque fois
par adressePersoOK@gmail.com.
J'ai vérifié que toute les adresses destinataire étaient la bonne, je les ai remplacées à chaque fois
par adressedusiteOK@gmail.com.
Un echo de $entete donne :
MIME-Version: 1.0 Reply-To:adressePersoOK@gmail.com Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 7bit X-Mailer:PHP/7.4.30From:MON_NOM_OK MIME-Version: 1.0 Reply-To:adressePersoOK@gmail.com Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 7bit X-Mailer:PHP/7.4.30
Je te remercie du temps que tu consacres à m'aider !
MIME-Version: 1.0 Reply-To:adressePersoOK@gmail.com Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 7bit X-Mailer:PHP/7.4.30From:MON_NOM_OK MIME-Version: 1.0 Reply-To:adressePersoOK@gmail.com Content-Type: text/plain; charset="utf-8"; DelSp="Yes"; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 7bit X-Mailer:PHP/7.4.30
Ne remarques-tu pas que certains éléments y sont répétés?
Par ailleurs, tu peux voir ceci dans le fichier:
X-Mailer: PHP/7.4.30From:MON_NOM_OK <adressedusiteOK@gmail.com>
Il n'y a pas de passage à la ligne avant le "From", qui n'est donc pas pris en compte.
Je suspecte que tu as modifié ton code PHP sans tester et sans nous tenir au courant.
Si bien sûr, je le mentionnait déjà en #16
Il n'y a pas de passage à la ligne avant le "From", qui n'est donc pas pris en compte.
Tu as raison, je viens de retrouver une sauvegarde et j'ai comparé les deux versions...
J'ai bien une erreur d’inattention à la deuxième ligne :
$entete= 'MIME-Version: 1.0' . "\r\n";
$entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
$entete .= 'Reply-To:'.$email. "\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();
Mais bizarrement si j'écris :
$entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n"; avec un point virgule plutôt qu'un point,
j'ai systématiquement mon message d'erreur : "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ ...
Je suspecte que tu as modifié ton code PHP sans tester et sans nous tenir au courant.
C'est exact, je travail aussi à la recherche de l'erreur et il est possible de poster des fichiers
du messageorigine.txt qui ne correspondent plus à mon php du post #1, je suis désolé de ne pas avoir prévenu !
D'ailleurs mon erreur inattention date du #10 quand j'ai neutralisé la ligne qui posait problème
en ajoutant un // et un $entete.= à la ligne suivante sans remettre tout en place après mon test !
$entete .='From: webmaster@example.com' . "\r\n"; // <= ÇA FONCTIONNE
//ICI ÇA PLANTE => // $entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
$entete .= 'Reply-To:' . $email . "\r\n" .
EDIT: J'ai aussi, selon les conseil du tech Ionos utilisé :
$destinataire = adressedusite@gmail.com plutôt que
$destinataire =contact@nomdedomaine.fr car il m'a dit que le problème pouvait venir avec Google et les redirections !
$entete= 'MIME-Version: 1.0' . "\r\n";
$entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
'Reply-To:'.$email. "\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();
J'ai toujours le message : "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ ..."
Si j'écris une entête fortement incorrecte :
$entete= 'MIME-Version: 1.0' . "\r\n";
$entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" . // <----------- ? ? ?
$entete .= 'Reply-To:'.$email. "\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();
Le message part, j'ai l'avertissement "Votre message a bien été envoyé, nous vous répondrons...."
et il arrive dans ma boite Gmail avec l'expéditeur sh-184929988@eu.hosting-webspace.io !!!!
C'est un truc de dingue !
En fait, tout cela me semble logique:
- soit ton code crée une entête correcte avec en From une adresse email usurpée, et l'envoi est refusé, pour tentative d'usurpation.
- soit ton code créé une entête (accidentellement) sans adresse en From, et l'envoi est accepté. Comme tu n'as pas spécifié d'adresse From, une adresse "bidon" semble être utilisée comme adresse From, et c'est probablement une adresse non usurpée, parce c'est une adresse dans le domaine de ton hébergeur.
As-tu essayé de créer une entête correcte avec en From une adresse email de ton domaine (celui dont tu as configuré le DNS avec du SPF)? Cela me semble la seule approche correcte.
<?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);
?>
Mais comment insérer là dedans les données dynamiques du formulaire contact
sans risquer un message d'erreur : "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ ..."
Je ne suis qd même pas le seul à avoir un formulaire de contact sur son site, et comment
expliquer que la page contact.php et envoi.php fonctionnent parfaitement depuis
deux ans et que d'un coup, plus rien sans aucun information de Google, Gmail ou
d'explication de Ionos ?
PS: Je suis désolé si mes différentes manip font perdre du temps aux personnes qui veulent m'aider...
Ça, ça fonctionne, presque !
$decode = json_decode(file_get_contents($api_url), true);
if ($decode['success'] == true) { // LE CAPTCHA EST BON => C'est un humain
$to = 'adressedusite@gmail.com';
$subject = 'Formulaire de contact site Internet';
$message = 'Nom : ' . $nom . 'Prenom : ' . $prenom . 'Téléphone : ' . $telephone . 'E-mail : ' . $email . 'Message : ' . $text;
$headers = 'From: ' . $email . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers)) {
Sauf que c'est crade :
- Dans From, il faut absolument une adresse mail, si je mets $nom, c'est mort, j'ai le message
d'erreur
- Du coup, le message arrive avec comme expéditeur le nom qui précède l'@ dans l'adresse mail
(ex test pour test@test.fr) de cette forme : test@test.fr via eu.hosting-webspace.io
- Le corps du message est sur une seule ligne :
Nom : TOTOPrenom : TitiTéléphone : 0108091011E-mail : test@test.frMessage : Le paramètre additional_params peut être utilisé pour passer un paramètre additionnel au programme configuré à être utilisé pour envoyer les mails en utilisant sendmail_path.
(EDIT : Le retour à la ligne avec . "\r\n" . fonctionnent, il faut simplement ne pas les oublier)
$to = 'adressedusite@gmail.com';
$subject = 'Formulaire de contact site Internet';
$message = 'Nom : ' . $nom . "\r\n" . 'Prenom : ' . $prenom . "\r\n" . 'Téléphone : ' . $telephone . "\r\n" . 'E-mail : ' . $email . "\r\n" . 'Message : ' . "\r\n" . $text;
$headers = 'From: ' . $email . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
Par contre, je n'arrive pas à écrire le code qui permettrait d'avoir le nom du client plutôt que son
mail qui s'affiche :
('From: Anniversaire <anniversaire@example.com>'; source php.net)

EDIT : J'ai vérifié l'historique de mes emails et les premiers via eu.hosting-webspace.io apparaissent en
mars 2021, avant j'avais NOMDUCLIENT adressemailduclient@gmail.com
- ton code php,
- le contenu de la variable $entete,
- le contenu de "afficher l'original"
Sans ces éléments, nous ne pouvons pas t'aider.
Bien que tu ne l'écrives pas, je suppose que nous pouvons, chaque fois, ignorer toutes tes questions sauf la dernière.
J'ai fait différents essais en tenant compte des remarques sur ce post et des recherches
faites sur Internet.
Le résultat actuel me convient presque : en effet tout est revenu comme avant excepté le
fait que l'expéditeur apparaît sous la forme de son adresse mail sans l'@ et le fournisseur
internet (ex martin.rene récupéré dans martin.rene@free.fr - J'aimerai plutôt René MARTIN).
Voici mon envoi.php
if ($decode['success'] == true) { // LE CAPTCHA EST BON => C'est un humain
$to = 'adressedusite@gmail.com';
$subject = 'Formulaire de contact site Internet';
$message = 'Nom : ' . $nom . "\r\n" . 'Prenom : ' . $prenom . "\r\n" . 'Téléphone : ' . $telephone . "\r\n" . 'E-mail : ' . $email . "\r\n" . 'Message : ' . "\r\n" . $text;
$headers = 'From: ' . $email . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers)) {
$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...";
$h1 = "Envoi du message !";
}else{
$ligne1 = "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ NOUS N'AVONS PAS ÉTÉ EN MESURE DE
RECEVOIR VOTRE MESSAGE." . '<br>' . "NOUS SOMMES DÉSOLÉS POUR CE DÉSAGRÉMENT";
$ligne2 = "MERCI D'UTILISER VOTRE LOGICIEL DE MESSAGERIE HABITUEL ET CETTE ADRESSE :" . '<br>' .
'<b style="color:blue;"><a href="mailto:adressedusite@gmail.com">adressedusite@gmail.com</a></b><br>';
$h1 = "ERREUR";
}
header('Refresh: 5; URL= index.php');
session_destroy();
}
Le txt de afficher l'original de mon code actuel :
https://www.cjoint.com/c/LFCmqCWgsTC
Et l'echo de $headers :
From: martin.rene@free.fr Reply-To: martin.rene@free.fr X-Mailer: PHP/7.4.30
Doc PHP.NET:
From: Anniversaire <anniversaire@example.com>
C'est cette ligne que je n'arrive pas à intégrer de manière dynamique dans mon code
comme expéditeur dans mon Gmail !
Rene MARTIN martin.rene@free.fr via eu.hosting-webspace.io
Par contre, ma syntaxe ne fonctionne pas !
Je remplis le formulaire, je valide le Recaptcha v2, j'ai le message qui me dit que
ma demande a bien été prise en compte mais mon Gmail (y compris les SPAMs)
restent désespérément vide !
$headers = 'From:' . $prenom . ' ' . $nom . ' ' . '<' . $email . '>' . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
Qu'est-ce que j'ai loupé ?
EDIT : même avec un espace après les deux points du 'From: '
ou comme ça :
$headers = 'From:' . ' ' . $prenom . ' ' . $nom .....
Sinon, mon code php :
if ($decode['success'] == true) { // LE CAPTCHA EST BON => C'est un humain
$to = 'adressedusite@gmail.com';
$subject = 'Formulaire de contact site Internet';
$message = 'Nom : ' . $nom . "\r\n" . 'Prenom : ' . $prenom . "\r\n" . 'Téléphone : ' . $telephone . "\r\n" . 'E-mail : ' . $email . "\r\n" . 'Message : ' . "\r\n" . $text;
$headers = 'From:' . ' ' . $prenom . ' ' . $nom . ' ' . '<' . $email . '>' . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
et l'echo $headers;
From: David SCHMURTZ Reply-To: david.schmurtz@aol.com X-Mailer: PHP/7.4.30
From: David SCHMURTZ <david.schmurtz@aol.com> Reply-To: david.schmurtz@aol.com X-Mailer: PHP/7.4.30
Toujours rien dans la boite Gmail !
(Pour le nom du formulaire c'est parce qu'à force de faire 600 essais le ReCaptcha me demande de valider
des passages cloutés)
if ($decode['success'] == true) { // LE CAPTCHA EST BON => C'est un humain
$to = 'adressedusite@gmail.com';
$subject = 'Formulaire de contact site Internet';
$message = 'Nom : ' . $nom . "\r\n" . 'Prenom : ' . $prenom . "\r\n" . 'Téléphone : ' . $telephone . "\r\n" . 'E-mail : ' . $email . "\r\n" . 'Message : ' . "\r\n" . $text;
$headers = 'From:' . ' ' . $prenom . ' ' . $nom . ' ' . '<' . $email . '>' . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
if(mail($to, $subject, $message, $headers)) {
$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...";
$h1 = "Envoi du message !";
}else{
$ligne1 = "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ NOUS N'AVONS PAS ÉTÉ EN MESURE DE
RECEVOIR VOTRE MESSAGE." . '<br>' . "NOUS SOMMES DÉSOLÉS POUR CE DÉSAGRÉMENT";
$ligne2 = "MERCI D'UTILISER VOTRE LOGICIEL DE MESSAGERIE HABITUEL ET CETTE ADRESSE :" . '<br>' .
'<b style="color:blue;"><a href="mailto:adressedusite@gmail.com">adressedusite@gmail.com</a></b><br>';
$h1 = "ERREUR";
}
header('Refresh: 5; URL= index.php');
session_destroy();
}
martin.rene@free.fr?
Si tu changes plusieurs éléments en même temps, comment peux-tu espérer comprendre ce qui fonctionne et ce qui ne fonctionne pas?
Comme déjà écrit, je pense que tu devrais changer d'approche, et renoncer à utiliser en "from" des adresses dont tu n'es pas propriétaire. Je pense que ces usurpations seront, au fil du temps, de moins en moins tolérées.
Je ne cherche pas à usurper des adresses mails, je voudrais simplement que l'adresse du client arrive comme un commentaire dans le corps de l'email sur mon Gmail pour que je puisse lui répondre, comme le font la plupart des formulaires de contact que nous remplissons tous les jours...
quand même des mails, même si le prénom et le nom n'apparaissent pas et je viens de me
rendre compte que si les mails n'arrivaient pas c'est parce que à force de chercher dans
tous les sens, j'avais laissé :
$to = 'adressedusite@gmail.com';
J'ai donc mis la bonne adresse mail dans $to et le code du #47 et j'ai testé :
J'ai le message : "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ NOUS N'AVONS PAS ÉTÉ..."
et toujours rien dans Gmail bien évidement !
En résumé :
Ton code
$headers = 'From: Rene MARTIN <martin.rene@free.fr>' . "\r\n" .
FONCTIONNE
Mon code :
$headers = 'From: ' . $email . "\r\n" .
FONCTIONNE
Et toutes les tentatives de bidouilles du $header :
$headers = 'From:' . ' ' . $prenom . ' ' . $nom . ' ' . '<' . $email . '>' . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
NE FONCTIONNENT PAS
$headers = 'From: Rene MARTIN <martin.rene@free.fr>' . "\r\n" .
'Reply-To: martin.rene@free.fr' . "\r\n" .
L'email arrive comme ça :
Rene MARTIN martin.rene@free.fr via eu.hosting-webspace.io
(Prénom NOM mail@fournisseur)
Mais évidemment les données ne sont pas dynamiques !
Ce qui est incroyable c'est de ne pas arriver (autorisation ?) à écrire la même chose avec les données
issues du formulaire !
Dès que je tente un
$headers = 'From:' . ' ' . $prenom . ' ' . $nom . ' ' . '<' . $email . '>' . "\r\n" .
j'ai systématiquement :
"SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ NOUS N'AVONS PAS ÉTÉ..."
Creusons cela.
Peux-tu essayer ainsi?
$prenom="Rene";
$nom="MARTIN";
$email="martin.rene@free.fr";
$headers = 'From:' . ' ' . $prenom . ' ' . $nom . ' ' . '<' . $email . '>' . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
echo "<br>headers: ";
echo htmlspecialchars($headers);
echo "<br>";
Je n'ai pas lu l'entièreté de cette (longue) conversation, peut-être que cela a déjà été dit :
Certains hébergeurs peuvent restreindre les adresses pouvant être utilisées dans le champ SMTP "From".
Les serveurs de ton hébergeur ne sont pas autorisés par les propriétaires des domaines free.fr, gmail.com ou tout autre domaine tiers à envoyer des courriels en utilisant ces domaines. De ce fait, les destinataires recevant des courriels "From: user@free.fr" depuis ton hébergeur pourraient assimiler cela à une usurpation et nuire à la réputation de l'IP. Afin d'éviter cela, certains hébergeurs permettent l'envoi de courriels seulement si le champ "From" contient une adresse liée à un domaine configuré sur l'hébergement.
Il est donc important de préciser une adresse liée à un domaine configuré sur ton hébergement dans le champ "From". Il ne faut surtout pas utiliser l'adresse renseignée par le visiteur. Tu peux placer l'adresse du visiteur en Reply-to.
Je vois aussi qu'il est mentionné SPF et DKIM dans cette conversation. Ces deux protocoles permettent au destinataire de vérifier si le courriel a été envoyé par un serveur autorisé par le titulaire du domaine. Cela concerne le filtre antispam du destinataire, et non l'envoi.
Je viens de remplacer le champs dynamique $email par
une donnée statique qui est mon adresse Gmail (forme : adressedemonsite@gmail.com)
Du coup, l'expéditeur affiché dans Gmail est :
moi
L'entête :
adressedemonsite@gmail.com via eu.hosting-webspace.io
Et dans ma boite Gmail j'ai ça en haut de message :
Traitez ce message avec prudence
Ce message peut être usurpé. Le message prétend avoir été envoyé à partir de votre compte, mais Gmail n'a pas pu en vérifier la véritable source...
Si je modifie mon code pour indiquer en From: contact@mondomaine.fr mon
message ne part pas !
headers: From: René MARTIN <contact@mondomaine.fr> Reply-To: martin.rene@free.fr Reply-To: martin.rene@free.fr X-Mailer: PHP/7.4.30
SI J'UTILISE FIREFOX :
Et que je remette tout le code en place comme avant la panne, ça fonctionne !
1. J'indique $to = "contact@mondomaine.fr"
j'ai MARTIN dans la liste des messages (bizarrement je n'ai plus le prénom !)
J'ai MARTIN via eu.hosting-webspace.io (bizarrement je n'ai plus le prénom !)
Et le corps du message correct
2. J'indique $to = "adressedemonsite@gmail.com"
J'ai moi dans la liste des messages
J'ai MARTIN via eu.hosting-webspace.io en ouvrant le mail (Toujours pas de prénom)
et en dessous :
Ce message peut être usurpé. Le message prétend avoir été envoyé... bla bla bla
Code avant la panne et qui fonctionne avec FIREFOX ! ! !
$decode = json_decode(file_get_contents($api_url), true);
if ($decode['success'] == true) { // LE CAPTCHA EST BON => C'est un humain
$destinataire = "contact@mondomaine.fr";
$sujet = "Formulaire de contact site Internet";
$contenu = "\nNom : $nom \nPrenom : $prenom \nTéléphone : $telephone \nE-mail : $email \nMessage : $text";
$entete= 'MIME-Version: 1.0' . "\r\n";
$entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
'Reply-To:'.$email. "\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(mail($destinataire, $sujet, $contenu, $entete)){
$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...";
$h1 = "Envoi du message !";
}else{
$ligne1 = "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ NOUS N'AVONS PAS ÉTÉ EN MESURE DE
RECEVOIR VOTRE MESSAGE." . '<br>' . "NOUS SOMMES DÉSOLÉS POUR CE DÉSAGRÉMENT";
$ligne2 = "MERCI D'UTILISER VOTRE LOGICIEL DE MESSAGERIE HABITUEL ET CETTE ADRESSE :" . '<br>' .
'<b style="color:blue;"><a href="mailto:contact@mondomaine.fr">contact@mondomaine.fr</a></b><br>';
$h1 = "ERREUR";
}
header('Refresh: 5; URL= index.php');
session_destroy();
}
D'ailleurs, on voit bien que ce code d'origine utilise $destinataire dans le From (ligne 8) au lieu
de $email qui serait plus logique !
Afficher l'original : https://www.cjoint.com/c/LFEmt0OmCGC
Es-tu d'accord?
Je me trompe, où tu as évité de partager avec nous le résultat de
echo htmlspecialchars($headers);dans les cas de "PROBLÈME TECHNIQUE MOMENTANÉ"?
Je ne vois non plus le code PHP qui alimente les variables $prenom, $nom et $email, ni, d'ailleurs le contenu de ces variables.
ton code "bidouillé" qui fonctionne, sinon je n'ai pas ce message bien évidemment !
J'ai donc utilisé ce code
$headers = 'From:' . ' ' . $prenom . ' ' . $nom . ' ' . '<' . $email . '>' . "\r\n" .
echo htmlspecialchars($headers) donne :
headers: From: René MARTIN <martin.rene@free.fr> Reply-To: martin.rene@free.fr X-Mailer: PHP/7.4.30
<?php
session_start();
/*//affichage des erreurs php
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
*/
//récupération PROPRE des variables AVANT de les utiliser
$nom = !empty($_POST['nom']) ? $_POST['nom']: NULL;
$prenom = !empty($_POST['prenom']) ? $_POST['prenom']: NULL;
$email = !empty($_POST['email']) ? trim($_POST['email']): NULL;
$telephone = !empty($_POST['telephone']) ? $_POST['telephone']: NULL;
$text = !empty($_POST['text']) ? $_POST['text']: NULL;
$_SESSION['nom'] = htmlspecialchars($nom);
$_SESSION['prenom'] = htmlspecialchars($prenom);
$_SESSION['email'] = htmlspecialchars($email);
$_SESSION['telephone'] = htmlspecialchars($telephone);
$_SESSION['text'] = htmlspecialchars($text);
// Ma clé privée
$secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// Paramètre renvoyé par le recaptcha
$response = $_POST['g-recaptcha-response'];
$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
$destinataire = "adressedusite@gmail.com";
$sujet = "Formulaire de contact site Internet";
$contenu = "\nNom : $nom \nPrenom : $prenom \nTéléphone : $telephone \nE-mail : $email \nMessage : $text";
$prenom="Rene";
$nom="MARTIN";
$email="martin.rene@free.fr";
$headers = 'From:' . ' ' . $prenom . ' ' . $nom . ' ' . '<' . $email . '>' . "\r\n" .
'Reply-To: ' . $email . "\r\n" .
'X-Mailer: PHP/' . phpversion();
echo "<br>headers: ";
echo htmlspecialchars($headers);
echo "<br>";
if(mail($destinataire, $sujet, $contenu, $headers)){
$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...";
$h1 = "Envoi du message !";
}else{
$ligne1 = "SUITE A UN PROBLÈME TECHNIQUE MOMENTANÉ NOUS N'AVONS PAS ÉTÉ EN MESURE DE
RECEVOIR VOTRE MESSAGE." . '<br>' . "NOUS SOMMES DÉSOLÉS POUR CE DÉSAGRÉMENT";
$ligne2 = "MERCI D'UTILISER VOTRE LOGICIEL DE MESSAGERIE HABITUEL ET CETTE ADRESSE :" . '<br>' .
'<b style="color:blue;"><a href="mailto:adressedusite@gmail.com">adressedusite@gmail.com</a></b><br>';
$h1 = "ERREUR";
}
//header('Refresh: 5; URL= index.php');
//session_destroy();
}
else {
// C'est un robot ou le code de vérification est incorrect
$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...";
$h1 = "Erreur !";?>
<script type="text/javascript">
window.setTimeout('history.back();', 4000);
</script>
<?php
}
L'echo :
headers: From: Rene MARTIN <contact@mon nomdedomaine.fr> Reply-To: martin.rene@free.fr Reply-To: martin.rene@free.fr X-Mailer: PHP/7.4.30
Dans le listing des messages j'ai bien
Rene MARTIN et qd j'ouvre le mail j'ai : Rene MARTIN via eu.hosting-webspace.io
En fait, toutes ces infos sont contenues dans ton $header bidouillé !
J'ai l'impression que je vais laisser tomber, je ne trouve aucune solution, même sur des
sites étrangers... Certains types sont dans le même cas que moi, et cela depuis 3 ans !
https://stackoverflow.com/questions/56721239/concatenating-php-mail-header-with-dynamic-email-from-post
:-)
https://stackoverflow.com/questions/27461109/php-mail-function-with-variables-how

