Неустранимая ошибка PHP: «Swift_TransportException» с сообщением «Не удалось пройти аутентификацию на SMTP-сервере»

Я знаю, что этот вопрос задавался раньше, и я прочитал все сообщения, но я все еще не могу найти решение.

У меня есть машина с Windows, на которой установлен wamp. Когда я пытаюсь отправить простое электронное письмо через SMTP-сервер Google, все работает нормально. Хотя, когда я копирую тот же скрипт на машину с Ubuntu 12, я получаю эту ошибку:

PHP Fatal error:  Uncaught exception 'Swift_TransportException' with message 'Failed to authenticate on SMTP server with username "[email protected]" using 2 possible authenticators' in /home/TestMail/SwiftMail/lib/classes/Swift/Transport/Esmtp/AuthHandler.php:171
Stack trace:
/home/TestMail/SwiftMail/lib/classes/Swift/Transport/EsmtpTransport.php(289): Swift_Transport_Esmtp_AuthHandler->afterEhlo(Object(Swift_SmtpTransport))
/home/TestMail/SwiftMail/lib/classes/Swift/Transport/AbstractSmtpTransport.php(114): Swift_Transport_EsmtpTransport->_doHeloCommand()
/home/TestMail/SwiftMail/lib/classes/Swift/Mailer.php(76): Swift_Transport_AbstractSmtpTransport->start()
/home/TestMail/testmail.php(73): Swift_Mailer->send(Object(Swift_Message))
thrown in /home/TestMail/SwiftMail/lib/classes/Swift/Transport/Esmtp/AuthHandler.php on line 171

Вот как я инициализирую транспорт:

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')

Я пытался подключиться по телнету к smtp.gmail.com через порт 465, и это сработало нормально, так что это не должно быть проблемой брандмауэра.

У меня включен SSL с PHP. Я попытался отправить два отдельных письма с SSL и без него с другим почтовым сервером, и все работало как часы. Меня бесит только почта гугла.

Здесь приветствуются любые идеи.

Весь мой php-код:

<?php
require_once 'SwiftMail/lib/swift_required.php';
// Create the Transport
$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl')
  ->setUsername('[email protected]')
  ->setPassword('xxx');

// Create the Mailer using your created Transport
$mailer = Swift_Mailer::newInstance($transport);

$htmlbody = 'some html here';

// Create a message
$message = Swift_Message::newInstance('without head')
    ->setFrom(array('<from email>' => '<some sender>'))
    ->setTo(array('<to email>' => '<some recepient>'))
    ->setBody($htmlbody, 'text/html');

// Send the message
$result = $mailer->send($message);

var_dump($result);
?>

Спасибо!


person Mitreto    schedule 30.09.2012    source источник
comment
Кажется тривиальным, но предоставили ли вы правильные учетные данные для входа в свою рабочую машину?   -  person moonwave99    schedule 30.09.2012
comment
Вероятно, это не проблема Google, потому что вы сказали, что он отлично работает с Windows.   -  person Gabriel Santos    schedule 30.09.2012
comment
Да, это должно быть что-то в моем Linux-сервере или конфигурации сети, но я не понимаю, что это такое...   -  person Mitreto    schedule 02.10.2012


Ответы (3)


Это старая тема, но мое решение было немного другим для той же ошибки. Оказывается, моя конфигурация Swift в порядке. IP с моего сервера был заблокирован Google как подозрительный. Я смог очистить его, посетив эту ссылку, а затем выполнив свой код почтовой программы с сервера.

http://www.google.com/accounts/DisplayUnlockCaptcha

