Загрузка...

Отправка писем через smtp в Битрикс

В процессе настройки системы Б24 для одного клиента, столкнулся с проблемой отправки почтовых уведомлений. Сотрудникам не приходили письма-приглашения на их личную почту от портала. Решил составить эту заметку, так как нужно было вручную настроить эту функциональность без использования плагинов.

Проверка конфигурации отображала проблему и подсказку в админке:

bitrix admin

SMTP

Битрикс при отправке почтовых уведомлении использует обычную функцию mail в PHP, но предоставляет функцию custom_mail, которую программист может составить сам. Если custom_mail есть, то вызывается код этой функции, если нет, то обычный mail.

Будем использовать PHPMailer в качестве реализации функции custom_mail. В /path/to/Project/bitrix/php_interface/ создаём файл init.php (где /path/to/Project - это путь к проекту на битрикс на сервере) и описываем сильно упрощённый код (как минимум, все учётные данные должны быть вынесены в админку):

<?php

namespace PHPMailer\PHPMailer;

function custom_mail($to, $subject, $message)
{
    require_once($_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php');

    $mail = new PHPMailer();

    $mail->isSMTP();
    $mail->SMTPAuth = true;
    $mail->SMTPKeepAlive = true;
    $mail->SMTPDebug = 1;
    $mail->SMTPSecure = 'ssl';
    $mail->Host = 'ВАШ СЕРВЕР SMTP, Например: smtp.yandex.ru';
    $mail->Port = 'ВАШ ПОРТ SMTP';
    $mail->Username = 'ВАШ Username';
    $mail->Password = 'ВАШ Password';
    $mail->CharSet = 'UTF-8';

    $mail->setFrom($mail->Username);
    $mail->addAddress(trim($to));
    $mail->Subject = $subject;
    $mail->msgHTML($message);

    $result = $mail->send();

    if ($result) {
        // дополнительные возможности
        // $mail->clearAddresses();
        // $mail->clearAttachments();
        return true;
    }

    return false;
}

Хочу отметить, что в эту функцию прилетает чуть больше аргументов. Но вы всегда сможете подсмотреть правильную сигнатуру в доке битрикса. К тому же внутри кода неплохо было бы обрабатывать такие ситуации как работа с вложениями, обработка заголовков и т.д. Я просто привёл самый минимум для общего понимания.

Потом на сервере, в корне проекта на bitrix, если глобально установлен composer, выполняем команду установки phpmailer:

composer require phpmailer/phpmailer

Если composer не установлен, то устанавливаем:

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer

MAIL PHP

Вариант №2. Может оказаться так что на сервере не установлены бинарные файлы агентов передачи почты и основная функция mail в PHP не работает. Например PHP по умолчанию использует sendmail. В этом случае моя проблема была решена ещё проще, а именно установкой требуемого софта на сервер для поддержки функции mail. Установка и настройка по умолчанию sendmail:

apt-get install sendmail
sendmailconfig // на все системные вопросы отвечаем "Да"

В php.ini:

sendmail_path = "/usr/sbin/sendmail -t -i -f noreply@your_service.com"

Потом перезапускаем php-fpm и всё работает и без SMTP.



Похожие заметки:

Конфиг под Битрикс nginx+php-fpm+ssl+http2 на ubuntu

Настраиваем хост под Битрикс на своем VDS

Открыть здесь

Ajax подгрузка контента Битрикс

Ajax подгрузка контента, бесконечный скроллинг, «вебдванольная постраничка» — этот подход называют по разному, но суть одна — при прокрутке к концу списка, автоматически подгружается еще контент. В этой статье я опишу простой подход к реализации сего.

Открыть здесь


Перед тем как писать комментарии, рекомендую ознакомиться:

Markdown синтаксис »

Оформление кода »

Нужна аватарка »

Комментарии


1
avatar

Леня сказал 28-05-2020 в 14:26


Спасибо за статью! Сегодня пригодилась