Если почта не уходит с сайта

Модуль расширенного управления меню для битрикс

Март 28, 2019

Теги: Решение проблем

Если почта не уходит с сайта на битрикс, можно выполнить следующие рекомендации.

Чтобы проверить, создаются и выполняются ли стандартные события, можно зайти в административной части Настройки > Инструменты > SQL запрос и выполнить следующую команду.

Поле SUCCESS_EXEC говорит о том, было письмо передано серверу для отправки, это по сути то, что возвращает стандартная функция php mail, значение "Y" означает "отправлено", "N" - не отправлено, "0" - что по каким-то причинам отправка не была передана функции mail (это может быть также из-за отсутствия почтовых шаблонов для этого события).


SELECT FROM b_event ORDER BY ID DESC

Но если в поле SUCCESS_EXEC стоит "Y", а почта все равно не отправляется, можно проверить, отправляется ли почта средствами php (имейте в виду, что на большинстве хостингов то, что находится после собаки в поле From, должно совпадать с доменом вашего сайта):


$to 'my@mysite.ru';


$subject 'Тестовое письмо';

$message 'Содержание письма';

$headers "From: noreply@mysite.ru\r\n";
$headers .= "Reply-To: noreply@mysite.ru\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=utf-8\r\n";

if(
mail($to$subject$message$headers))
    echo 
"<h6>Отправлено!</h6>";
else
    echo 
"<h6>Не отправлено!</h6>";

Рассмотрим основные проблемы, по которым почта может не уходить:

Также почта может уходить, но не приходить в почтовый ящик на некоторых серверах, например, mail.ru (на gmail обычно в таких случаях все приходит), часто с решением этой проблемы помогает установка в настройках главного модуля в поле "Дополнительный параметр для передачи функции mail" следующего значения:


-fваш_почтовый_ящик_по_умолчанию

С диагностикой отправки почты может помочь функция custom_mail, определите ее в "/bitrix/php_interface/dbconn.php", и данные о каждом отправленном письме будут логироваться в папку "/test/":


function custom_mail($to$subject$message$additional_headers=''$additional_parameters='')

{
    
clearstatcache();
    
    
$handle fopen($_SERVER["DOCUMENT_ROOT"]."/test/".date('Y-m-d-H-i-s').".txt""w");
    
    
$text "To:\n-----------------------------\n".$to."\n-----------------------------\n";
    
$text .= "Subject:\n-----------------------------\n".$subject."\n-----------------------------\n";
    
$text .= "Headers:\n-----------------------------\n".$additional_headers."\n-----------------------------\n";
    
$text .= "Message:\n-----------------------------\n".$message."\n-----------------------------\n";
    
$text .= "Params:\n-----------------------------\n".$additional_parameters."\n-----------------------------\n";
    
    if (
$additional_parameters!='')
        
$return = @mail($to$subject$message$additional_headers$additional_parameters);
    else
        
$return = @mail($to$subject$message$additional_headers);

    
$text .= "mail function return:\n-----------------------------\n".var_export($return,true)."\n-----------------------------\n";

    
fwrite($handle$text);
    
fclose($handle);    

    return 
$return;
}

Также можно логировать все, что отправляется стандартной функцией mail, для этого нужно в файле .htaccess установить следующие строки:


php_value mail.add_x_header 1

php_value mail
.log /путь/к/папке/mail.log

См. также:

← Переход к списку