На днях столкнулся со странной проблемой у одного из наших клиентов, чей сайт хостится в RU-CENTER – перестали отправляться письма с данными заполненной формы обратной связи на сайте. Сам он сделан на WordPress, для отправки данных использовалась форма, созданная с помощью плагина Contact Form 7 – очень популярная связка, нормально работающая во всех остальных местах. Проблема носила преходящий характер – иногда письма все же отправлялись.
Приступил к исследованию. Запуск простейшего скрипта на PHP с функцией mail() письмо отправил.
$to = 'мой и-мейл"; $subject = 'Test of e-mail sending'; $message = 'This is just a test e-mail.'; mail($to, $subject, $message);
Идем дальше. Попробовал запустить чуть более сложный скрипт, использующий для отправки тестового письма родную функцию WordPress – wp_mail().
$to = "мой и-мейл"; // Тема и содержание письма $subject = 'Тест функции wp_mail'; $message = 'Это тест работоспособности функции wp_mail'; $headers = ''; // Грузим ядро WordPress без его тем оформления define('WP_USE_THEMES', false); require('wp-load.php'); // Вызываем функцию wp_mail(), выводим результат в окне браузера if( wp_mail( $to, $subject, $message, $headers ) ) { echo 'Тестовое сообщение успешно отправлено, проверьте свой почтовый ящик.'; } else { echo 'Не удалось отправить письмо :('; };
Уже не сработало, письмо не стало отправляться. Поскольку заподозрить наличие ошибки в родной для WordPress и тщательно вылизанной функции wp_mail() было трудно, отправился на поиски в Интернет. Первые же запросы вывели на многочисленные обсуждения сходных проблем для самых разных CMS, и даже на официальное описание возможности такой проблемы в разделе FAQ хостера: http://hosting.nic.ru/support/php_setup.shtml#p3.5
Оказалось, что установленное ограничение на потребляемую на выбранном тарифе оперативную память (в нашем случае это ограничение составляло 128МБ) может приводить не к замедлению работы, как это обычно бывает на других хостингах, а к частичной или полной неработоспособности сайта или сайтов, если их несколько.
В таких обстоятельствах, если смена хостинга не рассматривается как решение, можно и нужно попытаться уменьшить потребляемую память, отключив не используемые плагины и задействовав одну из систем кэширования, однако полностью полагаться на это как-то уже не очень хочется.
Решением стала установка одного из плагинов, позволяющего использовать для отправки писем с сайта сторонний SMTP-сервер. Наилучший работающий вариант в данном случае – SMTP-сервер от хостинг-провайдера nic.ru. Создал новую почтовую учетную запись, установил плагин WP SMTP (http://wordpress.org/plugins/wp-smtp/), настроил его для работы через 25 порт без защиты (с включенной опцией SMTP Secure, кстати, не работало), и письма сразу же стали уходить, даже до оптимизации потребляемой памяти сайтом.
Если резюмировать, то я, конечно, был сильно удивлен именно таким способом применения ограничений на используемую сайтом память, создающим риск спонтанной потери функциональности. Сам, к счастью, пользуюсь более безопасным и удобным в этом и других смыслах хостингом, про который даже несколько раз писал. На нем и памяти как минимум в два раза больше, и считается она по-другому: если здесь учитывается вся память, потребляемая веб-сервером, то там учитывается лишь память, потребляемая запущенными на сайте скриптами, а это, как нетрудно догадаться, «две большие разницы».