Почему я получаю эту ошибку при попытке отправить письмо для активации новой учетной записи пользователя с помощью phpmailer - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь понять, почему мой метод субъекта в index.php вызывает ошибку не быть определенным. Я использую phpmailer 5.2.7 с php 7.2 и wampserver 3.1.7

// здесь мойрасширенный класс из phpmailer //

<?php
include('phpmailer.php');

class Mail extends PhpMailer
{

    // Set default variables for all new objects

    public $From     = 'xxxxxx@gmail.com';
    public $FromName =  MM;
    public $Host     = 'smtp.gmail.com';
    public $Mailer   = 'smtp';
    public $SMTPAuth =  true;
    public $Username = 'xxxxxxx@gmail.com';
    public $Password = 'xxxxxx';
    public $SMTPSecure = 'ssl';
    public $WordWrap = 75;



    public function subject($subject)
    {
        $this->Subject = $subject;
    }

    public function body($body)
    {
        $this->Body = $body;
    }

    public function send()
    {
        $this->AltBody = strip_tags(stripslashes($this->Body))."\n\n";
        $this->AltBody = str_replace("&nbsp;", "\n\n", $this->AltBody);
        return parent::send();
    }
}

и вот часть моей индексной страницы, где я определил свои переменные

$to = $_POST['email'];
            $subject = "Registration Confirmation";
            $body = "<p>Thank you for registering at demo site.</p>
            <p>To activate your account, please click on this link: <a href='".DIR."activate.php?x=$id&y=$activasion'>".DIR."activate.php?x=$id&y=$activasion</a></p>
            <p>Regards Site Admin</p>";

            $mail = new PHPMailer(true);
            $mail->setFrom(SITEEMAIL);
            $mail->addAddress($to);
            $mail->subject($subject);
            $mail->body($body);
            $mail->send();

            //redirect to index page
            header('Location: index.php?action=joined');
            exit;

1 Ответ

0 голосов
/ 02 мая 2019

Во-первых, почему вы используете версию PHPMailer, которая буквально на несколько лет устарела? Получите последнюю версию , в которой есть новые функции, исправлены ошибки и меньше дыр в безопасности.Во время обновления рассмотрите возможность перехода на использование composer для управления вашими зависимостями.

Проблема, с которой вы столкнулись, довольно проста: вы создали подкласс, который добавляет метод subject(), но ваш экземпляр 'созданный в вашем скрипте исходный класс PHPMailer, а не ваш подкласс.Сделайте это вместо этого:

$mail = new Mail(true);

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

Хотя это хорошая идея для создания подклассов, чтобы легко установить значения по умолчанию, она также приглашает вас проверить учетные данные в вашем репо-источнике, что обычно является плохой идеей.Лучше использовать ваш дочерний класс для чтения этих значений из файла среды («точка env»), используя пакет типа this .

...