Mes mail semblent partir mais n'arrivent pas ! [Résolu]

Signaler
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020
-
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020
-
Bonsoir à tous,

Je viens vous demander un peu d'aide pour un problème de réception de mail.
Sur mon site Internet j'ai une page "envoi.php" qui récupère les données du formulaire
de la page précédente "contact.php".
J'ai mis en place mon site fin décembre et tout marchait bien, les emails partaient bien et étaient bien redirigés vers mon Gmail, le top.
Depuis qq jours les visiteurs se plaignent de ne pas recevoir de réponses à leurs mails,
et pour cause, je n'en reçoit aucun !
J'ai fait un test en local en contournant la sécurité de mon Re-Captcha, c'est pareil : RIEN!
J'ai appelé IONOS mon hébergeur, nous avons migré de php 7.3 à 7.4 : RIEN ! On est même
repassés sur d'anciennes version php : toujours rien...
Aucun message d'erreur pour m'aider (sauf si je ne valide pas le Re-Captcha bien sûr).
Savez vous comment suivre mon message pour savoir où il reste coincé ? (log ?)

Je vous donne mon code php mais je ne pense pas que cela vienne de là car je n'ai touché
à rien depuis décembre 2019 !

envoi.php

<?php
session_start();
$_SESSION['nom'] = htmlspecialchars($_POST['nom']);
$_SESSION['prenom'] = htmlspecialchars($_POST['prenom']);
$_SESSION['email'] = htmlspecialchars($_POST['email']);
$_SESSION['telephone'] = htmlspecialchars($_POST['telephone']);
$_SESSION['text'] = htmlspecialchars($_POST['text']);
// Ma clé privée
$secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// 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
$nom = $_SESSION['nom'];
$prenom = $_SESSION['prenom'];
$email = $_SESSION['email'];
$telephone = wordwrap($_SESSION['telephone'],2,' ',true);
$text = $_SESSION['text'];
$destinataire = "contact@monsite.fr";
$sujet = "Formulaire de contact site Internet";
$contenu = "\nNom : $nom \nPrenom : $prenom \nTéléphone : $telephone \nE-mail : $email \nMessage : $text";
$entete = "From: $nom \n Reply-To: $email";
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 !";

//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
}
?>



Je penchais pour un problème avec Gmail, mais avec le technicien IONOS nous avons
supprimé la redirection vers Gmail, avons créé une boîte mail IONOS et les messages
n'arrivent même pas chez mon prestataire !

Merci d'avance pour votre aide !



EDIT : mon mail n'arrive pas plus quand je retire complètement la vérif Re-Captcha, ce n'est donc pas ça non plus :-(

8 réponses

Messages postés
29757
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2020
2 852
Bonjour,

Pour commencer, créé un fichier testmail.php sur ton site et places-y simplement ce code
<?php
$destinataire = "contact@monsite.fr"; // en mettant ton adresse mail bien entendu
$msg = " Ceci est juste un test...";
if(mail($destinataire,"Email TEST",$msg)){
  echo " mail envoyé (enfin... normalement...) ";
}else{
   echo " Erreur lors de l'envoi du mail";
} 

ça permettra déjà de savoir si le souci vient de l'envoi de mail à proprement parlé ..ou de ton code (bien qu'il n'y ait rien de particulier dedans visiblement)


Et pour éviter ce genre de souci, tu pourrais passer par un service tel que sendinblue pour gérer l'envoi des mails.
Cela te permettrait, via leur tableau de bord, de t'assurer que les mails sont bien envoyés..
L'offre gratuite autorise 300 mails par jours.
https://fr.sendinblue.com/tarifs/
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020

Merci Jordan45 de te pencher sur mon problème...
Je viens de coller ton code sur une page vierge et j'obtiens l'erreur sur mon serveur
en local !
Messages postés
29757
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2020
2 852
En local... pour que ça marche... il faut avoir configuré le smtp....
C'est directement sur ton serveur web que j'aimerai que tu testes le script... puisque c'est lui qui pose problème.

Et pour ce qui est de sendinblue...
1 - Leurs serveurs sont optimisés pour l'envoie de mail et éviter d'être blacklisté par les serveurs mails
2 - Le tableau de bord permet de voir les mails envoyés et leur état de remise.
3 - Tu t'affranchis du fonctionnement (parfois erratique...) de la fonction mail du serveur sur lequel tu héberges ton site.
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020
>
Messages postés
29757
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2020

Ça fonctionne quand je mets ça :

mail($destinataire, $sujet, $contenu);

Mais j'ai toujours cgi-mailer@kundenserver.de comme expéditeur
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020

En fait je n'envoie pas de mail, je les reçoit des visiteurs de mon site
qui veulent bien m'écrire, je ne vois pas bien en quoi seninblue pourrait
m'aider ?
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020

Désolé, sur le serveur ça fonctionne !
Je reçoit bien le mail en provenance de cgi-mailer@kundenserver.de (?)
Ça veut dire quoi tout ça ?

Je me pencherai sur ta solution sendinblue pour voir comment ça fonctionne
et pourquoi pas l'essayer sur mon serveur si c'est transparent pour mes visiteurs...
Messages postés
29757
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2020
2 852
Ca veut dire qu'il y a un souci au niveau de ton script ....

Remplace la par celui là et teste l'envoi ( en passant par ton formulaire de contact..)
<?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);

