PHPMailer et smtp Orange

Eléphanteau du PHP | 13 Messages

09 nov. 2020, 23:12

Bonjour,
J'utilise PHP Mailer pour envoyer des emails depuis une application métier fonctionnant en PHP.
Si j'exécute le script d'envoi de mails depuis le serveur (en localhost ie 127.0.0.1/monscript.php) le mail part et est distribué au destinataire.
Si ce même script est exécuté depuis un autre poste de mon réseau (ie 192.x.x.x/monscript.php, 192.x.x.x étant l'adresse locale de mon serveur) alors le script s'éxécute correctement, le message est bien noté par PHP mailer comme envoyé avec succès mais le destinataire ne reçoit rien. J'ai fait le test avec le SMTP classique ie sans authentification (port 25) et le SMTP authentifié.
Le résultat est le même.

Code : Tout sélectionner

<?php use PHPMailer\PHPMailer\PHPMailer; use PHPMailer\PHPMailer\Exception; use PHPMailer\PHPMailer\SMTP; require 'PHPMailer2020/src/Exception.php'; require 'PHPMailer2020/src/PHPMailer.php'; require 'PHPMailer2020/src/SMTP.php'; $mail = new PHPMailer(); // Passing `true` enables exceptions try { //Server settings $mail->SMTPDebug = 2; // Enable verbose debug output $mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp.orange.fr'; // Specify main (and backup SMTP) servers (sÈparÈs par un point virgule) $mail->CharSet = 'UTF-8'; $mail->Username = ''; $mail->Password = ''; // SMTP password $mail->Port = 25; // TCP port to connect to $mail->setLanguage('fr', 'language/'); $mail->CharSet ='utf-8'; $mail->setFrom('[email protected]', 'Exp'); $mail->addAddress('[email protected]', 'Isa Dest');// Destinatiare $mail->AddReplyTo( '[email protected]','Isa Dest'); $mail->addBCC( '[email protected]','Bcc'); //Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Mon mail'; $mail->Body = 'corps du mail <b>en gras!</b>'; //OE $mail->WordWrap = 0; $mail->ContentType = 'text/html'; $mail->Encoding = '8bit'; $mail->send(); echo 'Le message a été envoye'; } catch (Exception $e) { echo 'Message could not be sent. '; echo 'Mailer Error: ' . $mail->ErrorInfo; } ?>
Sauriez-vous me dire comment solutionner ce problème ?
Vous remerciant par avance.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

10 nov. 2020, 10:20

Si ton adresse d'expéditeur est une adresse Gmail, tu devrais préférablement utiliser le SMTP de Gmail je pense.

Sinon, Orange recommande d'utiliser :
1) le port 465 (ssl)
2) toujours une identification pour les mails sortant

Du coup ça donnerait ça :
$mail->Host = 'smtp.orange.fr';
$mail->SMTPAuth = true;
$mail->Username = 'EMAIL_ORANGE';
$mail->Password = 'MOTDEPASSE_ORANGE';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 13 Messages

10 nov. 2020, 11:58

Tout d'abord merci pour cette réponse. J'ai indiqué gMail comme j'aurais pu indiquer mon adresse pro ou yahoo, le problème est le même.
Il faut savoir que j'ai aussi réalisé les même test en intégrant une authentification. Le probléme est déroutant car dans tous les cas si le script est exécuté depuis localhost les destinataires reçoivent bien les mails alors que si ce même script est exécuté depuis un poste client, le mail est envoyé avec succès mais n'arrive jamais.
J'ai testé depuis une autre connexion internet et donc avec un autre SMTP et là tout fonctionne quelque soit le poste exécutant le script, bizarre, non ?
Merci encore pour votre aide.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

10 nov. 2020, 16:28

Tout d'abord merci pour cette réponse. J'ai indiqué gMail comme j'aurais pu indiquer mon adresse pro ou yahoo, le problème est le même.
Hélas, le problème n'est pas le même je pense.

Ce qui te bloque c'est très certainement l'antispam en sortie du serveur SMTP d'Orange.
Si tu veux éviter d'être considéré comme un mail suspect, il faut de préférence que tu utilises le SMTP associé au mail expéditeur.
Si tu veux expédier en tant que ton adresse Gmail, c'est mieux d'utiliser le SMTP de Gmail.
Idem pour Orange.

Pour le SMTP d'Orange il faut impérativement que tu utilises le port 485 en SSL et en t'identifiant.

J'ai testé depuis une autre connexion internet et donc avec un autre SMTP et là tout fonctionne quel que soit le poste exécutant le script, bizarre, non ?
Ça me conforte dans l'idée que le problème vient d'un système antispam Orange qui filtre les mails envoyés.
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 13 Messages

