В интернете полно примеров как можно подключить 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.