8778 sujets

Développement web côté serveur, CMS

Pages :
Modérateur
(reprise du message précédent)

Bongota a écrit :
On vient de croiser nos posts !!!
C'est donc fait comme tu le préconise, mais toujours l'erreur signalée plus haut.
Je vois que tu utilises require_once à la place de require seul ?


Pas tout a fait, tu dois charger les fichier et class en amont, une fois charger, use ne provoqueras plus d'erreur car les noms d'espaces et class seront disponibles Smiley cligne ,

Pour le require_once ça mange pas de pain Smiley cligne
Modifié par gcyrillus (26 Jan 2025 - 15:30)
Décidément, on travaille à la vitesse de la lumière. suite à ton message, je viens justement de voir que je n'avais pas mis les require en début de fichier.
Je teste.
Voici le début de mon php, là où ça coince pour le moment. Toujours la même erreur.
require_once("phpmailer/PHPMailerAutoload.php");
	//$courriel = new PHPMailer;
	require_once "PHPMailer/src/Exception.php";
	require_once "PHPMailer/src/PHPMailer.php";
	require_once "PHPMailer/src/SMTP.php";
	
	//Importer les classes PHPMailer dans l’espace de noms global 
	//Celles-ci doivent être en haut de votre script, pas à l’intérieur d’une fonction 
	use PHPMailer\PHPMailer\PHPMailer;
	use PHPMailer\PHPMailer\SMTP;
	use PHPMailer\PHPMailer\Exception;
Modérateur
Je ne comprend pas ?? Pourquoi :
require_once("phpmailer/PHPMailerAutoload.php");

Si tu n'as pas installer PHPMailer mais simplement dézipper l'archive ?
https://github.com/PHPMailer/PHPMailer a écrit :

Alternatively, if you're not using Composer, you can download https://github.com/PHPMailer/PHPMailer/archive/master.zip as a zip file, (note that docs and examples are not included in the zip file), then copy the contents of the PHPMailer folder into one of the include_path directories specified in your PHP configuration and load each class file manually:

Modifié par gcyrillus (26 Jan 2025 - 16:18)
C'est simple, je ne sais pas définir include_path correctement.
Faut-il un include pour chaque fichier php que l'on va chercher ou faut-il le déclarer pour seulement le dossier PHPMailer ?
include_path('../PHPMailer/src/SMPT.php');
	include_path('../PHPMailer/src/Exception.php');
	include_path('../PHPMailer/src/PHPMailer.php');

Je tente les chemins relatifs, absolus, j'ai toujours le même message d'erreur.
Bonjour, pourquoi un include_path au lieu de require_once??? Et pourquoi remonter d'un répertoire??

>> À la racine de mon site, il y a un répertoire qui se nomme PHPMailer.
Ou ce trouve le fichier d'appel de la librairie? Si à la racine :
require_once "PHPMailer/src/Exception.php";

Devrait être bon. Idem pour les autres fichier.

>> Faut-il un include pour chaque fichier php que l'on va chercher
Oui, pour chaque class dont le script à besoin.
Merci pour les précision, mais malgré ces changements, j'ai toujours :
Parse error: syntax error, unexpected token "use" in /public_html/mail.php on line 90

Je ne vois pas.
(Oui, PHPMailer est bien à la racine de mon site)
Bonjour, je n'ai pas d'explication précise. Si tu plaçais les use en début de fichier et non pas à la ligne 90? Cette ligne 90 n'est pas dans un block de code entre accolade?
La ligne 30 n'est absolument pas dans un bloc de code entre accolades.
J'ai tenté de mettre les use en tête de fichier, toujours la même erreur. J'ai aussi tenté de virer tout ce qu'il y avait avant ce script PHPMailer (des regex et autres contrôles). PHPMailer se trouvait de ce fait tout seul sur la page php. Rien à faire, ça n'a rien changé.
Ça me gonfle, quand j'arrive à avancer, une autre erreur apparaît plus loin. Alors que j'ai quand même pris ce script sur le net. Je laisse tomber pour le moment, je vais enlever le formulaire du site, c'est mon site, pas celui d'un client.
Ce n'est pas du tout résolu. Je suis un peu déçu, PHPMailer m'a donné dix fois plus de travail, sans résultat, que le mail natif de php que j'avais mis en place avant et que je ne connaissait pourtant pas au départ. C'était soi-disant la facilité. Smiley fache
Si quelqu'un a un modèle qui fonctionne, je veux bien voir.
Merci pour l'aide.
Modérateur
Si
Bongota a écrit :
C'est simple, je ne sais pas définir include_path correctement.
Faut-il un include pour chaque fichier php que l'on va chercher ou faut-il le déclarer pour seulement le dossier PHPMailer ?
include_path('../PHPMailer/src/SMPT.php');
	include_path('../PHPMailer/src/Exception.php');
	include_path('../PHPMailer/src/PHPMailer.php');

Je tente les chemins relatifs, absolus, j'ai toujours le même message d'erreur.

était en réponse à:
a écrit :

Je ne comprend pas ?? Pourquoi :
require_once("phpmailer/PHPMailerAutoload.php");

Si tu n'as pas installer PHPMailer mais simplement dézipper l'archive ?


Il n'y a aucun rapport mais pour un include ou un require, il faut que les chemins pointent effectivement sur quelque chose.

Si tu reprend mon post https://forum.alsacreations.com/topic-20-91277-1-Envoi-depuis-un-formulaire.html#p583059 et que tu reproduis le code et la structure du dossier X où se trouvent le script et les deux dossier dézipper de l'archive cela fonctionne. il n'y a pas de dossier phpmailer ni de fichier PHPMailerAutoload.php