11 nov. 2020, 15:57

Bonjour,
En suivant vos conseils, j'ai utilisé une adresse orange en tant qu'expéditeur et réponse.
Le problème reste identique, à savoir si le script d'envoi est exécuté directement sur le serveur le mail arrive, si ce même script est exécuté à partir d'un autre poste se trouvant dans le même réseau que le serveur, le mail part sans erreur mais n'arrive jamais.
Je tiens à préciser que les deux postes sont identiques en tout point, j'en perd donc mon latin.
Est-il possible que des droits s'appliquent à un script en fonction de son lieu d'exécution ?
Vous remerciant par avance pour votre aide.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 nov. 2020, 17:05

Tu as utilisé la même adresse e-mail @orange.fr en expéditeur que celle pour t'identifier au serveur SMTP ?
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 13 Messages

11 nov. 2020, 17:08

oui tout à fait.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 nov. 2020, 17:40

Bah du coup il faut que tu contactes Orange pour en savoir plus car je pense que c'est une question d'antispam de leur côté.

Mais à mon avis tu auras plus vite fait de changer de SMTP, soit en utilisant par exemple celui de Gmail si tu veux du gratuit, soit en utilisant un SMTP pro comme Mailjet.
Quand tout le reste a échoué, lisez le mode d'emploi...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 nov. 2020, 17:48

Euh par contre là je viens de voir que tu affiches un message de confirmation sans avoir bien vérifié ce que renvoie $mail->send() or je ne suis pas sûr que ça renvoie une exception à chaque fois.

Du coup il faut commencer par là !
if($mail->Send() === true){
     echo 'Le message a été envoyé';
}else{     
     echo "ERREUR : ".$mail->ErrorInfo;
} 
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 13 Messages

11 nov. 2020, 18:02

Je fait un try {} catch {}, donc cela devrait avoir le même effet, non ?

Eléphanteau du PHP | 13 Messages

11 nov. 2020, 18:42

Je viens de contacter Orange qui ne sait répondre à ma question !!!

Eléphanteau du PHP | 13 Messages

11 nov. 2020, 18:51

Voici le débug, tout semble correct

Code : Tout sélectionner

