8780 sujets

Développement web côté serveur, CMS

Bonjour,
je reviens sur PHPMail.
Tout est bon, il n'y a plus d'erreur php, j'ai réglé le problème du port sécurisé en TLS et je peux envoyer maintenant un message sur le domaine de l'hébergeur, ce qui n'était pas le cas avant.
Reste que quand j'expédie le formulaire, il y a un long message d'erreur signalant "Votre message n'a pas été expédié", alors que plus bas un autre message dit "votre message a bien été envoyé". Et effectivement, je le reçois sur le mail désigné.
Autant le message d'envoi est celui écrit dans echo de php, autant celui d'erreur ne l'est pas. Il vient de la machine, quelque part.
Le formulaire fonctionne, mais je ne peux laisser une telle erreur, qui va effrayer n'importe quel visiteur.
Message d'erreur d'un texte non écrit dans echo (et c'est en français).
Votre message n'a pas été expédié 2025-02-01 13:37:50 CLIENT -> SERVER: AUTH LOGIN
2025-02-01 13:37:50 CLIENT -> SERVER: [credentials hidden]
2025-02-01 13:37:50 CLIENT -> SERVER: [credentials hidden]
..................................................Ici une longue liste de messages et dont aucun ne signale une erreur. Et à la fin) :
Votre message a bien été envoyé

Smiley hum
Modérateur
Bonjour,

sans le code, difficile de trouver où ou comment tu pose ta condition d'erreur qui te renvoie "Votre message n'a pas été expédié";
Puis les "2025-02-01 13:37:50 CLIENT ->...." , proviennent probablement d'un SMTPDebug que tu as gardé dans le script .

Cdt
Voilà le code php complet. Excepté l'erreur dont je parle, le formulaire fonctionne, je le reçoit bien sur l'adresse mail située sur le domaine de l'hébergeur. Tant que j'ai cette erreur, je ne vais pas plus loin et n'ajoute pas d'autres fonctions (envoi de pièces jointes, de html, cc, Bcc)

<?php
	require_once "PHPMailer/src/Exception.php";
	require_once "PHPMailer/src/PHPMailer.php";
	require_once "PHPMailer/src/SMTP.php";
	
	use PHPMailer\PHPMailer\PHPMailer;
	use PHPMailer\PHPMailer\SMTP;
	use PHPMailer\PHPMailer\Exception;
	
	// Envoi de l’adresse électronique avec PHPMailer
    
    $email = $_POST["email"];
    $message = $_POST["message"];
	
	// Initialiser PHPMailer
	$courriel = new PHPMailer(true);
	try {
		//Paramètres du serveur
		$courriel->SMTPDebug = 1;			        
		$courriel->isSMTP();                                            // Envoi via SMTP
		$courriel->Host       = "mail-b.easy-hebergement.net";          //Définir le serveur SMTP pour envoyer via		
		$courriel->SMTPAuth   = true;                                   //Activer l’authentification SMTP 
		$courriel->Username   = "nom_utilisateur";              	//nom d’utilisateur SMTP 
		$courriel->Password   = "le_pass";                       	// Mot de passe SMTP
		$courriel->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            //Activer le chiffrement TLS implicite 
		$courriel->Port       = 465;                                   //Port TCP auquel se connecter ; utilisez 587 si vous avez défini `SMTPSecure = PHPMailer?::ENCRYPTION_STARTTLS` (993, c’est celui de l’hébergeur)
		
		//Destinataires
		$courriel->setFrom("toctoc@free.fr", "Mailer");
		$courriel->addAddress("mon_mail_chez_l'hébergeur", "Mailer");     	 //Ajouter un destinataire
				
		//Contenu
		$courriel->isHTML(true);                                						 
		$courriel->CharSet = "UTF-8";
		$courriel->Encoding = "base64";
		$courriel->Subject = "Envoi depuis le formulaire";
		$courriel->Body    = "Ceci est le corps du message HTML <b>en gras????!</b>";
		$courriel->AltBody = $message;
		
		$courriel->send();
		echo "Votre message a bien été envoyé";
	}
	catch (Exception $e) {
		echo "Votre message n’a pas pu être envoyé. Erreur?: {$courriel->ErrorInfo}";
	}
?>
Modérateur
Rebonjour,

tu peut commenter cette ligne sur le site en ligne :
// $courriel->SMTPDebug = 1;	


Tu ne devrais plus avoir de messages.

Cdt
J’avais déjà essayé ça hier. Effectivement, il n’y a plus les longs messages d’erreur.
Mais il y en a un "Votre message n’a pas été expédié". Alors qu’il a bien été envoyé et reçu sur la boîte?!!!
Et cette phrase ne provient pas de echo de php, où les deux alertes d’envoi ne sont pas rédigées avec les même mots.
D'autre part, est-ce que ces quelques lignes dans le corps d'un message reçu du formulaire me confirment que le mail est encrypté:
Received: from non_domaine.fr (node07.cluster1.easy-hebergement.net [91.238.72.79])
	(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)
	 key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256)
	(No client certificate requested)
	(Authenticated sender: mon_mail@domaine.fr)

Modifié par Bongota (02 Feb 2025 - 17:51)
Bonjour,

Sur ton précédent sujet, tu avais déjà le message "Votre message n'a pas été expédié" et tu avais à priori environ 90 lignes de code en plus avant l'envoi du mail.
On peut donc supposer que le message est affiché via le reste du code que tu n'a pas partagé.

Au passage, ton utilisation de try/catch est contre-productive dans ton code : en cas d'exception, celle-ci ne sera jamais loguée et tu ne seras jamais informé des erreurs en prod.
Le plus simple dans ton cas est de ne pas utiliser try/catch : en cas d'exception, celle-ci sera convertie en erreur fatale par PHP et l'erreur sera ainsi loguée.
https://www.julp.fr/blog/posts/43-mythe-php-4-il-faut-mettre-un-try-catch
Effectivement, et je lis sur le lien que tu as donné que ça peut poser de sérieux problèmes de sécurité. C'est fait, je l'ai enlevé.
Il faut que je revoie la portion de code php qui est situé avant cette partie phpmail. C'est une partie pour détecter et interdire certains mots. Elle fonctionne très bien dans sa détection des mots interdits, mais apporte justement ce message "Votre mail n'a pas été expédié". Si je l'enlève, tout devient normal.
Je continue.