web-dev-qa-db-fra.com

Comment utiliser PHPMailer sans compositeur?

J'aimerais utiliser la dernière bibliothèque PHPMailer avec require_once() au lieu de jouer avec Composer. J'aimerais un déploiement xcopy pur avec un minimum de tracas.

Voici ce que je tente de faire:

require_once("src/PHPMailer.php");
$mail = new PHPMailer;
$mail->isSMTP(); 
$mail->SMTPDebug = 2;
$mail->Host = "smtp.gmail.com"; 
$mail->Port = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth = true;
$mail->Username = $smtpUsername;
$mail->Password = $smtpPassword;
$mail->setFrom($emailFrom, $emailFromName);
$mail->addAddress($emailTo, $emailToName);
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->msgHTML("test body"); 
$mail->AltBody = 'HTML messaging not supported';

if(!$mail->send()){
    echo "Mailer Error: " . $mail->ErrorInfo;
}else{
    echo "Message sent!";
}

Je reçois le message d'erreur: Fatal error: Class PHPMailer not found in [....]\EmailTester.php on line 21

La ligne 21 est la suivante: $mail = new PHPMailer;

Cette ligne est juste une supposition de ma part: require_once("src/PHPMailer.php"); - de toute évidence, je dois inclure un ou plusieurs fichiers, mais je ne peux pas dire lequel.

Je travaille à partir de l’exemple gmail sur github qui n’est pas non plus inclus dans le téléchargement Zip. Mais je peux y accéder en github. Dans cet exemple de fichier, cela commence comme ceci:

use PHPMailer\PHPMailer\PHPMailer;
require '../vendor/autoload.php';
$mail = new PHPMailer;

Je ne vois aucun fichier autoload.php dans le téléchargement Zip, et après avoir cherché Google, je vois que cela implique d’utiliser Composer. Mais il doit y avoir un moyen de simplement faire une inclusion et de récupérer les fichiers dont j'ai besoin.

Quelques petites choses me déroutent au sujet de cette bibliothèque PHPMailer et peut-être de github en général:

  1. Lorsque je télécharge PHP Mailer depuis GitHub, pourquoi tant de fichiers et de dossiers répertoriés ne sont-ils pas inclus dans le fichier Zip téléchargé?

 enter image description here

  1. Pourquoi font-ils référence à autoload.php qui n'existe pas dans le téléchargement Zip?
  2. Il est clair que je ne comprends pas certaines choses à propos de github, mais pourquoi ne pas fournir un exemple de code fonctionnel au lieu de faire référence à des dépendances qui n'existent pas dans le téléchargement, forçant les gens à le trouver ailleurs et espérant pouvoir comprendre comment revenir est-ce correctement?
  3. Dans cette vidéo YouTube intitulée Envoyer des e-mails avec PHP & Gmail , il télécharge le même fichier Zip que j'ai téléchargé et se trouve au même endroit, mais son fichier Zip contient différents fichiers, dont PHPMailerAutoload.php. Pourquoi ai-je des fichiers complètement différents de ceux qu'il reçoit? Cette vidéo a été publiée le 4 mars 2017 - donc, il y a moins d'un an - a-t-elle tellement changé depuis?

En résumé: comment faire fonctionner PHPMailer sans dépendances externes et installations telles que Composer, et utiliser plutôt require_once() pour obtenir ce dont j'ai besoin?

4
HerrimanCoder

Voici l'exemple de travail complet (bien que vous voyiez quelques variables qui doivent être définies et définies):

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'src/Exception.php';
require 'src/PHPMailer.php';
require 'src/SMTP.php';

$mail = new PHPMailer;
$mail->isSMTP(); 
$mail->SMTPDebug = 2; // 0 = off (for production use) - 1 = client messages - 2 = client and server messages
$mail->Host = "smtp.gmail.com"; // use $mail->Host = gethostbyname('smtp.gmail.com'); // if your network does not support SMTP over IPv6
$mail->Port = 587; // TLS only
$mail->SMTPSecure = 'tls'; // ssl is depracated
$mail->SMTPAuth = true;
$mail->Username = $smtpUsername;
$mail->Password = $smtpPassword;
$mail->setFrom($emailFrom, $emailFromName);
$mail->addAddress($emailTo, $emailToName);
$mail->Subject = 'PHPMailer GMail SMTP test';
$mail->msgHTML("test body"); //$mail->msgHTML(file_get_contents('contents.html'), __DIR__); //Read an HTML message body from an external file, convert referenced images to embedded,
$mail->AltBody = 'HTML messaging not supported';
// $mail->addAttachment('images/phpmailer_mini.png'); //Attach an image file

if(!$mail->send()){
    echo "Mailer Error: " . $mail->ErrorInfo;
}else{
    echo "Message sent!";
}
8
HerrimanCoder

Cela a fonctionné pour moi, j'ai également téléchargé phpmailer à partir de cette adresse.

https://sourceforge.net/projects/phpmailer/

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;

require '/source/PHPMailer2/src/Exception.php';
require '/source/PHPMailer2/src/PHPMailer.php';
require '/source/PHPMailer2/src/SMTP.php';
0
YakovGdl35