В этой статье мы расскажем вам о том, где смотреть причины ошибки неотправленной почты в Битриксе. Рассмотрим три основных мест, откуда можно найти ошибку отправки писем.
Проверка таблицы очереди писем
Идем в административную панель Битрикса по пути: Настройки / Производительность / Таблицы. Ищем таблицу b_event и проваливаемся по ссылке.
Именно в эту таблицу попадают письма с сайта в очередь, а затем отправляются на хитах или на агентах.
На открывшейся странице можем отыскать сообщение, которое не отправилось. Проматываем в самый конец к колонке SUCCESS_EXEC – это колонка записывает состояние отправки письма.
Варианты статуса отправки (SUCCESS_EXEC):
Y – означает, что письмо было успешно отправлено
N – говорит о том, что событие еще не обработано и письмо не отправлено. В этом случае стоит полную проверку сайта и проверить настройки dbconn.php. Проверить корректность настройки почтовых шаблонов и их привязки к сайтам.
F – сообщение не было отправлено. Необходимо проверить логи сервера или хостинга.
0 – не активен или отсутствует почтовый шаблон (Настройки / Настройки продукта / Почтовые шаблоны)
Проверка системы
Проверка системы расположена на странице Настройки / Инструменты / Проверка системы. В проверке уже встроен инструмент, который проверяет возможность отправки письма с помощью стандартной PHP функции mail. Этаки быстрый проверяльщик работы почты.
Если здесь уже возникает ошибка, то проблему стоит идти смотреть в логи сервера.
Проверка логов сервера
Если ошибка ошибка идет глубже и у вас VM Bitrix, идем в консоль сервера по пути /home/bitrix/ и ищем логи с префиксом .msmtp_ (по умолчанию). Смотрим и ловим ошибки в этом файле. Логи лучше просматривать с помощью утилиты mc.
Сама конфигурация почтовых настроек расположена в файле /home/bitrix/.msmtrpc
Если письма в Битриксе отмечены как успешно отправленные, но письмо не пришло и в логах отсутствует какая-либо информация – следует обратить внимание на логи в /var/log/. Там отобразится ошибка, которая возвращается функцией mail.
Проверить возможность отправки также можно с помощью консольных команд (но в данном случае будет использоваться отправитель по умолчанию – default)
> php -a
> mail('test@example.com', "Test", "Test message");
> exit
Если произойдет ошибка при отправке, то сообщение будет у вас на экране.
Ошибки
Частая ошибка – это когда в письмах отправителем указан адрес отличимый от названия аккаунта (поле FROM). Поэтому задайте в настройках сайта нужный адрес или в почтовых шаблонах в поле «От кого». В этом случае, если требуется, чтобы человек мог ответить на другую почту, то можете указать электронную почту в качестве обратного адреса в почтовом шаблоне.
Другая ошибка – это отсутствие настроек для отправителя по умолчанию. Необходимо внести корректные настройки адреса отправителя (указать tsl, метод авторизации и т.п.)
На этом все, надеюсь статья была вам полезна. Если у вас возникнут вопросы, задавайте в комментарий.
Приветствую читателей thisis-blog.ru!
В сегодняшней статье хочу рассказать об основных проблемах с почтой в CMS 1с-Битрикс.
Порой до адресата не доходят письма и нужно понять, а отправляются ли они вообще? А может они были отправлены, но возникли, какие-то другие ошибки. Так что же делать в таких ситуациях?
Проверить отправляются ли письма
Для проверки достаточно на любой страничке написать следующий php код:
$mail="[email protected]"; // ваша почта
$subject ="Test" ; // тема письма
$text= "Line 1nLine 2nLine 3"; // текст письма
if( mail($mail, $subject, $text) )
{
echo 'Успешно отправлено!'; }
else{
echo 'Отправка не удалась!';
}
Либо использовать для отправки письма функцию bitrix CEvent::Send.
Если письмо не пришло, можно обращаться в тех. поддержку хостера.
Список отправленных писем
В битриксе нет как такого инструмента, который бы показывал сработавшие почтовые шаблоны и соответствующие отправленные письма. Но всё таки существует обходной путь, как просмотреть их.
Для этого нужно зайти в Админку Битрикс, далее Настройки -> Инструменты -> SQL-запрос. Ввести следующий sql код:
select * from b_event where event_name like '%form%' order by date_insert desc
Вместо %form% нужно указать конкретный тип почтового события например так, чтобы посмотреть отправленные письма о новых заказах:
select * from b_event where event_name like 'SALE_NEW_ORDER' order by date_insert desc
Либо можете вообще убрать вторую строку. В результате получите таблицу всех сработавших событий. Нас интересует колонка SUCCESS_EXEC.
‘Y’ — означает успешная отправка;
‘N’ или 0 — письмо не отправлено;
‘F’ — ошибка
Если найденные записи имеют значение ‘Y’ — это означает, что они отправлены и проблем быть не должно.
Но у нас всё плохо, значит обращаемся в тех. поддержку хостинга.
Если ‘N’ или 0- письма по какой-то причине не ушли.
Может помочь такое решение:
перейдите по пути: <вашсайт>/bitrix/php_interface/dbconn.php
Закомментируйте или удалите следующие строки:
define('BX_CRONTAB', true);
define('BX_CRONTAB_SUPPORT', true);
Попробуйте протестировать снова. Если после этого SUCCESS_EXEC также имеет значение ‘N’, то перейдите в <вашсайт>/bitrix/managed_cache/ . Удалите содержимое через модуль управления структурой( не в коем случае не используйте FTP). Если вылезет ошибка, то не хватает доступа. Измените доступ к папкам и повторите снова.
Еще один способ — воспользоваться встроенными методами CMS Битрикс по диагностике.
- Проверка системы — <вашсайт>/bitrix/admin/site_checker.php
- Монитор качества — <вашсайт>/bitrix/admin/checklist.php
Ошибки, найденные в процессе диагностики, могут являються причиной вашей проблемы.
Возможная ошибка — почтовый сервер не поддерживает формат письма. Попробуйте изменить настройки отправки.
- Убрать BBC
- Убрать дублирование email в заголовке
- Установить Конвертировать 8-битные заголовки
Если ничего не помогло, попробуйте запросить у хостера логи почтового сервера.
Хочу рассмотреть частный случай:
Не приходят на почту уведомления о заполнении веб-форм
Шаги решения проблемы:
- Переходим в админ панель: Настройки -> Настройки продукта ->Настройки модулей -> Веб-формы. Отключаем флажок «использовать упрощенный режим». Переходим к настройкам компонента веб-форм на сайте. Вкладка дополнительно. Должен присутствовать флажок активирующий привязку к почтовому шаблону.
- Переходим: Панель управления -> Настройки -> Настройки продукта -> Почтовые события. Находим почтовый шаблон для веб-формы. Проверяем правильность данных:
- Шаблон должен быть активен;
- Привязан к одному из сайтов(если многосайтовость);
- От кого: #DEFAULT_EMAIL_FROM#;
- Кому: #DEFAULT_EMAIL_FROM#».
Спасибо за внимание, также читайте статью про то, как Добавить поле в почтовый шаблон.
Битрикс не отправляется почта или попадает в спам
Заказать сайт
Обратившись ко мне вы получите надежного и сведущего исполнителя, который быстро и качественно реализует любую задачу для Вас и Вашего бизнеса.
Тестируем отправку писем
Отправка тестового письма из консоли
echo "Test text" | mail -s "Test title" test@test.ru
Проверяем работу функции mail из PHP консоли Битрикс
if( mail("test@test.ru", "Subject", "Text") ){
echo 'Успешно отправлено!'; }
else{
echo 'Отправка не удалась!';
}
Проверяем работу сокетов
$fp = fsockopen("ssl://smtp.mail.ru", 465, $errno, $errstr, 30);
if (!$fp)
echo "Error: $errstr ($errno)n";
else
echo "Connected";
fclose ($fp)
Проверяем настройки Битрикс
Идем в Настройки > Настройки продукта > Почтовые и СМС события > Почтовые шаблоны и просматриваем шаблоны. Убеждаемся, что в поле От кого стоит #DEFAULT_EMAIL_FROM#
Идем в Настройки > Настройки продукта > Настройки модулей > Главный модуль > Почта и СМС в поле Email администратора сайта (отправитель по умолчанию) вписываем правильное значение почта отправителя
На всякий случай почту можно указать еще в поле E-Mail отдела продаж: по пути Настройки > Настройки продукта > Настройки модулей > Интернет-магазин > Настройки
Email должен совпадать во всех перечисленных случаях, плюс в настройках msmtp должен быть указан именно он
msmtp config для простой отправки через mail.ru
account default
logfile /home/bitrix/.msmtp.log
host mail.bitrixsoft.com
port 25
from user@email.com
auth off
msmtp config для простой отправки через smtp mail.ru
account default
logfile /home/bitrix/msmtp_default.log
host smtp.mail.ru
port 587
from no-reply@default.ru
keepbcc off
auth on
user no-reply@default.ru
password default
tls on
tls_starttls on
tls_certcheck off
msmtp config для простой отправки через smtp yandex.ru
account default
logfile /var/log/msmtp.log
host smtp.yandex.ru
port 587
from usr@yandex.ru
keepbcc on
auth on
user usr@yandex.ru
password PAss
tls on
tls_starttls on
msmtp config для простой отправки через smtp gmail.com
account default
tls on
tls_certcheck off
auth on
host smtp.gmail.com
port 587
user YOUR_EMAIL
from YOUR_EMAIL
password YOUR_PASSWORD
msmtp config для простой отправки через smtp timeweb.ru
# smtp account configuration for default
account default
logfile /home/bitrix/msmtp_default.log
host smtp.timeweb.ru
port 465
from YOUR_EMAIL
aliases /etc/aliases
keepbcc off
auth on
user YOUR_EMAIL
password YOUR_PASSWORD
tls on
tls_starttls off
tls_certcheck off
Получаем список писем
select * from b_event
where event_name like 'SALE_NEW_ORDER'
order by date_insert desc
Значения статусов отправки писем в колонке SUCCESS_EXEC
‘Y’ — означает успешная отправка;
‘N’ или 0 — письмо не отправлено;
‘F’ — ошибка
Скрипт отправки почты через phpMailer
Устанавливаем composer
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"
Устанавливаем phpMailer
composer require phpmailer/phpmailer
Если команда composer не найдена, то пытаемся установиться его глобально
curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
Добавляем в init.php
require '/var/www/YOUR_SITE/vendor/autoload.php';
use BitrixMainApplication;
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerSMTP;
use PHPMailerPHPMailerException;
//Перехват генерации почтового события с возможностью его отмены
AddEventHandler("main", "OnBeforeEventAdd", array("OnBeforeEventAddClass", "OnBeforeEventAddHandler"));
class OnBeforeEventAddClass
{
function OnBeforeEventAddHandler(&$event, &$lid, &$arFields, &$message_id, &$files)
{
$connection = BitrixMainApplication::getConnection('default');//Получаем соединение с БД
//Получаем шаблон письма
$recordset = $connection->query("select SUBJECT, MESSAGE, MESSAGE_PHP from b_event_message where ACTIVE = 'Y' AND EVENT_NAME = '".$event."'")->fetchAll();
$fields = $arFields;
AddMessage2Log($arFields, "arFields");
if(isset($recordset[0]['MESSAGE'])){//Проверяем есть ли шаблон
$mask = $recordset[0]['MESSAGE'];
$subject = $recordset[0]['SUBJECT'];
foreach ($fields as $key => $value){
if(!is_array($value) && strpos($key, '~') === false){//Исключаем из замены массивы и символы ~
//Заменяем все возможные паттерны
$mask = preg_replace('~#'.$key.'#~', $value, $mask);
$subject = preg_replace('~#'.$key.'#~', $value, $subject);
}
}
$mask = preg_replace('~#SITE_NAME#~', COption::GetOptionString("main", "site_name", $GLOBALS["SERVER_NAME"]), $mask);
$mask = preg_replace('~#SERVER_NAME#~', COption::GetOptionString("main", "server_name", $GLOBALS["SERVER_NAME"]), $mask);
$mask = preg_replace('~#DEFAULT_EMAIL_FROM#~', COption::GetOptionString("main", "email_from", "admin@".$GLOBALS["SERVER_NAME"]), $mask);
$subject = preg_replace('~#SITE_NAME#~', COption::GetOptionString("main", "server_name", $GLOBALS["SERVER_NAME"]), $subject);
$subject = preg_replace('~#SERVER_NAME#~', COption::GetOptionString("main", "server_name", $GLOBALS["SERVER_NAME"]), $subject);
if($mask) {//Ести тело сформировано, то запускаем отправку
if(isset($fields['RS_USER_EMAIL'])){
if (filter_var($fields['RS_USER_EMAIL'], FILTER_VALIDATE_EMAIL)) {
$email = $fields['RS_USER_EMAIL'];
}
}
if(isset($fields['EMAIL'])){
if (filter_var($fields['EMAIL'], FILTER_VALIDATE_EMAIL)) {
$email = $fields['EMAIL'];
}
}
if(isset($fields['EMAIL_RAW'])){
if (filter_var($fields['EMAIL_RAW'], FILTER_VALIDATE_EMAIL)) {
$email = $fields['EMAIL_RAW'];
}
}
if(isset($fields['EMAIL_BUYER'])){
if (filter_var($fields['EMAIL_BUYER'], FILTER_VALIDATE_EMAIL)) {
$email = $fields['EMAIL_BUYER'];
}
}
if(isset($fields['EMAIL_TO'])){
if (filter_var($fields['EMAIL_TO'], FILTER_VALIDATE_EMAIL)) {
$email = $fields['EMAIL_TO'];
}
}
if(!$email){
$email = 'default@email.ru';
}
if($email && filter_var($email, FILTER_VALIDATE_EMAIL)){
$cl = new OnBeforeEventAddClass;
if($cl->custom_mail($email, $subject, $mask,'','')){//Отправляем письмо
//AddMessage2Log($event, "Сообщение было отправлено");
}else{
//AddMessage2Log($event, "Ошибка. Сообщение отправлено не было");
}
}else{
//AddMessage2Log($event, "Ошибка. Почта не найдена. Почта:");
}
return false;
}else{
//AddMessage2Log($event, "Ошибка. Нет тела письма");
}
}else{
//AddMessage2Log($event, "Ошибка. Не найден шаблон письма");
}
}
public function custom_mail($to, $subject, $message, $additionalHeaders = '', $additional_parameters)
{
// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);
$mail->IsSMTP(true); // enable SMTP
$mail->SMTPDebug = 3; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail
$mail->Host = 'smtp.gmail.com';
$mail->Port = 465; // set the SMTP port for the GMAIL server
$mail->Username = 'email'; // SMTP username
$mail->Password = 'password'; // SMTP password
$mail->CharSet = 'UTF-8';
$mail->addAddress($to);
$mail->setFrom('default@email.ru');
//Set the subject line
$mail->Subject = $subject;
//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML($message);
//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';
$d_message='';
//preg_match('/From: (.+)n/i', $additionalHeaders, $matches);
//list(, $from) = $matches;
$from = 'admin@YOUR_SITE';
$d_message.='$from - '.$from.' +++ '; $d_message.='$to - '.$to.' +++ ';
$d_message.='$subject - '.$subject.' +++ ';
$d_message.='$message - '.$message.' +++ ';
$mail->setFrom($from);
$mail->addAddress($to, ''); // Add a recipient
//$mail->addReplyTo($from, '');
//$mail->AddBCC($from);
//$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
$mail->Subject = $subject;
if($message != strip_tags($message)) {
$mail->isHTML(true);
}
$mail->Body = $message;
// $mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if(!$mail->send()) {
AddMessage2Log($mail->ErrorInfo, "Mailer Error");
return false;
} else {
return true;
}
}
}
//Перехват письма непосредственно перед отправкой
AddEventHandler('main', 'OnBeforeEventSend', Array("OnBeforeEventSendClass", "my_OnBeforeEventSend"));
class OnBeforeEventSendClass
{
function my_OnBeforeEventSend($arFields, $arTemplate)
{
//получим сообщение
}
}
Для отправки писем с помощью phpMailer через smtp.mail.ru конфиг должен быть следующего вида:
$mail = new PHPMailerPHPMailerPHPMailer(true);
$mail->IsSMTP(true); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail
$mail->Host = 'ssl://smtp.mail.ru';
$mail->Port = 465; // set the SMTP port for the GMAIL server
$mail->Username = 'USER_NAME'; // SMTP username
$mail->Password = 'USER_PASSWORD'; // SMTP password
Отладка через AddMessage2Log
В файле dbconn.php добавьте строчку define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/log.txt");
cannot connect to localhost, port 25: Connection refused
После установки чистого битрикс окружения достаточно часто вижу эту ошибку. Чтобы исправить — используйте postfix
yum install postfix
service postfix start
chkconfig postfix on
the server sent an empty reply в логе msmtp
Добавьте в конфиг
tls_starttls off
Борьба с ошибками
Если вы пытаетесь отправить почту через smtp компании Google и получаете ошибку вида SMTP connect() failed, то зайдите в аккаунт гугл с которого отправляете почту. Откройте настройки, перейдите во вкладку Безопасность, найдите пункт «Ненадежные приложения, у которых есть доступ к аккаунту», перейдите в него и разрешите доступ небезопасным приложениям (ссылка)
Боремся с ошибкой Mail command not found
yum install sendmail
yum -y install mailx
service sendmail start
Перевод агентов на крон
Правим файл /bitrix/php_interface/dbconn.php
Иногда требуется закомментировать строки подключения поддержки крона
define('BX_CRONTAB', true);
define('BX_CRONTAB_SUPPORT', true);
Перейдите на страницу Настройки > Инструменты > Командная PHP-строка и исполните следующий код:
COption::SetOptionString("main", "agents_use_crontab", "Y");
echo COption::GetOptionString("main", "agents_use_crontab", "N");
Откроем настройки крон
crontab -u bitrix -e или crontab -e
Добавим запись:
*/1 * * * * php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php >/dev/null 2>&1
Перезагружаем cron
systemctl restart crond.service
Настройки cron хорошо описаны в документации
Более подробно можно изучить вопрос в официально документации:
- Настройка почты на VMBitrix
- Дополнительные настройки и отладка msmtp
Теги:
1С Битриксphp
Проверить работу почты сайта под управлением Битрикс:
Битрикс посылает почтовые шаблоны функциями CEvent::Send() и CEvent::SendImmediate().
Письмо отправляется, если Битрикс нашел активный почтовый шаблон, подходящий под это событие и соответствующий текущему сайту.
Письма отправлены через CEvent::Send() попадают в таблицу b_event.
Чтоб проверить таблицу существует 2 способа
первый: перейти на страницу
домен/bitrix/admin/perfmon_tables.php
и в поле Фильтр по имени таблицы ввести b_event. перейти по точному совпадению таблицы.
другой: описан ниже
Письма, попавшие в b_event, посылаются на агенте (хиты) или на cron (по расписанию). Отправляются не сразу.
Письма, посылаемые через SendImmediate не попадают в b_event, а отправляются сразу.
Send и SendImmediate — обертки на функцию Битрикса bxmail, которая использует либо стандартную php-функцию mail, либо custom_mail, если она определена.
Административный раздел->Рабочий стол->Настройки->Инструменты->Командная PHP-строка скопировать туда:
if( mail("mail_to@mail.com", "letter test", "my letter text",
"From: mail_from@mail.com
Reply-To: mail_from@mail.com
Content-Type: text/plain; charset=windows-1251
Content-Transfer-Encoding: 8bit"
) ){
echo 'Успешно отправлено!';
}else{
echo 'Отправка не удалась!';
}
Поля «От кого» (mail_from@mail.com), «Кому»(mail_to@mail.com) поменять на свои.
Нажать ВЫПОЛНИТЬ.
Битриксовская отправка письма — обёртка над функцией mail().
Если «Отправка не удалась!» функция mail не работает, свяжитесь с администрацией хостинга.
Далее нужно проверить срабатывает ли штатные события.
На D7:
use BitrixMainMailEvent;
$arFields = array(
"EVENT_NAME" => "ваше событие",
"LID" => "код вашего сайта",
"C_FIELDS" => array(
"EMAIL" => "mail_to@mail.com",
"BCC" => "mail_to@mail.com",
"DEFAULT_EMAIL_FROM" => "mail_from@mail.com",
),
"DUPLICATE"=>"Y",
);
$result=Event::send($arFields);
if($result->GetId()){
echo 'Успешно отправлено!';
}else{
echo 'Отправка не удалась!';
}
Проверьте что поля «DEFAULT_EMAIL_FROM», «EMAIL», «EVENT_NAME» заполнены верно.
Если не поддерживается D7:
$arEventFields = array(
"EMAIL_TO" => "mail_to@mail.com",
"BCC" => "mail_to@mail.com",
"DEFAULT_EMAIL_FROM" => "mail_from@mail.com",
"ORDER_LIST" => "состав заказа",
);
$result=CEvent::Send("ваше событие", "код вашего сайта", $arEventFields,'Y');
if(intval($result)){
echo 'Успешно отправлено!';
}else{
echo 'Отправка не удалась!';
}
Административный раздел->Рабочий стол->Настройки->Инструменты->SQL запрос пишем
select * from b_event order by id desc
Обращаем свое внимание на колонки SUCCESS_EXEC и DUPLICATE. Иногда нужно подождать некоторое время (недолго) пока отработает запись в лог. Первый при установленном значении ‘Y’ говорит нам что отправка произошла успешно. Второй что письмо продублировано на скрытую копию ВСС (например администратору о совершенном заказе).
Что же делать если значения ‘N’, а отправка простого mail() выдала ‘Успешно отправлено!’ ?
Параметр SUCCESS_EXEC сообщает
Y — все письма по всем почтовым шаблонам были успешно отправлены
F — все письма по всем почтовым шаблонам не смогли быть отправлены
P — часть писем отправлена успешно, часть писем — безуспешно
0 — почтовые шаблоны не были найдены
N — почтовое событие ещё не обрабатывалось функцией CEvent::CheckEvents
Если там стоит ‘N’
1) Возможно в настройках продукта включена отправка сообщений по крону. зайдите в файл /bitrix/php_interface/dbconn.php и проверьте не определены ли у вас константы BX_CRONTAB и BX_CRONTAB_SUPPORT, если да — убрать их.(ОСТОРОЖНО! Быть готовым вернуть всё в исходное состояние)
2) Если после этого SUCCESS_EXEC также N, то необходимо перейти в папку /bitrix/managed_cache/ и попытаться удалить содержимое обязательно через модуль управления структурой, а не через FTP. Если ошибка — исправить проблему с доступом продукта к папкам. Результатом должно быть удаление файлов и папок из кеша через модуль управления структурой.
3) если после виполения команды CEvent::CheckEvents(); в командной строке несколько писем с N меняют статус отправки на другой нужно добавлять и проверять cron-задачу или переключить отправку писем на хиты.
4) Поставить cron-задачу(проверить есть ли она вобще) или перенести отправку на хиты.
5) Код в init.php, некорректно работающий на cron. Проверьте там редиректы и пустые данные в переменной $_SERVER.
Если там стоит ‘F’(функция mail() по какой-то причине вернула False)
1)Может почтовый сервер не поддерживает формат письма.
Убрать BBC(добиваемся чтоб оно работало, но попробовать отключить можно)
Убрать дублирование email в заголовке
Установить Конвертировать 8-битные заголовки
2)Может быть это проблемы на стороне почтовой утилиты на сервере.
Если почта была настроена, но вдруг перестала отпарвляться, ошибку нужно искать в логах почтовой утилиты. В стандартном виртуальном окружении Битрикса это /home/bitrix/msmtp_default.log
проверьте также права на
/home/bitrix/.msmtprc
возможно прав для пользователя bitrix (если стантартное виртуальное окружение) не достаточно на прочтение. Поменяйте владельца на bitrix:bitrix
3) Если писем отправляется очень много.
В почтовых серверах может стоять ограничение на количество писем в минуту, час или день. Если лимит превышен, письма могут быть не доставлены. Ошибки можно увидеть в логах или узнать у техподдержки почтового сервера. Лечится увеличением пропускного лимита или уменьшением количества отправляемых писем. Например, убрать лишних получателей из копий, отключить лишние почтовые шаблоны.
4) В почтовом шаблоне письма есть заглушка #NAME#, а ключа с таким именем нет в массиве полей в b_event.
e-mail отправителя или получателя имеет неправильный формат;
— заглушека #NAME# не может подставиться;
— какой-то из необходимых заголовков не задан в почтовом шаблоне в административной части сайта;
— в почтовом клиенте неверно настроено соответствие заголовков;
— отправитель письма не соответствует тому, что ожидает почтовый сервер.
— Битрикс заполняет заглушку #BCC# в полях Кому и Копии только в письмах, отправляемые модулем Интернет-магазин (например создание заказа).Если вы добавите #BCC# в Кому или Копию в шаблон регистрации пользователя или в свой кастомный, или любой другой шаблон без приставки SALE — письмо не отправится и будет иметь статус отправки F.
5) Обработчики событий отправки писем сработали неверно.
6) Обратите внимание на функцию custom_mail. Если она определена значит заменяет стандартную mail. Даже если она отработала корректно (отослались письма) статус может быть F или 0. Проверьте тариф используемого SMTP, проверьте логины, пароли а также адрес отправителя. Обычно используют класс PhpMailer. Включите дебаг, посмотрите ошибки.
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
$from = 'адрес отправителя';
$mail = new PHPMailer(true);
$mail->SMTPDebug = 1; // включаем дебаг
$mail->isSMTP(); // включаем SMTP
$mail->Host = ''; // SMTP сервер
$mail->SMTPAuth = true; // включаем авторизацию
$mail->Username = $from; // SMTP логин
$mail->Password = ''; // SMTP пароль
$mail->SMTPSecure = 'ssl'; // включаем шифрование
$mail->Port = 465; // используемый TCP порт//Recipients
$mail->setFrom($from, 'Арт-Деко'); //от кого
$mail->addAddress(''); //кому
// Content
$mail->CharSet = "UTF-8"; //кодировка
$mail->isHTML(true); // формат письма HTML
$mail->Subject = '=test=';
$mail->Body = '=test body=';
$mail->send();
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/mail_log.log',serialize($mail->ErrorInfo).PHP_EOL,FILE_APPEND);
Если стоит NULL
API работает только с записями, у которых значение «N», попробуем исправить сам столбец таблицы.
Административный раздел->Рабочий стол->Настройки->Инструменты->SQL запрос пишем
alter table b_event modify SUCCESS_EXEC char(1) not null default 'N';
Если стоит «0»
1) Неправильно настроен шаблон сообщения.
Посмотрите правильность зополнения полей. Мало ли.
2) В почтовом шаблоне снята галочка активности или нет привязки к нужному сайту.
3) Обработчики событий отправки писем сработали неверно.
Если ничего не помогло, просите у хостера логи почтового сервера.
По возможности проверить размер таблицы b_event (через phpmyadmin к примеру).
Если дешевый тариф то посмотреть использование памяти сервером.
Возможно у хостера стоит ограничение на вес письма.
Если письмо отправилось, но вы его не видите не забудьте перепроверить спам фильтр на почте, на которую отправляли.
Без обратной связи сайт словно паралитик: все видит, а сказать ничего не может. Не поступают данные с веб — форм, корпоративные ящики не работают совсем или настраиваются с удивительными ухищрениями. Деньги заплачены, а про-стей-шая, э-ле-мен-тар-ней-шая, важ-ней-шая рабочая задача не решена! Что делать?
Проверяем настройки почтового события веб-формы и связанные шаблоны
Давайте перейдем по пути Панель управления -> Настройки -> Настройки продукта -> Почтовые события и выберем событие.
1. На первой вкладке галочки кодов языка включены?
2. На вкладке «Шаблоны» галочка имени сайта включена?
3. Почтовый шаблон активен?
4. Поле «От кого» заполнено верно (по умолчанию #DEFAULT_EMAIL_FROM#) ?
5. Поле «Кому» заполнено верно (по умолчанию #EMAIL#) ?
Все верно? Смотрим дальше. В настройках модуля веб-формы отключите галочку «использовать упрощенный режим». Перейдите в настройки формы на вкладку «дополнительно» и проверьте, включен ли флаг привязки к почтовому шаблону. Готово?
Перейдите по адресу Настройки -> Инструменты -> SQL-запрос и выполните такой запрос:
select * from b_event where event_name like ‘%form%’ order by date_insert desc
Найдя событие выполнения формы, просмотрите поле SUCCESS_EXEC. Если видите «Y», то письмо из продукта ушло, и вам следует отправить запрос в техподдержку хостинга. Если видите «N», то перейдите в файл
/bitrix/php_interface/dbconn.php
и проверьте, определены ли 2 переменные: BX_CRONTAB и BX_CRONTAB_SUPPORT. Если да, то отмените определение.
Повторите SQL-запрос и снова просмотрите поле SUCCESS_EXEC. Если снова видите «N», очистите кэш в папке /bitrix/managed_cache/ через модуль управления структурой. Ни в коем случае ни через FTP! Если модуль выдаст ошибку, исправьте права доступа к папкам.
Если же значение «F», то функция mail() вернула значение False при отправке. Почему так бывает:
1. Не настроена функция mail() на хостинге. Обратитесь в техподдержку хостера.
2. Почтовый сервер не поддерживает формат письма. Попробуйте изменять настройки отправки, убирать поле ВСС, убирать галочку «Дублировать email адрес в заголовке», ставить «Конвертировать 8-битные заголовки». Если не поможет, запросите у администратора логи почтового сервера.
Наконец, если в поле «0», вернитесь к началу, настройкам почтовых событий, и проверьте заново.
Спасибо за внимание!
Читайте свежий выпуск «Кладовки программиста» каждый день!
Назад в раздел
