Отправка почты Битрикс через SMTP
Очередная не совсем понятная для меня странность в 1С-Битрикс, это невозможность настройки отправки email с сайта через SMTP сервер из коробки.
Мне понадобилось сделать отправку данных веб-формы Битрикс с вложениями используя SMTP сервер.
В Маркетплейсе я нашел несколько бесплатных модулей для того, чтобы реализовать эту возможность, но решил обойтись без них, поскольку это сделать достаточно просто. Я воспользуюсь библиотекой PHPMailer (https://github.com/PHPMailer/PHPMailer).
За отправку почты в Битриксе отвечает функция bxmail()
, она действует таким образом: Сначала проверяется на существование функция custom_mail()
и если она существует, то отправка писем осуществляется с помощью нее.
Если custom_mail()
не существует, то уже вызывается стандартная функция PHP mail()
и почта отправляется с помощью нее.
Сначала установим PHPMailer, это можно сделать в ручную, скачав и разархивировав его файлы например в папку /local/ php_interface /libs/phpmailer
или через Composer (ссылка на статью установка Composer в Битрикс).
Я установил через Composer.
Далее переопределяем функцию custom_mail()
в файле /local/php_interface/init.php
function custom_mail ($to, $subject, $message, $additionalHeaders = '')
{
$mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->isSMTP();
$mail->SMTPAuth = true;
$mail->SMTPDebug = 0;
$mail->Host = 'smtp-server';
$mail->Port = 25;
$mail->Username = 'smtp-login';
$mail->Password = 'smtp-password';
$mail->IsHTML = true;
$mail->CharSet = 'UTF-8';
$to = str_replace(' ','', $to);
$address = explode(',', $to);
foreach ($address as $addr)
$mail->addAddress($addr);
$headers = explode("\n", $additionalHeaders);
$attachHeader = 'Content-Type: multipart/mixed; boundary=';
foreach( $headers as $h )
{
if( stripos($h, $attachHeader) === 0 )
{
$bndr = substr($h, strlen($attachHeader));
$bndr = trim($bndr, '"');
$mail->ContentType = 'multipart/mixed; boundary="' . $bndr . '"';
}
}
$mail->Subject = $subject;
$mail->Body = $message;
$mail->From = 'test@test.ru';
$mail->send();
}
Если вы просто скачали и добавили файлы PHPMailer в папку /local/php_interface/lib/
, то вам нужно будет добавить в начале функции строки:
function custom_mail ($to, $subject, $message, $additionalHeaders = '')
{
require_once $_SERVER["DOCUMENT_ROOT"] . '/local/php_interface/lib/PHPMailer/src/PHPMailer.php';
require_once $_SERVER["DOCUMENT_ROOT"] . '/local/php_interface/lib/PHPMailer/src/SMTP.php';
require_once $_SERVER["DOCUMENT_ROOT"] . '/local/php_interface/lib/PHPMailer/src/Exception.php';
…..
Только не забудьте указать правильные пути.