Мой проект содержит функцию отправки электронной почты, являющуюся PHPMailer
. Он хорошо работает для отправки электронной почты с моего локального сервера, но сегодня он прекратил отправку электронной почты, и теперь он показывает это сообщение об ошибке
SMTP Error: Could not connect to SMTP host.
Я добавил этот код $mail->SMTPDebug = 1;
для просмотра ошибок отладки и теперь показывает мне это сообщение:
SMTP ERROR: Failed to connect to server: php_network_getaddresses: getaddrinfo failed: The requested name is valid, but no data of the requested type was found. (0) SMTP Error: Could not connect to SMTP host
Я уже enabled extension=php_openssl.dll
в php.ini
.
Это мой код:
$mail = new PHPMailer(); $mail->SMTPSecure = 'ssl'; $mail->IsSMTP(); $mail->Username = "myemail@gmail.com"; // your GMail user name $mail->Password = "password"; $mail->AddAddress($email); // recipients email $mail->FromName = "username"; // readable name $mail->IsHTML(true); $mail->Subject = "title"; $mail->Body = " Message"; $mail->SMTPDebug = 1; $mail->Host = "ssl://smtp.gmail.com"; // GMail $mail->Port = 465; $mail->IsSMTP(); // use SMTP $mail->SMTPAuth = true; // turn on SMTP authentication $mail->From = $mail->Username; if($mail->Send()){ } else { }
благодаря
Об этом обычно сообщается как проблема PHPMailer (и есть много дубликатов этого вопроса), но почти всегда это связано с локальным сбоем DNS, блокировкой брандмауэра или другой сетевой проблемой в вашей локальной сети.
Во-первых, убедитесь, что вы используете последний PHPMailer .
Не используйте SSL на порту 465, он устарел с 1998 года и используется только продуктами Microsoft, которые не получили заметку; вместо этого используйте TLS на порту 587:
$mail->SMTPSecure = 'tls'; $mail->Host = 'smtp.gmail.com'; $mail->Port = 587;
или более лаконично:
$mail->Host = 'tls://smtp.gmail.com:587';
Вы можете подключиться к этому, выполнив некоторые команды на своем сервере (вам понадобятся dnsutils
и telnet
). Первая проверка DNS работает:
dig +short smtp.gmail.com
Вы получите что-то вроде этого, если ваш DNS работает:
gmail-smtp-msa.l.google.com. 173.194.67.108 173.194.67.109
Затем попробуйте установить telnet на хост на нужном порту:
telnet smtp.gmail.com 587
Это должно дать вам что-то вроде этого:
Trying 173.194.67.109... Connected to gmail-smtp-msa.l.google.com. Escape character is '^]'. 220 mx.google.com ESMTP ex2sm16805587wjd.30 - gsmtp
(Введите quit
чтобы выйти из этого).
Если любой из них не работает, PHPMailer также не будет работать . Так что исправьте свою сеть, а затем повторите попытку. Если вы не контролируете свой собственный брандмауэр или DNS, вам, вероятно, придется поднять билет поддержки со своим интернет-провайдером, чтобы исправить это. Если они не исправят это, вам необходимо заменить своего интернет-провайдера.
Вернемся в PHPMailer, вы можете получить обратную связь более низкого уровня в соединении, установив:
$mail->SMTPDebug = 4;
Простой поиск в Google показал этот форум – http://forums.devshed.com/php-development-5/unable-to-find-the-socket-transport-ssl-667689.html