Пришлось перенести сайт на новый хостинг. После переноса перестала отправляться почта из скриптов. Для отправки использовалась библиотека PHPMailer, а сама почта отправляется через аккаунт Gmail. Начал читать логи и увидел такую ошибку:
Возникла мысль, что каким-то образом блокируется попытка связи с smtp.google.com, проверил соединение из терминала командами:
А проблема оказалась в том, что в PHP 5.3 имеется баг, который приводит к такой ошибке, если на сервере включена поддержка IPv6. Есть два метода борьбы:
На сегодня всё!
PHP Warning: fsockopen(): unable to connect to ssl://smtp.googlemail.com:465В интернете советуют изменить протокол и вместо SSL указывать TLS и изменить порт на 587, но это ничего не изменило.
Возникла мысль, что каким-то образом блокируется попытка связи с smtp.google.com, проверил соединение из терминала командами:
telnet smtp.gmail.com 465и
openssl s_client -connect smtp.gmail.com:465Подключения прошли успешны, значит дело не в блокировках.
А проблема оказалась в том, что в PHP 5.3 имеется баг, который приводит к такой ошибке, если на сервере включена поддержка IPv6. Есть два метода борьбы:
- Указать в настройках PHPMailer не домен SMTP-сервера, а его IP-адрес.
- Прописать в /etc/hosts соответствие домена IP-адресу.
- Отключить IPv6 на сервере.
Я выбрал третий вариант, т.к. первые два могут принести много проблем, если IP-адрес сервера изменится. У меня на сервере стоял Debian 7 (для Debian 6 все аналогично), для него отключение IPv6 довольно просто:
sudo echo net.ipv6.conf.all.disable_ipv6=1 > /etc/sysctl.d/disableipv6.confИ для надежности перезагрузиться (выполнив: sudo reboot). Если вдруг понадобиться вернуть поддержку IPv6, то нужно просто удалить файл /etc/sysctl.d/disableipv6.conf.
На сегодня всё!
Комментариев нет:
Отправить комментарий