PHP пытается отправить почту безопасно - не может найти класс PHPMailer - PullRequest
0 голосов
/ 11 февраля 2019

Я начал со следующего:

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 и обновлю результаты.

1 Ответ

0 голосов
/ 11 февраля 2019

Попробуйте добавить

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

вверху файла, чтобы импортировать классы PHPMailer.

...