Битрикс: Как в имейле отправить картинку?

В Bitrix Framework есть несколько способов отправки картинок в электронной почте.

Первый способ - вставка вложения. Это наиболее распространенный способ отправки картинок в электронной почте. Для этого вы можете использовать метод AddFile класса CEventMessage. Ниже приведен пример кода:

// ID сообщения
$messageId = 1;
// Путь к файлу
$filePath = $_SERVER['DOCUMENT_ROOT'] . '/path/to/image.jpg';

// Получаем объект сообщения
$messageObj = CEventMessage::GetByID($messageId)->Fetch();

if ($messageObj) {
  // Создаем новое вложение
  $fileArray = CFile::MakeFileArray($filePath);
  $fileId = CFile::SaveFile($fileArray, 'mail');

  // Изменяем тело сообщения, добавляя ссылку на вложение
  $body = str_replace("#FILE_LINK#", CFile::GetPath($fileId), $messageObj['MESSAGE']);

  // Обновляем сообщение
  $updateFields = array(
    'FILE' => $fileId,
    'MESSAGE' => $body,
  );

  CEventMessage::Update($messageId, $updateFields);
}

В этом примере мы получаем объект сообщения по его ID, создаем новое вложение с помощью CFile::MakeFileArray() и CFile::SaveFile(), затем изменяем тело сообщения, заменяя метку #FILE_LINK# на ссылку на вложение, и обновляем сообщение с помощью CEventMessage::Update().

Второй способ - встраивание изображения. Этот способ позволяет встроить изображение непосредственно в тело сообщения, используя кодирование Base64. Вот пример кода:

// ID сообщения
$messageId = 1;
// Путь к изображению
$filePath = $_SERVER['DOCUMENT_ROOT'] . '/path/to/image.jpg';

// Получаем объект сообщения
$messageObj = CEventMessage::GetByID($messageId)->Fetch();

if ($messageObj) {
  // Кодируем изображение в Base64
  $fileData = file_get_contents($filePath);
  $base64Data = base64_encode($fileData);

  // Вставляем Base64-кодированное изображение в тело сообщения
  $body = str_replace("#BASE64_IMAGE#", $base64Data, $messageObj['MESSAGE']);

  // Обновляем сообщение
  $updateFields = array(
    'MESSAGE' => $body,
  );

  CEventMessage::Update($messageId, $updateFields);
}

В этом примере мы получаем объект сообщения по его ID, читаем содержимое файла с помощью file_get_contents(), кодируем его в Base64 с помощью base64_encode(), затем вставляем Base64-кодированное изображение в тело сообщения, заменяя метку #BASE64_IMAGE#, и обновляем сообщение с помощью CEventMessage::Update().

В обоих случаях вам необходимо использовать метки в теле сообщения (например, #FILE_LINK# или #BASE64_IMAGE#), чтобы указать место, где должна быть вставлена картинка.