Problème de réception de mail via formulaire (send.php)

Eléphanteau du PHP | 11 Messages

05 avr. 2017, 09:53

Bonjour à tous,

Je suis vraiment en galère... :cry:

J'ai réalisé pour un client, un site en deux langues (anglais et italien).
C'est du html5 css3 bootstrap.

il est structuré comme suit :
www.son-nom.com (anglais)
www.son-nom.com/ita (italien)

Dans chacun d'entre eux, se trouve un formulaire de contact. Ils sont strictement identiques, seul la langue change (anglais ou italien) en front end dans le formulaire. Chaque formulaire dispose de son propre fichier « send.php » dans le repertoire racine de chaque langue; là aussi, ils sont parfaitement identiques.
Le site est en ligne depuis environ 1 mois; nous avions fait tous les tests de rigueur et tout fonctionnait sans problème.

Depuis 3 jours, le problème que je rencontre est le suivant :
Le client ne reçoit plus ses mails provenant de la version anglaise alors que dans la version italienne, tout fonctionne. Le message semble partir, mais il ne reçoit rien.

J'ai un clone de son site sur le mien et tout fonctionne normalement.

Je ne suis vraiment pas calé en PHP, j'ai testé PHPMailer, le résultat est encore pire (messages d'erreur en cascade)

Quelqu'un aurait-il une idée du problème ? :priere:

Merci d'avance
Modifié en dernier par moogli le 05 avr. 2017, 14:03, modifié 1 fois.
Raison : correction titre l'urgence ne se traite pas sur un forum ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 avr. 2017, 13:02

Bonjour,

Voici une liste des choses que tu peux vérifier pour tenter de trouver l'origine du problème :

1) Est-ce que le mail n'est pas reçu dans la boite de spam (ou Courrier Pêle-mêle sous Outlook) ?
2) As-tu testé avec des e-mails de destinataire chez différents fournisseurs de boites mail (Gmail, Yahoo, Orange...) ? Est-ce que le problème de non-réception est global ou ne concernerait qu'un seul fournisseur de boites mail ?
3) Est-ce que le serveur qui envoie le mail n'est pas blacklisté : https://mxtoolbox.com/blacklists.aspx
4) Est-ce que le mail est bien envoyé par le serveur ? Pour cela il faut regarder dans les logs du serveur mail (ou demander à son hébergeur)
5) Est-ce que l'e-mail indiqué en expéditeur du mail automatique que tu envoies est bien autorisé à envoyer ce mail via une directive SPF
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

05 avr. 2017, 14:11

Bonjour et merci pour ton intervention.

Pour rappel, la même adresse mail est utilisée dans les deux send.php

1) Est-ce que le mail n'est pas reçu dans la boite de spam (ou Courrier Pêle-mêle sous Outlook) ?
Réponse : Non

2) As-tu testé avec des e-mails de destinataire chez différents fournisseurs de boites mail (Gmail, Yahoo, Orange...) ? Est-ce que le problème de non-réception est global ou ne concernerait qu'un seul fournisseur de boites mail ?
Réponse : j'ai testé avec une adresse gmail, même résultat.

3) Est-ce que le serveur qui envoie le mail n'est pas blacklisté : https://mxtoolbox.com/blacklists.aspx
Réponse : non, je viens de vérifier

4) Est-ce que le mail est bien envoyé par le serveur ? Pour cela il faut regarder dans les logs du serveur mail (ou demander à son hébergeur)
Réponse : Oui car cela fonctionne avec la version italienne

5) Est-ce que l'e-mail indiqué en expéditeur du mail automatique que tu envoies est bien autorisé à envoyer ce mail via une directive SPF
Réponse : Bonne question, je suppose que oui. Comment le vérifier ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 avr. 2017, 14:28

salut,

si depuis le formulaire anglais tu utilises le script italien cela fonctionne ? (un bon moyen de faire fonctionner la chose rapidement)

coté archi, c'est pas une super idée d'avoir dupliqué le site pour chaque langue, il existe de solution permettant de gérer l'internationalisation (suivant les framework utilisés ou même sans). La tu va avoir double maintenance (c'est chiant et il y a des risques que les deux codes vive manière différente et finissent par être différent alors qu'il ne devrait pas l'être ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 11 Messages

05 avr. 2017, 17:14

Merci Moogli pour tes conseils,
Je vais tacher de voir ça pour le script...
Concernant l'architecture, tu as surement raison. Il y a deux raisons à cela, la première est que je ne suis pas encore assez calé et la seconde est que l'italien n'est arrivé que bien après.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

05 avr. 2017, 23:48

2) As-tu testé avec des e-mails de destinataire chez différents fournisseurs de boites mail (Gmail, Yahoo, Orange...) ? Est-ce que le problème de non-réception est global ou ne concernerait qu'un seul fournisseur de boites mail ?
Réponse : j'ai testé avec une adresse gmail, même résultat.
Il faut que tu testes sur au moins 3 providers de mail différents pour être sûr que ce ne soit pas un pb de provider de mail.
4) Est-ce que le mail est bien envoyé par le serveur ? Pour cela il faut regarder dans les logs du serveur mail (ou demander à son hébergeur)
Réponse : Oui car cela fonctionne avec la version italienne
Non, sans regarder les logs du serveur de mail tu ne peux pas être sûr que le mail est bien parti.
Regarde dans les logs donc.
5) Est-ce que l'e-mail indiqué en expéditeur du mail automatique que tu envoies est bien autorisé à envoyer ce mail via une directive SPF
Réponse : Bonne question, je suppose que oui. Comment le vérifier ?
Par ici :
https://mxtoolbox.com/spf.aspx
Tu mets le nom de domaine que tu utilises comme expediteur et l'IP de ton serveur qui effectues l'envoi du mail.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

