Битрикс custom_mail – простой вариант

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

Как при помощи custom mail отлавливать исходящие почтовые сообщения в Битриксе

Есть несколько важных составляющих, которые помогут прояснить общую картину:
1. Если ваша почта не работает, зайдите в Командную PHP-строку, и наберите:

$email = 'test@gmail.com';
mail($email, 'theme', 'message');

где $email – ваш почтовый ящик. На этом шаге будет видно отправляется ли почта в принципе, если нет – пишите в поддержку хостинга. Если письмо приходит идем дальше.

2. Усложняем наш код, отправляем почтовое событие:

$email = 'test@gmail.com';
$arEventFields = array(
    "EMAIL" => $email,
);
$site = 's1';
CEvent::Send("SALE_ORDER_PAID", $site, $arEventFields);

SALE_ORDER_PAID – просто существующее событие. Обычно, на этом этапе происходят ошибки. Чтобы проверить статус всех сообщений, вам необходимо перейти в таблицы:
/bitrix/admin/perfmon_table.php?PAGEN_1=1&SIZEN_1=20&lang=ru&table_name=b_event&by=ID&order=desc

Статус SUCCESS_EXEC = F – означает Fail, ошибку. Y – Yes, успешно отправлено. Что самое странное, оба этих статуса не гарантируют отправку сообщения.. Вот тут нам и понадобится 3ий шаг.

3. Добавляем функцию custom_mail в init.php:

function custom_mail($to, $subject, $message, $additional_headers='', $additional_parameters='')
{
	//AddMessage2Log(
	//	'To: '.$to.PHP_EOL.
	//	'Subject: '.$subject.PHP_EOL.
	//	'Message: '.$message.PHP_EOL.
	//	'Headers: '.$additional_headers.PHP_EOL.
	//	'Params: '.$additional_parameters.PHP_EOL
	//);
	$emailFrom = 'info@site.ru';
	$copy = 'info@site.ru';
	$headers = "From: " . $emailFrom . "\r\n";
	$headers .= "Reply-To: ". $emailFrom . "\r\n";
	$headers .= "CC: info@site.ru\r\n";
	$headers .= "MIME-Version: 1.0\r\n";
	$headers .= "Content-Type: text/html; charset=1251\r\n";

	mail($to, $subject, $message, $headers);
	mail($copy, $subject, $message, $headers);
}

AddMessage2Log – при помощи этого, будет видно что приходит нам из почтового шаблона. Включается в dbconn.php:
define(“LOG_FILENAME”, $_SERVER[“DOCUMENT_ROOT”].”/log.txt”);

На что стоит обратить внимание в шаге 3:
– во-первых, у меня используется кодировка 1251, на вашем проекте скорей всего будет UTF-8
– во-вторых, отправляю стандартную функцию не просто 2 раза, но еще и с копией (поле CC:…)

$message – уже содержит весь хтмл, поэтому в хедерс мы и указываем Content-Type: text/html.

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *