Я начал со следующего:
composer require phpmailer/phpmailer
После размещения необходимо один раз
require_once "../vendor/autoload.php";
Затем
$mail = new PHPMailer;
Вот где PHP имеет фатальную ошибку:
Неустранимая ошибка: класс 'PHPMailer' не найден
Ниже приведен мой код: use PHPMailer \ PHPMailer \ PHPMailer;использовать PHPMailer \ PHPMailer \ Exception;
# require php mailer
require_once "../vendor/autoload.php";
//PHPMailer Object
$mail = new PHPMailer;
$mail->isSMTP();
$mail->SMTPDebug = 3;
$mail->SMTPAuth = true;
// $mail->SMTPSecure = "ssl";
$mail->SMTPSecure = "tls";
$mail->Host = "smtp-relay.gmail.com";
$mail->Port = "587";
$mail->Username = "some gmail address";
$mail->Password = "some password";
$mail->SetFrom("info@example.com");
$mail->Subject = $subject;
$mail->Body = $htmlMessage;
$mail->AddAddress($recpEmails);
$mail->Send();
$htmlMessage
- это переменная, содержащая как простой текст, так и HTML с mime_boundary, но она никогда не попадает туда, так как не может найти PHPMailer.
Это то, чтоЯ попытался сделать, чтобы решить эту проблему:
Я создал другой каталог с именем PHPMailer в том же каталоге, что и вендор, этот новый каталог, содержащий содержимое phpmailer / phpmailer / src, но он все еще не может найти PHPMailerучебный класс.
Нужно ли мне также запрашивать файл PHPMailer.php?Я думал, что именно это и должно было делать автозагрузка?
Заранее спасибо
ОБНОВЛЕНИЕ
После того, как @Phil в комментариях указал, что мне не хватает пространства имен use,Я обновил код, который привел к новой ошибке:
Неустранимая ошибка: необработанное исключение «PHPMailer \ PHPMailer \ Exception» с сообщением «Ошибка подключения SMTP ()
Я прочитал, что $mail->SMTPDebug = 3;
дает более подробную информацию, которая выявила следующее:
2019-02-11 01:51:57 Соединение: открытие к ssl: //smtp-relay.gmail.com: 587, timeout = 300, options = array ()
2019-02-11 01:51:58 Ошибка подключения.Ошибка № 2: stream_socket_client (): сбой операции SSL с кодом 1. OpenSSL Сообщения об ошибках: ошибка: 140770FC: процедуры SSL: SSL23_GET_SERVER_HELLO: неизвестный протокол [v2018 / assets / api / vendor / phpmailer / phpmailer / src / SMTP.php строка 327]
2019-02-11 01:51:58 Ошибка подключения.Ошибка № 2: stream_socket_client (): не удалось включить шифрование строки [v2018 / assets / api / vendor / phpmailer / phpmailer / src / SMTP.php 327]
2019-02-11 01:51:58 Ошибка подключения.Ошибка № 2: stream_socket_client (): невозможно подключиться к ssl: //smtp-relay.gmail.com: 587 (неизвестная ошибка) [v2018 / assets / api / vendor / phpmailer / phpmailer / src / SMTP.php строка 327]
2019-02-11 01:51:58 ОШИБКА SMTP: Не удалось подключиться к серверу: (0)
Ошибка подключения SMTP ().https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting
Затем я прочитал в другом сообщении , чтобы изменить следующие настройки, что позволило мне увидеть, что он подключается, но он не принимает мои учетные данные:
$mail->SMTPSecure = "tls";
2019-02-11 02:00:26 SERVER -> CLIENT: 535-5.7.8 Имя пользователя и пароль не принимаются.Подробнее на 535 5.7.8 https://support.google.com/mail/?p=BadCredentials f2sm562482otb.6 - gsmtp
2019-02-11 02:00:26 ОШИБКА SMTP: Сбой команды пароля: 535-5.7.8 Имя пользователя и пароль не приняты.Подробнее на 535 5.7.8 https://support.google.com/mail/?p=BadCredentials f2sm562482otb.6 - gsmtp
Я не знаю, что делать на данный момент, так как я знаю, что это учетные данные для моего Gmailучетная запись.Нужно ли иметь бизнес-аккаунт Gmail или что-то в этом роде?
Еще одно обновление
Я использовал неверный пароль.После ввода правильного пароля я начал получать следующее сообщение:
2019-02-11 14:33:44 СЕРВЕР -> КЛИЕНТ: 550-5.7.0 Почтовый ретранслятор запрещен [172.117.2.44].Неверные учетные данные для ретрансляции для 550-5.7.0 одного из доменов в: (получено из HELO и MAIL FROM) .550-5.7.0 Электронное письмо отправляется с домена или IP-адреса, который не зарегистрирован в 550-5.7.0 вваша учетная запись G Suite.Пожалуйста, войдите в свою учетную запись G Suite и убедитесь, что IP-адрес отправляющего устройства зарегистрирован в пределах 550-5.7.0 в настройках SMTP-ретрансляции G Suite.Для получения дополнительной информации, пожалуйста, посетите 550 5.7.0 https://support.google.com/a/answer/6140680#maildenied h192sm1484247qke.14 - gsmtp
Оказывается, мне нужно иметь учетную запись G-Suite, чтобы использовать smtp-relay.gmail.com.У меня есть только обычный аккаунт Gmail.Когда я перешел на smtp.gmail.com, я вернулся к ошибочным учетным данным.Я просто подожду подтверждения моей учетной записи G-Suite и обновлю результаты.