Ошибка PHPMailer SMTP: не удалось выполнить аутентификацию с использованием gmail в качестве SMTP-сервера

Мне не удается отправить электронную почту в моем приложении, размещенном на appfog. Я использую следующий код, который отлично работает на локальном хосте, но не работает на appfog. . JPhpMailer расширяет class.PhpMailer.php

                    $mailer = new JPhpMailer(true);
                    $mailer->IsSMTP();
                    $mailer->Mailer = "smtp";
                    //$mailer->SMTPSecure == 'tls'; 
                    $mailer->Host = 'ssl://smtp.gmail.com';
                    $mailer->Port = '465';
                    $mailer->SMTPAuth = true;
                    //$mailer->SMTPSecure = true; 
                    $mailer->Username = '[email protected]';
                    $mailer->Password = 'zzzzzzz';
                    $mailer->SetFrom($to['from'], $to['from_name']); 
                    $mailer->AddAddress($to['to'],$to['to_name'] ); 
                    $mailer->Subject = $to['subject'];
                    $mailer->Body = $to['body'];
                    $mailer->Send();

вот строка, которая не выполняется в phpMailer`if ($tls) { if (!$this->smtp->StartTLS()) { throw new phpmailerException($this->Lang('tls')); }

         //We must resend HELO after tls negotiation
        $this->smtp->Hello($hello);
      }

       $connection = true;
      if ($this->SMTPAuth) {
         if (!$this->smtp->Authenticate($this->Username, $this->Password)) {
         **strong text throw new phpmailerException($this->Lang('authenticate')); **            }
      }
     }
   $index++;
    if (!$connection) {
       throw new phpmailerException($this->Lang('connect_host'));
     }

person Eliethesaiyan    schedule 09.01.2013    source источник
comment
Установлен ли Open SSL на вашем сервере? Сделайте PHPInfo, чтобы узнать.   -  person Gavin    schedule 09.01.2013
comment
спасибо, Гэвин, openssl не установлен ни на моем хостинг-сервере, ни на моем локальном хосте, но работает хорошо   -  person Eliethesaiyan    schedule 10.01.2013


Ответы (6)


Код ниже работает для меня:

require("phpmailer/class.phpmailer.php");

$mail = new PHPMailer();

$mail->IsSMTP();                                      // set mailer to use SMTP
$mail->SMTPAuth = true;     // turn on SMTP authentication
$mail->SMTPSecure = "tls";
$mail->Host = "smtp.gmail.com";  // specify main and backup server
$mail->Port = 587;
$mail->Username = "[email protected]";  // SMTP username
$mail->Password = "mypass"; // SMTP password

$mail->From = "[email protected]";
$mail->FromName = "myname";
$mail->AddAddress("[email protected]", "myname");

$mail->WordWrap = 50;                                 // set word wrap to 50 characters
$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";

if(!$mail->Send())
{
   echo "Message could not be sent. <p>";
   echo "Mailer Error: " . $mail->ErrorInfo;
   exit;
}

echo "Message has been sent";
person Community    schedule 10.01.2013
comment
Сорри, порт должен быть $mail->Port = 587; or $mail->Port = 465; для gmail. обновлен в моем коде. - person ; 14.01.2013
comment
Привет, @Sumit, я узнал, что мне нужно было установить ssl на appfog (включено в моем плане), которого у меня сейчас нет ... поэтому я снова переключился на использование почты вместо SMTP! Sight! - person Eliethesaiyan; 16.01.2013

Я столкнулся с той же проблемой. Чтобы это заработало, мне пришлось перейти на страницу myaccount.google.com -> "Подключенные приложения и сайты". и установите для параметра «Разрешить менее безопасные приложения» значение «ВКЛ» (внизу страницы).

Надеюсь, это поможет кому-то

введите здесь описание изображения

person Developer    schedule 23.08.2016
comment
тьфу... да, это, это действительно, раз миллион. Хотел бы я +1000 тебе - person Félix Adriyel Gagnon-Grenier; 17.10.2017

После регистрации в appfog я смог заставить PHPMailer работать со следующим.

Мне не удалось найти JPHPMailer, хотя я подозреваю, что проблема не в этом, а в том, что вы указали ssl://smtp.gmail.com в качестве хоста.

ini_set('display_errors', 1);
error_reporting(E_ALL);

include('class.phpmailer.php');
$mailer = new PHPMailer(true);
$mailer->IsSMTP();
$mailer->SMTPSecure = 'ssl';
$mailer->Host = 'smtp.gmail.com';
$mailer->Port = 465;
$mailer->SMTPAuth = true;
$mailer->Username = '[email protected]';
$mailer->Password = 'password';
$mailer->SetFrom('[email protected]', 'Name'); 
$mailer->AddAddress('[email protected]'); 
$mailer->Subject = 'This is a test';
$mailer->Body = 'Test body';
$mailer->Send();

Надеюсь это поможет?

person Gavin    schedule 10.01.2013
comment
спасибо, Гэвин ... я только что попробовал, что он все еще падает, если (! $ this-> SmtpConnect () .. я не знаю, что вызывает, и я изменил хост почтовой программы на smtp.gmail.com и добавил SMPTSecure для ssl, но я не изменил любая другая вещь - person Eliethesaiyan; 11.01.2013
comment
У вас есть ini_set('display_errors', 1); error_reporting(E_ALL); в верхней части вашего скрипта? Возможно, генерируется исключение, и вы видите ошибку, которая его вызывает. PHPMailer вернул несколько ошибок с аутентификацией и т. д., когда я попробовал в первый раз. - person Gavin; 11.01.2013
comment
я сделал это, и это дало мне эту ошибку. Ошибка SMTP: не удалось подключиться к хосту SMTP. Во всех сообщениях, которые я видел, они говорят, что это связано с тем, что ssl не включен на вашем сервере (appfog), вы сделали что-нибудь, чтобы заставить его работать @Гэвин - person Eliethesaiyan; 13.01.2013
comment
@Spidaboy7 - К сожалению, нет, все, что я сделал, это создал новый экземпляр PHP и развернул приведенный выше код с class.phpmailer.php и class.smtp.php. Думаю, я установил его на EU West. Я могу воссоздать его, если хочешь? - person Gavin; 14.01.2013
comment
Я создал новый экземпляр (без настройки, кроме загрузки трех файлов), и он сразу заработал. В вашей учетной записи gmail установлена ​​двухфакторная аутентификация? Я делаю, и я должен предоставить свой пароль приложения, а не мой обычный пароль. - person Gavin; 14.01.2013
comment
@ Гэвин ... странно ... у вас включен ssl в вашем приложении? (сейчас используется бесплатный план) ... я читал много похожих проблем, и большинство из них заключалось в том, что ssl не был включен на их хосте ... поэтому я сдался. вместо SMTP я использую почтовую функцию PHP - person Eliethesaiyan; 16.01.2013
comment
@ Spidaboy7 - SSL доступен только для платных решений, если я правильно помню. Я просто зарегистрировался в Appfog, чтобы протестировать свой код на том же хосте, что и вы. Если бы вы могли сообщить мне свою конфигурацию (например, AWS EU West), я мог бы воспроизвести ее шаг за шагом. В любом случае, использование Mail на данный момент является подходящим обходным путем :) - person Gavin; 18.01.2013

Распечатайте свой объект PHPMailer и проверьте PORT на объекте, и вы дали PORT

echo "<pre>", print_r($mailer, true);
exit;
person UWU_SANDUN    schedule 30.01.2016

Шаг 1. Перейдите на страницу https://myaccount.google.com/security#signin, затем < strong>Пароли приложений создают пароль приложения.

Шаг 2. Вставьте этот 16-значный пароль $mailer->Password.

person Arshid KV    schedule 12.10.2016

В большинстве случаев вам нужно создать двухэтапную аутентификацию и войти в систему с паролем приложения.

Небольшой совет: внимательно прочитайте отладочное сообщение phpmailer. Там может быть правильная ссылка на ответ проблемы.

У меня был такой: https://support.google.com/mail/answer/7126229?visit_id=1-636190350518295662-3485238940&rd=2#cantsignin

person Mark    schedule 03.01.2017