webentwicklung-frage-antwort-db.com.de

Wie benutze ich PHPMailer ohne Composer?

Ich möchte die neueste PHPMailer - Bibliothek mit require_once() verwenden, anstatt mit Composer herumzuspielen. Ich möchte eine reine Xcopy-Bereitstellung mit minimalem Aufwand.

Folgendes versuche ich zu tun:

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

Ich erhalte die Fehlermeldung: Fatal error: Class PHPMailer not found in [....]\EmailTester.php on line 21

Zeile 21 ist dies: $mail = new PHPMailer;

Diese Zeile ist nur eine Vermutung meinerseits: require_once("src/PHPMailer.php"); - Natürlich muss ich einige Dateien oder Dateien einfügen, aber ich kann nicht sagen, welche.

Ich arbeite vom gmail-Beispiel an github , das auch nicht im Zip-Download enthalten ist. Aber ich kann in github dahin navigieren. In dieser Beispieldatei beginnt es so:

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

Ich sehe keine autoload.php-Datei im Zip-Download, und nach dem googeln sehe ich, dass dies die Verwendung von Composer impliziert. Es muss jedoch eine Möglichkeit geben, einfach ein Include auszuführen und die benötigten Dateien abzurufen.

Ein paar Dinge rätseln mich in Bezug auf diese PHPMailer-Bibliothek und vielleicht github im Allgemeinen:

  1. Warum werden beim Herunterladen von PHP Mailer von GitHub so viele aufgelistete Dateien und Ordner nicht in der heruntergeladenen ZIP-Datei enthalten?

 enter image description here

  1. Warum verweisen sie auf autoload.php, der im Zip-Download nicht vorhanden ist?
  2. Klar verstehe ich nicht ein paar Dinge über github, aber warum sollte ich nicht ein funktionierendes Codebeispiel bereitstellen, anstatt auf Abhängigkeiten zu verweisen, die im Download nicht vorhanden sind. Die Leute werden gezwungen, es an anderer Stelle zu finden und zu hoffen, dass sie herausfinden können, wie sie zurückkommen und stecken können ist es richtig?
  3. In diesem YouTube-Video mit dem Titel Emails senden mit PHP & Gmail lädt er dieselbe heruntergeladene Zip-Datei von demselben Speicherort herunter. Seine Zip-Datei enthält jedoch verschiedene Dateien, einschließlich PHPMailerAutoload.php. Warum bekomme ich völlig andere Dateien als er? Das Video wurde am 4. März 2017 veröffentlicht - also vor weniger als einem Jahr - hat es sich seitdem wirklich sehr verändert?

Zusammenfassend: Wie kann ich PHPMailer ohne externe Abhängigkeiten und Installationen wie Composer zum Laufen bringen und stattdessen require_once() verwenden, um das zu bekommen, was ich brauche?

4
HerrimanCoder

Hier ist das vollständige Funktionsbeispiel (obwohl Sie einige Variablen sehen, die definiert und festgelegt werden müssen):

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

Das funktionierte für mich, ich habe auch phpmailer von dieser Adresse heruntergeladen

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