06 avr. 2017, 10:50

2) As-tu testé avec des e-mails de destinataire chez différents fournisseurs de boites mail (Gmail, Yahoo, Orange...) ? Est-ce que le problème de non-réception est global ou ne concernerait qu'un seul fournisseur de boites mail ?
Réponse : j'ai testé avec une adresse gmail, même résultat.

Il faut que tu testes sur au moins 3 providers de mail différents pour être sûr que ce ne soit pas un pb de provider de mail.
Réponse : Je viens de tester avec mon adresse pro, une avec Yahoo.fr et la derniere en hotmail : Même résultat

4) Est-ce que le mail est bien envoyé par le serveur ? Pour cela il faut regarder dans les logs du serveur mail (ou demander à son hébergeur)
Réponse : Oui car cela fonctionne avec la version italienne

Non, sans regarder les logs du serveur de mail tu ne peux pas être sûr que le mail est bien parti.
Regarde dans les logs donc.
Réponse : je n'ai pas les accès. J'ai demandé au client de se rapprocher de l'hébergeur, celui indique que tout fonctionne.

5) Est-ce que l'e-mail indiqué en expéditeur du mail automatique que tu envoies est bien autorisé à envoyer ce mail via une directive SPF
Réponse : Bonne question, je suppose que oui. Comment le vérifier ?

Par ici :
https://mxtoolbox.com/spf.aspx
Tu mets le nom de domaine que tu utilises comme expediteur et l'IP de ton serveur qui effectues l'envoi du mail.
Réponse : Test effectué, tout est ok

:( :( :(

Eléphanteau du PHP | 11 Messages

07 avr. 2017, 08:07

Bonjour à tous,
Nouveaux tests ce matin,
En checkant les logs ce matin, il apparait que les mails ne passent pas dans la version anglaise.
J'ai dupliqué la version italienne vers l'anglaise (formulaire et send.php), même résultat. Ce n'est visiblement pas un problème de formulaire ni du "send.php"

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

07 avr. 2017, 09:03

C'est à dire qu'ils ne "passent pas" ?
Tu as quoi dans les logs de ton serveur mail ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

07 avr. 2017, 10:38

Je n'ai pas accès à ces infos, je viens de les demander au client.

Eléphanteau du PHP | 11 Messages

08 avr. 2017, 16:52

Voici la réponse apporté par l'hébergeur :
Thank you for contacting us. I'm sorry you're having this trouble. I'll be more than happy to help. Unfortunately, we are not able to determine where the problem is in your website's coding, because when we test your mail form, nothing happens on the server. Our mail logs do not show that anything at all happened. I recommend that you have your developer go through the code to make sure that it is executing properly. I would suggest enabling error logging in your php.ini to see if the mail form is generating PHP errors.

Pour info, après vérification, e fichier php.ini est vierge.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

08 avr. 2017, 22:25

Que te renvoie la fonction mail() quand tu l'appelle dans ton script ?
true ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

09 avr. 2017, 06:25

Désolé pour le manque de précison de mes réponses, je ne suis vraiment pas calé en PHP.
Voici le contenu du "send.php :
<?php
$mail = '[email protected]'; // Déclaration de l'adresse de destination.
if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail)) // On filtre les serveurs qui présentent des bogues.
{
	$passage_ligne = "\r\n";
}
else
{
	$passage_ligne = "\n";
}
//=====Déclaration des messages au format texte et au format HTML.
$message_txt = "Message from : \n".$_POST['name']."\n". "Email : \n".$_POST['address']."\n".$_POST['message']."\n";
$message_html = "<html><head></head><body>".$message_txt."</body></html>";
//==========
 
//=====Création de la boundary.
$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());
//==========
 
//=====Définition du sujet.
$sujet = "Informations";
//=========
 
//=====Création du header de l'e-mail.
$header = "From: \"Entreprise\"<[email protected]>".$passage_ligne;
$header.= "Reply-to: \"Entreprise\" <[email protected]>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;
//==========
 
//=====Création du message.
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
//=====Ajout du message au format texte.
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========
 
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
 
//=====Ajout du message au format HTML.
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========
 
//=====On ferme la boundary alternative.
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
//==========
 
$message.= $passage_ligne."--".$boundary.$passage_ligne;
//========== 

//=====Récupération des infos 
 //$name = $_POST['name'];
 //$address = $_POST['address'];
 //$corp_message = $_POST['message'];
 // mail()
 //==========
 
//=====Envoi de l'e-mail.
mail($mail,$sujet,$message,$header);
 
//==========

header("Location: index.html");      
  exit();
 
?>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

09 avr. 2017, 08:49

Ajoute un var_dump() autour de ton appel à la fonction mail() pour voir ce qui est renvoyé, et commente ta fonction header() pour désactiver la redirection et voir les messages.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 11 Messages

10 avr. 2017, 06:09

Pourrais-tu m'indiquer comment ?
Comme je l'ai dit, je suis vraiment pas calé sur le PHP.
Merci