Иногда вселенной кажется что жить мне стало слишком скучно, поэтому она подбрасывает разную НЁХ.
На этот раз пушной зверёк зашел с подветренной стороны и я, честно говоря, пока в полном ступоре.
Обычно, я пишу о проблеме с которой столкнулась, и о её решении. Сегодня будет всё иначе.
Внезапно, и без каких-либо намёков на причину, с сервера перестала уходить почта. Точнее как перестала, только на сторонний сервис. При попытке соединения выбрасывает по таймауту с ошибкой 110.
Как завещали предки, начинаю рассуждать логически:
— На другой домен письма уходят? Да. Значит причина не в моём сервере.
— Ящик на сервисе работает? Да. Значит проблема не с ящиком и/или доменом.
— С ящика на сервер письма приходят? Да. Значит проблема только с отправкой.
— IP сервиса заблокировался? Нет.
— Порты открыты? Да.
На этом моменте я уже начинаю подвисать и пишу саппорту сервиса с описанием проблемы. К моему большому счастью мне довольно быстро отвечают и я скидываю всю информацию о проблеме которая у меня на этот момент есть. Получаю ответ что проблема по их ожиданиям не тривиальная и они отпишутся позже.
Но чтобы не сидеть без дела, я решила ещё чуточку покопать со своей стороны. Пошерстив интернет я нашла отличную утилитку swaks этакий швейцарский нож для тестирования SMTP.
Запускаю проверку.
# swaks -to [local_address] -f [remote_address] --server smtp.service.ru:465 --auth LOGIN
=== Trying smtp.service.ru:465...
=== Connected to smtp.service.ru.
<** Timeout (30 secs) waiting for server response
-> QUIT
*** Remote host closed connection unexpectedly.
Ну, вполне ожидаемо. Проблема отвала по таймауту в наличии. Но стоит добавить ключик —protocol SSMTP, который соединяясь по 465 порту добавляет ещё один ключ -tlsc (он же —tls-on-connect) и письмо уходит!
То есть ко всему вышесказанному я могу смело добавить:
— Вручную с сервера письма уходят? Да.
И чисто логически получается, что проблема всё же не в сервисе, и не в сервере, а скорее всего, где-то в скрипте, который отправлял письма. Казалось бы причина найдена, а значит 50% проблемы уже решено. Но вот в чём нюанс… А чему в скрипте то ломаться??? Стандартная функция открытия соединения, которая стабильно работала очень долгое время. Версия плагина самая свежая. Проблема, судя по всему не массовая, так как поиск по тексту ошибки практически ничего не дал. И вот на этом у меня случился полный ступор.
Что, а главное ГДЕ, могло сломаться так, чтобы стандартная функция PHP выдавала таймауты?! При этом если настроить плагин на другой SMTP сервер, то всё работает!
Я надеюсь что мне удастся решить данную проблему со временем. А пока, если вам вдруг не приходят уведомления, вы знаете что у глупой Чиаки что-то сломалось.