Март 28, 2019
Теги: Решение проблем
Если почта не уходит с сайта на битрикс, можно выполнить следующие рекомендации.
Чтобы проверить, создаются и выполняются ли стандартные события, можно зайти в административной части Настройки > Инструменты > SQL запрос и выполнить следующую команду.
Поле SUCCESS_EXEC говорит о том, было письмо передано серверу для отправки, это по сути то, что возвращает стандартная функция php mail, значение "Y" означает "отправлено", "N" - не отправлено, "0" - что по каким-то причинам отправка не была передана функции mail (это может быть также из-за отсутствия почтовых шаблонов для этого события).
Но если в поле 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>";
Рассмотрим основные проблемы, по которым почта может не уходить:
С диагностикой отправки почты может помочь функция 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 установить следующие строки: