PHP-код ломается при создании нового класса PHPMailer в cPanel - PullRequest
0 голосов
/ 05 октября 2019

Я пытаюсь использовать PHPMailer для отправки электронной почты, и я пишу PHP в cPanel через Bluehost. Ниже мой код пока. Файл находится в папке PHPMailermaster вместе с папкой src.

Код не достигает строки «new PHPMailer» (поэтому, когда я его запускаю, страница будет отображать «Достигнута контрольная точка 1», но не «Достигнут контрольный пункт 2 ").

Раньше я никогда не использовал PHP, поэтому вполне возможно, что я делаю PHP неправильно, и кажется, что почти все учебные пособия по этому поводу относятся к более старым версиям PHPMailer, поэтому все, что ядействительно надо уйти с их страницы GitHub. Мой код в основном скопирован оттуда с небольшой модификацией путей use. Я также прокомментировал автозагрузчик, потому что у меня его нет, и я не уверен, что он делает.

<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use src\PHPMailer;
use src\SMTP;
use src\Exception;

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

// Load Composer's autoloader
// require 'vendor/autoload.php';

echo "Reached checkpoint 1";

// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

echo "Reached checkpoint 2";

try {
    //Server settings
    $mail->SMTPDebug = 1;                      // Enable verbose debug output
    $mail->isSMTP();                                            // Send using SMTP
    $mail->Host       = 'smtp.gmail.com';                    // Set the SMTP server to send through
    $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    $mail->Username   = '<my username>';                     // SMTP username
    $mail->Password   = '<my password>';                               // SMTP password
    $mail->SMTPSecure = 'ssl';         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
    $mail->Port       = 465;                                    // TCP port to connect to

    //Recipients
    $mail->setFrom('<my email>@gmail.com');
    $mail->addAddress('<test email>@gmail.com');     // Add a recipient
    // Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $mail->Body    = 'This is the HTML message body <b>in bold!</b>';
    $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

Выдается следующее сообщение об ошибке (adminusername - просто заполнитель для моего имени пользователя cpanel):

Fatal error: Uncaught Error: Class 'src\PHPMailer' not found in /home1/<adminusername>/public_html/PHPMailermaster/mail.php:21 Stack trace: #0 {main} thrown in /home1/<adminusername>/public_html/PHPMailermaster/mail.php on line 21

Ответы [ 2 ]

1 голос
/ 05 октября 2019

Проверьте условие 'namespace' в файле "src / PHPMailer.php". Вероятно, класс PHPMailer не входит в пространство имен src.

Вам следует использовать composer для его установки, после этого раскомментируйте строку require 'vendor/autoload.php'; и используйтечто-то вроде:

use PHPMailer\PHPMailer\PHPMailer;

require 'vendor/autoload.php';

$mail = new PHPMailer(true);

Больше информации в https://github.com/PHPMailer/PHPMailer

0 голосов
/ 05 октября 2019

Мне кажется, я решил проблему. Чтобы использовать PHPMailer без Composer, я создал каталог include_dory, поместил туда папку PHPMailermaster и добавил ее в php.ini, используя метод this . Я импортировал необходимые файлы классов примерно так:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use PHPMailer\PHPMailer\SMTP;
require '../include_directory/PHPMailermaster/src/Exception.php';
require '../include_directory/PHPMailermaster/src/PHPMailer.php';
require '../include_directory/PHPMailermaster/src/SMTP.php';

И это сработало. Я думаю, что проблема заключалась в том, как я импортировал и организовывал файлы.

...