PHPMailer выдает ошибку при поиске PHPMailer \ PHPMailer \ Exception, которого нет в моем коде? - PullRequest
0 голосов
/ 19 декабря 2018

Нужна помощь с кодом PHPMailer.Ниже приведена ошибка из журнала, которая появляется при отправке формы.Прочитал все посты, ссылающиеся на эту же ошибку, но моя проблема в другом, поскольку мне не разрешено использовать Composer на общем сервере моей хостинговой компании.Я следую за ручной установкой файлов.

Вот ошибка файла журнала:

[18-Dec-2018 22:30:51 UTC] PHP Fatal error:  Uncaught Error: Class 'PHPMailer\PHPMailer\Exception' not found in /home1/example/public_html/PHPMailer/src/PHPMailer.php:1720
Stack trace:
#0 /home1/example/public_html/PHPMailer/src/PHPMailer.php(1518): PHPMailer\PHPMailer\PHPMailer->mailSend('Date: Tue, 18 D...', '<html>".$feedba...')
#1 /home1/example/public_html/PHPMailer/src/PHPMailer.php(1352): PHPMailer\PHPMailer\PHPMailer->postSend()
#2 /home1/example/public_html/adoption/sendEmailTest.php(22): PHPMailer\PHPMailer\PHPMailer->send()
#3 {main}
  thrown in /home1/example/public_html/PHPMailer/src/PHPMailer.php on line 1720

Вот код из строк 1719-1721, но этот файл OOB для PHPMailer:

if (!$result) {
            throw new Exception($this->lang('instantiate'), self::STOP_CRITICAL);
        }

Вот мой код php файла:

<?php

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

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

if(isset($_POST['submit'])){    
    $email = $_POST['email'];
    $name = $_POST['name'];
    $feedback = $_POST['feedback'];

    $mail = new PHPMailer();

    $mail->setFrom('myname@example.org', 'Org Name');
    $mail->addReplyTo($email, $name);
    $mail->addAddress('myname@example.org', 'Org Name');

    $mail->isHTML(true);

    $mail->Subject = 'Application Submission';  
    $mail->Body = '<html>".$feedback."</html>';

    if (!$mail->send())
    {
        echo $mail->ErrorInfo;
    }
}

?>

Вот код формы, поэтому он у вас есть:

    <form action="sendEmailTest.php" method="post" name="adoption">

        <table width="700" border="0" cellspacing="3" cellpadding="3">
            <tr>
                <td colspan="2" bgcolor="#FFFFCC"><h2><strong>Form Test</strong></h2></td>
            </tr>
            <tr>
                <td width="183"><label>Name: </label></td>
                <td width="496"><input name="name" type="text" required="required" id="name" value="" size="75" /></td>
            </tr>
            <tr>
                <td><label>Email Address: </label></td>
                <td><input type="text" name="email" id="email" value="" size="75" /></td>
            </tr>
            <tr>
                <td><label>Feedback</label></td>
                <td><textarea name="feedback" id="feedback" cols="45" rows="5"></textarea></td>
            </tr>
            <tr>
                <td><input type="submit" value="Submit Form" name="submit"/></td>
            </tr>
        </table>     
    </form>

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

В вашем коде отсутствуют необходимые классы при запуске.

В вашем примере:

<?php

use PHPMailer\PHPMailer\PHPMailer;
require '../PHPMailer/src/PHPMailer.php';

Вам необходимо добавить:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

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

Этодолжен решить ошибки PHP, которые вы упомянули в своем посте.

0 голосов
/ 19 декабря 2018

Если вы не используете автозагрузку, вам придется требовать и использовать любые классы, используемые в вашем коде.

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

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

Что касается вашего комментария к вопросу, вы не используете исключения в вашемкод, но класс PHPMailer использует их внутри.Оставив аргумент исключений контроллера пустым, вы вообще не отключите исключения PHPMailer.Если вы посмотрите источник, вы увидите некоторые места, где throw new Exception... обернут в if ($this->exceptions) { }, и другие места, где он их выбрасывает независимо.

Исключение, которое вы получили после добавления операторов require / useна самом деле это не новая проблема, это исключение, которое изначально пыталось вызвать, когда вы получили ошибку «class not found».

...