Si cela ne fonctionne toujours pas (l'exemple) et que tu utilise un editeur de code qui colorise ton code, tu dois forcément voir si il y a une typo avec la colorisation qui devient incohérente du reste..
a écrit :
Parse error: syntax error, unexpected token "use" in /public_html/mail.php on line 90
ne fait aucun doute que tu as une erreur de syntaxe dans ton code en amont de la ligne 90. un point virgule ; manquant en fin de ligne ? mauvaise syntaxe sur un commentaire qui fait un retour à la ligne ? ... encore une bizarrerie dans un copié/collé d'apostrophe ? une apostrophe qui devrait être échappée ...

Fait ton test a partir d'un fichier simple et uniquement sur l'envoi d'un mail test avec un seul mot.
Une fois que PHPMailer t’envoie bien ton mail test à partir de ton compte mail, ajoute le reste et tu trouveras qui fait coincer quoi , évite d'utiliser un compte gmail. il y a beaucoup d'exemples obsolète car gmail à tendance à rendre compliqué et à modifié l'utilisation de sa messagerie de cette façon , les aides de Google ne sont parfois pas claires non plus, obsolètes ou incomplètes.
Perso je me sert tout simplement du service de messagerie de mon nom de domaine et pas d'un des comptes de messagerie connus et utiliser par tout le monde.

Dernière infos, je le fais depuis un hébergement en ligne avec des certificats ssl valides. Depuis mon serveur local, les demandes de connexion au serveur de messagerie sont bien reconnue et le mot de passe accepté mais la connexion est systématiquement refusé pour des raisons de sécurités. raccourci vulgaire: tout est bon sauf que serveur inconnu, circulez, il n'y a rien à faire ici. Smiley smile

cdt
Modifié par gcyrillus (27 Jan 2025 - 21:21)
On se répète mais l'instruction use doit être utilisé dans le contexte le plus externe du script (le contexte global).
https://www.php.net/manual/fr/language.namespaces.importing.php#language.namespaces.importing.scope
Comme on ne sait toujours pas ce que contient ton fichier avant la ligne 90, impossible de t'aider davantage.

Use est utilisé uniquement pour créer un alias et/ou pour éviter de saisir le nom complet de la classe à chaque utilisation.
Si vraiment tu bloques avec les instructions use, supprimes les et utilise le nom complet des classes :
// use PHPMailer\PHPMailer\PHPMailer;

$courriel = new PHPMailer\PHPMailer\PHPMailer();
J’ai pas mal avancé, mais comme toujours avec un script qui ne fonctionne pas, il faudrait noter toutes les petites erreurs trouvées, afin de savoir laquelle était fatale.
Une chose est certaine, j’avais fermé un } que j’avais placé après des commentaires. Le remettre en place a éliminé l’erreur sur les use. Une autre erreur est apparue ensuite un peu plus bas dans le script, sur
$courriel->isSMTP();

Une variable non définie d’après le message d’erreur. Ajouter dans les paramètres du serveur
$courriel = new PHPMailer(true);

a réglé cette erreur.
Maintenant, j’en suis à zéro erreurs sur le php mais juste "Votre message n’a pas été expédié". Ce qui me rassure, il me reste la dernière étape.
J'ai installé
$courriel->SMTPDebug = 2; 

et le message actuel est :
SMTP Error: Could not connect to SMTP host. Failed to connect to server
J'ai bien vérifié chez l'hébergeur le port SMTP pour l'ecryption TLS.
Modifié par Bongota (28 Jan 2025 - 17:58)
Je vai mettre résolu pour ce qui a été ce problème de php.
J'ouvrirai un nouveau ticket, celui-ci est à 30 !
J'ai réussi à envoyer un message par le formulaire. C'était un problème de port, qui n'est pas le même chez l'hébergeur pour le TLS.
Il me reste quelques questions au sujet du formulaire lui-même.
- Impossible d'envoyer le formlulaire sur l'adresse mail du compte chez l'hébergeur. Il faut que je prenne une autre adresse mail pour le faire. Ici :
//Destinataires
$courriel->setFrom("bob@free.fr", "Mailer");
		$courriel->addAddress("nom_mail@free.fr", "Mailer");

C'est étonnant que sur le même domaine, on ne puisse pas envoyer un mail.
Aussi, j'aurais à approfondir les différences entre require et include.
Merci pour l'aide. Smiley smile
Modérateur
Bonjour,

Pour déboguer ta connexion ,
ajoute
	$courriel->SMTPDebug = 3;

aprés
	$courriel->isSMTP(); // Set mailer to use SMTP

Tu vas avoir le détails de ce qu'il se passe entre la tentative de connexion de ton script et ton serveur de messagerie.

Pour la connexion, tu peut aussi essayer tls au lieu de ssl si la connexion est encore refusée:
	$courriel->Host =gethostbyname('tls://smtp-XXX') ; // Specify main and backup SMTP servers
	$courriel->SMTPSecure = 'tls'; // Enable TLS encryption, ssl also accepted

smtp-XXX est ton adresse smtp .

cdt
Modifié par gcyrillus (29 Jan 2025 - 09:59)
$courriel->SMTPDebug = 3;

était déjà présent, mais à 2. 3 semble donner plus d'infos.
$courriel->isSMTP();

était aussi déjà présent.
Je vais voir ça tranquillement, au moins, il s'agit maintenant du contact avec le serveur, plus vraiment de php.