Я использую Laravel 4.2, в котором используется swiftmailer lib для электронной почты. Я пытаюсь использовать службу Sendgrid SMTP, но я получаю ошибку тайм-аута на моем промежуточном сервере.Swift_TransportException · Соединение с хостом smtp.sendgrid.net невозможно установить [Connection timed out # 110]
Все хорошо работает в моем местном развитии.
mail.php
return array(
'driver' => 'smtp',
'host' => 'smtp.sendgrid.net',
'port' => 587,
'encryption' => 'tls',
'username' => 'username'
'password' => ...
Я переключение на порт 465 и 'SSL', работает на местном, но не повезло на сервере. OpenSSL включен на сервере.
Что интересно, Mandrill smtp (это использует другой драйвер laravel), а локальный SMTP-сервер работает нормально на сервере.
Порты открыты. Я могу отправить telnet в sendgrid с сервера. Я также отключил имя хоста для IPv4 только для проверки из-за всех проблем, с которыми люди сталкиваются с использованием smtp.gmail.com IPv4 против IPv6. Не имело значения.
Конкретное место ошибка заключается в следующем:
$this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $streamContext);
if (false === $this->_stream) {
throw new Swift_TransportException(
'Connection could not be established with host '.$this->_params['host'].
' ['.$errstr.' #'.$errno.']');
Так что мой вопрос, что я должен проверить, чтобы выяснить, почему SwiftMailer и функция stream_socket_client PHP локально, но не работает на сервере. Локально я нахожусь на mac, сервер работает centOS.
Google Cloud блокирует этот порт по умолчанию, см. Https://cloud.google.com/compute/docs/tutorials/sending-mail/ для получения более подробной информации. – arecaps