/**
//Le temps des tests on désactive le captcha

// Ma clé privée
$secret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// 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 = "contact@monsite.fr";
$sujet = "Formulaire de contact site Internet";
$contenu = "\nNom : $nom \nPrenom : $prenom \nTéléphone : $telephone \nE-mail : $email \nMessage : $text";

// -- Premier test sans mettre les entetes --//
//$entete = "From: $nom \n Reply-To: $email";
//if(mail($destinataire, $sujet, $contenu, $entete)){

if(mail($destinataire, $sujet, $contenu)){
  $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 !";
  echo "OK";
}else{
   echo " Erreur lors de l'envoi du mail";
}


/**
//Le temps des tests on désactive le captcha
  //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
}
*/
?>
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020

J'ai fait plein d'essais avec ton code, jusqu'à tout dé-commenter et tout
fonctionnait (y compris le Re-Captcha) jusqu'à ce que je dé-commente
$entete et l'ajoute dans mail, à ce moment le message d'erreur est revenu...

j'ai essayé des trucs comme ça :

$entete = array(
'From' => $nom,
'Reply-To' => $email,
'X-Mailer' => 'PHP/' . phpversion()
);

https://www.php.net/manual/fr/function.mail.php

ou comme ça :

$entete = "From: $nom" . "\n" . "Reply-To: $email";


mais ni l'un ni l'autre ne fonctionne !

Sans entête, mon message arrive bien avec l'expéditeur : cgi-mailer@kundenserver.de
Messages postés
29757
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2020
2 852
Essaye avec un headers comme ça :
$entete= 'MIME-Version: 1.0' . "\r\n";
$entete .= 'From:'.$nom.' <'.$destinataire.'>' . "\r\n" .
    'Reply-To:'.$destinataire. "\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();


A noter que sur la plus part des hébergeurs, pour que l'envoi de mail fonctionne.. le "from" doit correspondre à l'email utilisé pour l'envoi. donc, dans ton cas, ton email free.
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020

Salut !

Alors ça fonctionne ! mais dans ma boite Gmail, le message arrive avec ça :


"Traitez ce message avec prudence
Gmail n'a pas pu vérifier que ce message provient bien de moi@gmail.com. Évitez de cliquer sur des liens ou de télécharger des pièces jointes que ce message pourrait contenir, ou de communiquer des informations personnelles en y répondant.
SIGNALER COMME SPAM"

:-(
Messages postés
29757
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2020
2 852
Dans le FROM, assure toi que le "nom" et l'email sont ceux de ton smtp free....
Comme je te l'ai dit, si ils ne correspondent pas...ça peut bloquer l'envoi des mails ou les indiquer comme spam.

C'est pour protéger contre l'envoi de mails se faisant passer pour quelqu'un d'autre....
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020
>
Messages postés
29757
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
17 octobre 2020

Tu es génial, je te remercie pour ton aide !
J'ai tout remis au propre ce matin et tout fonctionne : BRAVO !!!


<?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 = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// Paramètre renvoyé par le recaptcha
$response = $_POST['g-recaptcha-response'];
// On récupère l'IP de l'utilisateur
$remoteip = $_SERVER['REMOTE_ADDR'];

$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 = "contact@monsite.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:'.$destinataire. "\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@monsite.fr">contact@monsite.fr</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
}
?>
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020

EDIT : Je vais ré activer mon Re captcha !
Messages postés
59
Date d'inscription
mardi 9 décembre 2014
Statut
Membre
Dernière intervention
8 juin 2020

Non, avec Re Captcha c'est toujours le même avertissement !