Отправка почты Битрикс через 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';
	
…..

Только не забудьте указать правильные пути.

Хостинг для ваших проектов