Как я могу использовать PHPMailer для отправки электронных писем с фреймворком themosis / wordpress? - PullRequest
0 голосов
/ 10 октября 2019

У меня есть сайт, который использует фреймворк (документация здесь) . Платформа WordPress, основанная на laravel, но я не совсем понимаю, как работают электронные письма.

Прямой вопрос: как я могу использовать PHPMailer для отправки электронных писем?

В настоящее время и для целей тестирования я хочу, чтобы электронное письмо отправлялось сразу после загрузки страницы, поэтому мой метод контроллера выглядит следующим образом:

<?php

namespace Theme\Controllers;

use Themosis\Route\BaseController;
use Phpmailer\PHPMailer;

class OtherController extends BaseController {
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = 'tls';
    $mail->SMTPAuth = true;
    $mail->Username = "My username";
    $mail->Password = "mypassword";
    $mail->setFrom('fromAddress@gmail.com', 'The name');
    $mail->addReplyTo('fromAddress@gmail.com', 'The name');
    $mail->addAddress('toAddress@gmail.com', 'Address');
    $mail->Subject = 'Contact us form sent';
    $mail->Body = 'This is a plain-text message body';        

    return "Email sent";
}

Я установил PHPMailer, используя composer, согласноих документация здесь .

Когда я нажимаю на ссылку, я получаю следующую ошибку:

Fatal error: Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Class 
'Phpmailer\PHPMailer' not found in 
/var/www/html/htdocs/content/themes/amarula/resources/controllers/OtherController.php on line 
141

Хотя сообщение об ошибке, я предполагаю, что проблема в том, какЯ пытаюсь получить доступ к классу почтовой программы, который находится в папке vendor.

От корня моего приложения до моего контроллера структура выглядит следующим образом:

enter image description here

В конечном итоге класс PHPMailer находится в папке поставщика, как показано в приведенной ниже структуре:

enter image description here

Как я могу получить доступ к этому классу и отправить письмо через мой конТроллингист

Ответы [ 2 ]

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

У вас есть этот импорт:

use Phpmailer\PHPMailer;

Это не правильно;должно быть:

use PHPMailer\PHPMailer\PHPMailer;

Причина этого "тройного имени" заключается в том, что он представляет класс PHPMailer в пакете PHPMailer, принадлежащем организации PHPMailer.

Еще одна вещь, котораяважно - вы не будете получать никаких сообщений, потому что вы никогда не звоните $mail->send().

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

Во-первых, PHPmailer \ PHPMailer вместо Phpmailer \ PHPMailer (https://github.com/PHPMailer/PHPMailer/blob/master/src/PHPMailer.php)

Во-вторых, вы пытаетесь быстро найти PHPMailer в пространстве имен вашего кода. controllers/OtherController/PHPMailer/PHPMailer.php И, конечно, он не завершается.

Вы должны использовать \PHPMailer\PHPMailer, чтобы найти класс по абсолютному пути

Для получения дополнительной информации читайте о пространствах имен - https://www.php.net/manual/en/language.namespaces.rationale.php

...