Подключение phpmailer

135
05 августа 2021, 01:00

Задача: подключить phpmailer для формы обратной связи на сайте.
Для начала решил разобраться как работает он в принципе и потом подключать к форме. Но появилась неисчезающая проблема:

2019-09-22 19:09:21 SMTP ERROR: Failed to connect to server: (0) SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting Message could not be sent. Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Перепробовал все: проверил подключен ли open_ssl, разблокировал подключение небезопасных подключений на gmail, подключал форму через два разных локальных сервера: Open Server, xampp. Пытался отправлять и с почты gmail и с почты mail.ru. Менял ssl и tls, ставил разные порты: и 465 и 578.
В одном источнике писали, что локальный сервер может конфликтовать со скайпом - скайп был отключен, проблема не пропала.
В php не силен, хотелось просто подключить данную форму, но с умом, понимая, что откуда следует.
Буду благодарен за помощь.
Код:

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
require 'vendor/autoload.php';
$mail = new PHPMailer(true);
try {
$mail->SMTPKeepAlive = true;   
$mail->Mailer = "smtp";

$mail->SMTPDebug = 2;                        // Enable verbose debug output
$mail->Host = "ssl://smtp.gmail.com"; 
$mail->isSMTP();                                  // Set mailer to use SMTP
$mail->SMTPAuth   = true;                      // Enable SMTP authentication
$mail->Username = 'h******n';                   // SMTP username
$mail->Password = 'h******l';                               // SMTP password
$mail->SMTPSecure = 'ssl';     // Enable TLS encryption, `ssl` also accepted
$mail->Port = '465';                        // TCP port to connect to
//Recipients
$mail->setFrom('h**********m', 'Mailer');
$mail->addAddress('s**********u', 'Joe User');     // Add a recipient
$mail->isHTML(true);                           // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}
Answer 1

Ответ нашел здесь.
Нужно добавить вот такую часть кода:

$mail->SMTPOptions = array(
'ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false,
    'allow_self_signed' => true
)
);
Answer 2

Для Google помимо настройки PHPMailer необходимо в настройках почты отметить галочку "разрешить отправлять письма по SMTP"

По правильной настройке PHPMailer в связке с Google есть развёрнутый ответ по указанным ниже ссылкам:

  1. Настройка Google-почты для отправки писем
  2. Настройка PHPMailer для отправки писем с Google
READ ALSO
Вывод Sql запроса в Echo

Вывод Sql запроса в Echo

как вывести sql запрос с Where,через echo в php ?

266
E2e тестирование api

E2e тестирование api

Как проверить api через phpunit У меня есть api http://test/testApi/apiScanTest Она должна принимать данные

200
Как правильно спроектировать роли в базе данных?

Как правильно спроектировать роли в базе данных?

Хочу создать бд, где имеется пользователь User и его роли, у каждого пользователя, в зависимости от роли — свой личный кабинетКак правильно...

217