2015-04-29 2 views
1

Мне недавно не удалось отправить почту через php на localhost. Я использую PHPMailer и SwiftMailer в разных частях приложения.Я не могу отправить почту с SwiftMailer или PHPMailer из Localhost с помощью gmail

С SwiftMailer я получаю это:

Connection could not be established with host smtp.gmail.com [ #0] 

С PHPMailer, сообщение:

SMTP Error: Could not connect to SMTP host. 

Мои настройки на SwiftMailer выглядеть следующим образом:

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, 'ssl') 
->setUsername(APP_GMAIL_EMAIL) 
->setPassword(APP_GMAIL_PWD); 

Я прошел через несколько потоков здесь, в SO и в других местах, и попробовал множество «исправлений» bu t сообщения об ошибках остаются неизменными. Некоторые "решения" я попытался это:

  1. Включить OpenSSL в php.ini (Это было ранее отключено)
  2. Изменение smtp.gmail.com в smtp.googlemail.com
  3. Заменить smtp.gmail.com с определенными адресами Gmail IP
  4. Заменить smtp.gmail.com с gethostbyname('smtp.gmail.com')
  5. Добавить ->setSourceIp('0.0.0.0') в код подтверждения, после setUsername и setPassword

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

Как я могу взломать этот орех?

+0

Прочитайте [Документы по устранению неполадок PHPMailer] (https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting). – Synchro

ответ

5

Я смог преодолеть проблему, по крайней мере, с SwiftMailer. Решение должно возникнуть после моего обновления PHP с 5.2.5 до 5.6, это версия, которую я имею в настоящее время. Понимание пришло с этой страницы:

https://github.com/swiftmailer/swiftmailer/issues/544

Если вы используете PHP 5.6, ошибка действительно происходит из-за «SSL вариантов контекста», используемые для контекста потока в Swiftmailer. IN PHP 5.6 verify_peer и verify_peer_name по умолчанию установлено значение TRUE, поэтому PHP проверяет сертификат SSL. В настоящее время невозможно отключить его в swiftmailer, используя некоторые параметры.

Вы можете отключить проверку SSL, изменив функцию «_Создание соединения» в StreamBuffer.php. Добавьте эти строки перед командой stream_socket_client:

$options['ssl']['verify_peer'] = FALSE; 
$options['ssl']['verify_peer_name'] = FALSE; 

Было бы замечательно, если бы эти варианты могут быть установлены без взлома кода.

Благодаря https://stackoverflow.com/a/29448735/2554788, который первым указал меня на указанное сообщение.

Кстати, путь к StreamBuffer.php является:

\lib\classes\Swift\Transport 

Слово предупреждения, хотя: это решение основано на взлом кода внутри класса, и, скорее всего, не получится, скажем, после обновления SwiftMailer версии (в этом случае вам нужно будет вернуться и снова взломать код).

Возможно, более современные версии SwiftMailer объединили свои действия в PHP 5.6 (сейчас я использую SwiftMailer 5.1). Я намерен попробовать обновление как можно скорее, надеясь, что для этой проблемы было элегантное решение.

+0

Спасибо Ifedi Okonkwo. Решение помогло мне. – Kiran

Смежные вопросы