Отправка писем с сайта – неожиданная причина проблемы

Ограничения на использование памяти могут стать причиной неотправки писем
На днях столкнулся со странной проблемой у одного из наших клиентов, чей сайт хостится в 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МБ) может приводить не к замедлению работы, как это обычно бывает на других хостингах, а к частичной или полной неработоспособности сайта или сайтов, если их несколько.

График, отображающий потребление памяти в течение недели сайтом на WordPress, работающим на хостинге от RU-CENTER (nic.ru)

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

Решением стала установка одного из плагинов, позволяющего использовать для отправки писем с сайта сторонний SMTP-сервер. Наилучший работающий вариант в данном случае – SMTP-сервер от хостинг-провайдера nic.ru. Создал новую почтовую учетную запись, установил плагин WP SMTP (http://wordpress.org/plugins/wp-smtp/), настроил его для работы через 25 порт без защиты (с включенной опцией SMTP Secure, кстати, не работало), и письма сразу же стали уходить, даже до оптимизации потребляемой памяти сайтом.

Настройки плагина WP SMTP для WordPress на хостинге от RU-CENTER (nic.ru)

Если резюмировать, то я, конечно, был сильно удивлен именно таким способом применения ограничений на используемую сайтом память, создающим риск спонтанной потери функциональности.  Сам, к счастью, пользуюсь более безопасным и удобным в этом и других смыслах хостингом, про который даже несколько раз писал. На нем и памяти как минимум в два раза больше, и считается она по-другому: если здесь учитывается вся память, потребляемая веб-сервером, то там учитывается лишь память, потребляемая запущенными на сайте скриптами, а это, как нетрудно догадаться, «две большие разницы».

Понравилась статья? Поделитесь ссылкой в соцсетях: