Come usare PHPMailer senza compositore?

2018-01-06 php github phpmailer

Vorrei usare l'ultima libreria di PHPMailer con require_once() invece di fare casini con Composer. Vorrei una distribuzione xcopy pura con il minimo sforzo.

Ecco cosa sto cercando di fare:

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!";
}

Fatal error: Class PHPMailer not found in [....]\EmailTester.php on line 21 il messaggio di Fatal error: Class PHPMailer not found in [....]\EmailTester.php on line 21

La riga 21 è questa: $mail = new PHPMailer;

Questa riga è solo un'ipotesi da parte mia: require_once("src/PHPMailer.php"); - chiaramente ho bisogno di includere alcuni file, ma non so dire quale.

Sto lavorando dall'esempio di Gmail su Github, che non è incluso nel download zip. Ma posso navigare su di esso in github. In quel file di esempio inizia così:

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

Non vedo alcun file autoload.php nel download zip e dopo aver cercato su Google dappertutto vedo che questo implica l'uso di Composer. Ma ci deve essere un modo per fare semplicemente un'inclusione e ottenere i file di cui ho bisogno.

Un paio di cose mi puzzle di questa libreria PHPMailer e forse GitHub in generale:

  1. Quando scarico PHP Mailer da GitHub, perché così tanti file e cartelle elencati non sono inclusi nel file zip scaricato?

inserisci qui la descrizione dell'immagine

  1. Perché fanno riferimento a autoload.php che non esiste nel download zip?
  2. Chiaramente non capisco alcune cose su Github, ma perché non fornire un esempio di codice funzionante invece di fare riferimento a dipendenze che non esistono nel download, costringendo le persone a trovarlo altrove e spero che possano capire come tornare e collegare è inserito correttamente?
  3. In questo video di YouTube intitolato Invia e-mail con PHP e Gmail , scarica la stessa zip che ho scaricato e dalla stessa posizione, ma la sua zip contiene file diversi, incluso PHPMailerAutoload.php . Perché sto ricevendo file completamente diversi rispetto a lui? Quel video è stato pubblicato il 4 marzo 2017 - quindi, meno di 1 anno fa - è cambiato davvero così tanto da allora?

In breve: come posso far funzionare PHPMailer senza dipendenze esterne e installazioni come Composer , e invece utilizzare require_once() per ottenere ciò di cui ho bisogno?

Answers

Ecco l'esempio di lavoro completo (anche se vedi alcune variabili che devono essere definite e impostate):

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!";
}

Questo ha funzionato per me, ho anche scaricato phpmailer da questo indirizzo

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';

Related