2020-11-11 16:44:38 SERVER -> CLIENT: 220 mwinf5d80 ME ESMTP server ready 2020-11-11 16:44:38 CLIENT -> SERVER: EHLO 192.168.1.13 2020-11-11 16:44:38 SERVER -> CLIENT: 250-mwinf5d80 hello [86.245.141.120], pleased to meet you250-HELP250-AUTH LOGIN PLAIN250-SIZE 44000000250-ENHANCEDSTATUSCODES250-8BITMIME250 OK 2020-11-11 16:44:38 CLIENT -> SERVER: AUTH LOGIN 2020-11-11 16:44:38 SERVER -> CLIENT: 334 VXNlcm5hbWU6 2020-11-11 16:44:38 CLIENT -> SERVER: [credentials hidden] 2020-11-11 16:44:38 SERVER -> CLIENT: 334 UGFzc3dvcmQ6 2020-11-11 16:44:38 CLIENT -> SERVER: [credentials hidden] 2020-11-11 16:44:38 SERVER -> CLIENT: 235 2.7.0 ... authentication succeeded 2020-11-11 16:44:38 CLIENT -> SERVER: MAIL FROM:<[email protected]> 2020-11-11 16:44:38 SERVER -> CLIENT: 250 2.1.0 <[email protected]> sender ok 2020-11-11 16:44:38 CLIENT -> SERVER: RCPT TO:<[email protected]> 2020-11-11 16:44:38 SERVER -> CLIENT: 250 2.1.5 <[email protected]> recipient ok 2020-11-11 16:44:38 CLIENT -> SERVER: DATA 2020-11-11 16:44:38 SERVER -> CLIENT: 354 enter mail, end with "." on a line by itself 2020-11-11 16:44:38 CLIENT -> SERVER: Date: Wed, 11 Nov 2020 17:44:38 +0100 2020-11-11 16:44:38 CLIENT -> SERVER: To: Isa Dest <[email protected]> 2020-11-11 16:44:38 CLIENT -> SERVER: From: Cab LCV <[email protected]> 2020-11-11 16:44:38 CLIENT -> SERVER: Reply-To: Cab LCV reponse <[email protected]> 2020-11-11 16:44:38 CLIENT -> SERVER: Subject: Test mail Orange depuis client 2020-11-11 16:44:38 CLIENT -> SERVER: Message-ID: <[email protected]> 2020-11-11 16:44:38 CLIENT -> SERVER: X-Mailer: PHPMailer 6.1.1 (https://github.com/PHPMailer/PHPMailer) 2020-11-11 16:44:38 CLIENT -> SERVER: MIME-Version: 1.0 2020-11-11 16:44:38 CLIENT -> SERVER: Content-Type: text/html; charset=utf-8 2020-11-11 16:44:38 CLIENT -> SERVER: 2020-11-11 16:44:38 CLIENT -> SERVER: corps du mail <b>en gras!</b> 2020-11-11 16:44:38 CLIENT -> SERVER: 2020-11-11 16:44:38 CLIENT -> SERVER: . 2020-11-11 16:44:38 SERVER -> CLIENT: 250 2.0.0 r4kd2300B2c3koN034kdNw mail accepted for delivery 2020-11-11 16:44:38 CLIENT -> SERVER: QUIT 2020-11-11 16:44:38 SERVER -> CLIENT: 221 2.0.0 mwinf5d80 ME closing connection Le message a été envoyé
Franchement, plusieurs jours que je suis là dessus et je sèche !!!
Utiliser le smtp gmail impose d'autre contrainte comme le nombre de mail émis, le fait que je trouve que nous sommes déjà trop dépendant de google ...
Merci par avance à celui ou à celle qui m'apportera l'idée de génie

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

11 nov. 2020, 20:42

SERVER -> CLIENT: 250 2.0.0 ... mail accepted for delivery
Le serveur SMTP d'Orange indique qu'il a bien reçu ton message et qu'il l'a accepté pour l'envoyer.
Donc le blocage vient :
- soit du serveur SMTP d'Orange qui ne l'envoie pas pour une raison indéterminée (antispam ?)
- soit du serveur de réception qui ne le réceptionne pas, soit en le refusant directement, soit en le mettant dans un répertoire SPAM par exemple (j'imagine que tu as déjà vérifié, mais on ne sait jamais...)


Teste ton envoi vers différentes adresses de réception : @Gmail, @Yahoo, @Hotmail, etc. pour déterminer si ça le fait pour tous les fournisseurs (et donc ça voudra dire qu'il y a de grande chance que ce ne soit pas un problème à la réception, mais bien à l'émission, côté Orange)

Essaye peut-être aussi de ne pas envoyer ton message en HTML, mais en texte brut, ça limite le risque d'être pris pour du spam.
Test également l'envoi d'un message sur le mail que va te proposer https://www.mail-tester.com ça peut te permettre d'avoir une analyse du risque de spam (si Orange leur transmet bien ton mail toutefois)
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 13 Messages

11 nov. 2020, 21:23

Bonsoir,
Merci tout d'abord de passer du temps sur mon problème.
J'avais déjà réalisé des tests d'envois vers différents adresses : email gratuit et domaines enregistrés.
J'avais aussi réalisé un test permettant de voir si mon mail est considéré comme un spam mais j'avoue ne pas être certaine de tout comprendre.

Code : Tout sélectionner

Le fameux filtre anti-spam SpamAssassin. La note : -1.7. Une note en dessous de -5 est considérée comme du spam. -0.001 FREEMAIL_FROM Sender email is freemail Vous envoyez depuis un compte e-mail gratuit -0.001 HTML_MESSAGE HTML included in message Pas de panique, c'est normal si vous envoyez des e-mails au format HTML -0.635 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag Votre message devrait contenir un tag <html> -1.105 MIME_HTML_ONLY Message only has text/html MIME parts Vous devriez inclure également une version texte brut (text/plain) de votre message 0.001 RCVD_IN_MSPIKE_H2 Average reputation (+2) 80.12.242.130 listed in wl.mailspike.net [SPF] orange.fr n'autorise pas votre serveur 80.12.242.130 à utiliser [email protected] Votre message n'est pas signé avec DKIM Votre reverse DNS ne correspond pas avec votre domaine d'envoi.
Merci encore de votre analyse.

Bonne soirée.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

12 nov. 2020, 17:08

Tu as déjà 2 pistes d'amélioration mineures :
- Votre message devrait contenir un tag <html>
- Vous devriez inclure également une version texte brut (text/plain) de votre message
Pour ce dernier point ça se fait avec :
$mail->AltBody = 'Corps du mail en texte simple !';

Et si aucun de tes mails n'arrive quel que soit le serveur de réception, ça confirme le fait que c'est un problème côté Orange, donc soit tu insistes auprès d'eux, soit tu utilises un autre fournisseur de mail, soit tu installes toi-même un serveur de mail (mais c'est un peu complexe à configurer)
Quand tout le reste a échoué, lisez le mode d'emploi...