person John McCann    schedule 03.07.2013
comment
Добро пожаловать в Stack Overflow! Хотя теоретически это может ответить на вопрос, было бы предпочтительнее включить сюда основные части ответа и предоставить ссылку для справки. - person Dave Chen; 04.07.2013
comment
@Джон, твое решение сработало для меня. Я искал эту ссылку и не смог найти. - person Jason Lin; 12.07.2013
comment
@Джон Потрясающе! это решило мою неразрешимую проблему! просто нажав на эту ссылку. Что именно? чистить ip адрес? - person FrancescoMussi; 03.09.2013
comment
Открою ли я ссылку со своего сервера? Например как? Есть команда? - person Rohan; 15.04.2015
comment
@ Рохан, это было давно; так что уже и не вспомню. Тем не менее, я знаю, что мой код работал на безголовом сервере AWS Linux, поэтому я не верю, что попал бы на него с сервера. Я считаю, что это было так же просто, как перейти по ссылке из браузера на любом компьютере, войдя в свою учетную запись Google. - person John McCann; 16.04.2015

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

person Dodger Web    schedule 12.12.2012

Добро пожаловать в СО. Это скорее длинный комментарий, чем ответ. Приятно видеть, что вы опубликовали сообщение об ошибке:

Неустранимая ошибка PHP: необработанное исключение «Swift_TransportException» с сообщением «Не удалось пройти аутентификацию на SMTP-сервере с именем пользователя «[email protected]» с использованием 2 возможных аутентификаторов» в /home/TestMail/SwiftMail/lib/classes/Swift/Transport/Esmtp/ Аутхандлер.php:171

Часть этого фактического сообщения:

Не удалось пройти аутентификацию на SMTP-сервере с именем пользователя «[email protected]» с использованием двух возможных аутентификаторов.

Я бы сказал, что это опечатка, которую вы сделали:

[email protected]
             ^

Может случиться. Убедитесь, что вы используете правильные учетные данные для входа. Кроме того, даже если вы найдете похожие вопросы на сайте, это не должно означать, что они охватывают вашу проблему.

Надеюсь, это поможет, в противном случае попробуйте предоставить больше информации об ошибке, например. есть ли журнал с swiftmailer? Вы дважды проверили учетные данные и конфигурацию сервера? Что делает брандмауэр? И так далее.

person hakre    schedule 30.09.2012
comment
Спасибо за ответ hakre, но, к сожалению, это не было основной причиной. Я пробовал миллионы разных вещей и просто скопировал/вставил неправильное сообщение об ошибке. Мои учетные данные верны, а ошибка все та же:/ - person Mitreto; 02.10.2012
comment
Хм, похоже на отладочную работу. постарайтесь получить общее представление и спланируйте, как подходить к вашей проблеме по пунктам, чтобы устранить ее. Swiftmailer должен предложить вам несколько логов для отладки, используйте их. Вероятно, это проблема с сетью. - person hakre; 02.10.2012
comment
В чем может быть проблема с сетью, кроме настроек брандмауэра? Есть идеи? - person Mitreto; 02.10.2012
comment
Хорошо, давайте устранять неполадки шаг за шагом: похоже, что Swiftmailer пытается пройти аутентификацию, но не может. Таким образом, сетевое соединение, скорее всего, уже установлено. Какой тип аутентификации предлагает почта Google и какие два типа аутентификации вы используете через Swiftmailer? Также: Вы сказали, что подтвердили свои учетные данные, как вы это сделали. - person hakre; 02.10.2012
comment
Вы написали, что прочитали все сообщения. Такая заметка просто ничего не говорит рядом с тем, что вы пытаетесь сделать. Вы заглянули в этот пост? stackoverflow.com/questions/3478906/? Как вы устанавливаете имя пользователя и пароль? Ваш код показывает только, какое имя сервера и порт вы используете. Кажется, есть разница в том, как вы можете написать имя пользователя, см. комментарии: stackoverflow.com/questions/12665915/ - person hakre; 02.10.2012
comment
так лучше, да. так что теперь для регистрации. не могли бы вы узнать больше в руководстве о включении ведения журнала? Пожалуйста, добавьте этот код и журнал, связанный с отправкой электронного письма. См. swiftmailer.org/docs/plugins.html и найдите подключаемый модуль Logger. Особенно примечание об ошибках SMTP. Это должно дать вам лучшую обратную связь. - person hakre; 04.10.2012