Настройки SMTP PHPMailer для Google Suite на Bluehost

Я пытаюсь отправлять электронные письма с помощью PHP, используя PHPMailer и мою электронную почту Google Suite ([email protected]).

Прочитав другие сообщения из Stack Overflow и перепробовав все, я не могу заставить его работать. Я также установил для параметра «Разрешить менее безопасные приложения» значение «true» в правильной учетной записи G Suite.

Вот ошибка, которую я продолжаю получать:

С SSL и портом 465:

2019-09-11 22:27:33 Connection: opening to ssl://smtp.gmail.com:465, timeout=300, options=array()
2019-09-11 22:27:33 Connection failed. Error #2: stream_socket_client(): Peer certificate CN=`*.bluehost.com' did not match expected CN=`smtp.gmail.com' [/home2/.../includes/PHPMailer/src/SMTP.php line 326]
2019-09-11 22:27:33 Connection failed. Error #2: stream_socket_client(): Failed to enable crypto [/home2/lucapenn/public_html/algofinder.com/admin/includes/PHPMailer/src/SMTP.php line 326]
2019-09-11 22:27:33 Connection failed. Error #2: stream_socket_client(): unable to connect to ssl://smtp.gmail.com:465 (Unknown error) [/.../includes/PHPMailer/src/SMTP.php line 326]
2019-09-11 22:27:33 SMTP ERROR: Failed to connect to server: (0)
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

С TLS и портом 587:

2019-09-12 08:12:39 Connection: opening to smtp.gmail.com:587, timeout=300, options=array()
2019-09-12 08:12:39 Connection: opened
2019-09-12 08:12:39 SMTP INBOUND: "220-box5141.bluehost.com ESMTP Exim 4.92 #2 Thu, 12 Sep 2019 03:12:39 -0500"
2019-09-12 08:12:39 SMTP INBOUND: "220-We do not authorize the use of this system to transport unsolicited,"
2019-09-12 08:12:39 SMTP INBOUND: "220 and/or bulk e-mail."
2019-09-12 08:12:39 SERVER -> CLIENT: 220-box5141.bluehost.com ESMTP Exim 4.92 #2 Thu, 12 Sep 2019 03:12:39 -0500 220-We do not authorize the use of this system to transport unsolicited, 220 and/or bulk e-mail.
2019-09-12 08:12:39 CLIENT -> SERVER: EHLO mydomain.com
2019-09-12 08:12:39 SMTP INBOUND: "250-box5141.bluehost.com Hello mydomain.com [162.241.224.176]"
2019-09-12 08:12:39 SMTP INBOUND: "250-SIZE 52428800"
2019-09-12 08:12:39 SMTP INBOUND: "250-8BITMIME"
2019-09-12 08:12:39 SMTP INBOUND: "250-PIPELINING"
2019-09-12 08:12:39 SMTP INBOUND: "250-AUTH PLAIN LOGIN"
2019-09-12 08:12:39 SMTP INBOUND: "250-STARTTLS"
2019-09-12 08:12:39 SMTP INBOUND: "250 HELP"
2019-09-12 08:12:39 SERVER -> CLIENT: 250-box5141.bluehost.com Hello algofinder.com [162.241.224.176]250-SIZE 52428800250-8BITMIME250-PIPELINING250-AUTH PLAIN LOGIN250-STARTTLS250 HELP
2019-09-12 08:12:39 CLIENT -> SERVER: STARTTLS
2019-09-12 08:12:39 SMTP INBOUND: "220 TLS go ahead"
2019-09-12 08:12:39 SERVER -> CLIENT: 220 TLS go ahead
2019-09-12 08:12:39 Connection failed. Error #2: stream_socket_enable_crypto(): Peer certificate CN=`*.bluehost.com' did not match expected CN=`smtp.gmail.com' [/home2/.../PHPMailer/src/SMTP.php line 405]
SMTP Error: Could not connect to SMTP host.
2019-09-12 08:12:39 CLIENT -> SERVER: QUIT
2019-09-12 08:12:39
2019-09-12 08:12:39 SMTP INBOUND: ""
2019-09-12 08:12:39
2019-09-12 08:12:39
2019-09-12 08:12:39 Connection: closed
SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

Вот мой PHP-код:

$mail = new PHPMailer(true);

try {

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 4; 
$mail->SMTPAuth = true;  // authentication enabled
$mail->SMTPSecure = 'ssl'; //or SSL
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465; //or 587
$mail->Username = '[email protected]';  
$mail->Password = 'mypassword';           

$mail->setFrom($from, 'MyDomain');
$mail->addAddress($to);   

$mail->isHTML(true);
$mail->Subject = $subject;
$mail->Body = $body_html;
$mail->AltBody = $body_txt;

$mail->send();

} catch (Exception $e) {

echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";

}

Я просто хотел бы отправить несколько обычных писем в почтовый ящик. Возможно ли это с PHPMailer и Google Suite? Существуют ли другие более надежные решения, способные добраться до почтового ящика?


person Luca Pennisi    schedule 11.09.2019    source источник


Ответы (1)


Вот ваша проблема:

2019-09-11 22:27:33 Ошибка подключения. Ошибка №2: stream_socket_client(): сертификат узла CN=*.bluehost.com' did not match expected CN=smtp.gmail.com' [/home2/.../includes/PHPMailer/src/SMTP.php, строка 326]

Вы запрашиваете подключение к smtp.gmail.com, но в итоге подключаетесь к хосту bluehost.com. Это произойдет потому, что ваш хостинг-провайдер перенаправляет исходящий трафик на порт 465 на свой собственный почтовый сервер, используя свой брандмауэр. Это приводит к сбою проверки сертификата, поскольку имена сертификатов не совпадают. В этом смысле TLS работает именно так, как предполагалось, обнаруживая то, что равносильно атаке «человек посередине». Однако это не особенно полезно, учитывая, что вы знаете, кто этот «злоумышленник». У Bluehost, вероятно, есть какая-то договоренность, позволяющая вам отправлять электронную почту через их собственный почтовый сервер, и имя сертификата будет совпадать, если вы переключитесь на него.

Имейте в виду, что даже если вы решите эту проблему, вас ждет еще одна: gmail имеет строгие настройки SPF и DMARC, которые означают, что вы не можете отправлять электронную почту с адреса gmail.com, если только вы не отправляете через собственные серверы gmail. Если вы используете свое собственное доменное имя с gmail, вы можете, по крайней мере, добавить записи SPF Bluehost к своим собственным, что позволит отправлять оттуда.

Эта конкретная ситуация описана в руководстве по устранению неполадок, на которое ссылается ошибка. сообщение.

person Synchro    schedule 12.09.2019
comment
Привет Synchro, спасибо за ваш ответ. Поскольку я нахожусь на общем хостинге, есть ли способ решить эту проблему, кроме перехода на bluehost и отказа от g Suite? (Я не доверяю bluehost) - person Luca Pennisi; 12.09.2019
comment
Я предлагаю обратиться в службу поддержки bluehost - исходящий SMTP часто блокируется по умолчанию, но может быть разрешен по запросу. - person Synchro; 12.09.2019