Задать вопрос
@Yivi

Почему не отправляется сообщение с PDF файлом на почту после оформления заказа пользователем 1С-Битрикс?

Есть модуль, который должен отправлять PDF файл на почту пользователя после оформления им заказа. Файл уже существует в структуре модуля, он просто должен отправляться, но сообщение так и не приходит, не понимаю почему.

Структура модуля:
local/modules/pdf.generator/
├── install/
│ ├── index.php
│ └── version.php
├── lib/eventhandler.php
├── pdf/file.php
└── include.php

1. Файл `install/index.php`
<?php
use Bitrix\Main\ModuleManager;

class pdf_generator extends CModule
{
    public $MODULE_ID = "pdf.generator";
    public $MODULE_NAME = "PDF Generator Module";
    public $MODULE_DESCRIPTION = "Generates and sends PDF file with order";
    public $PARTNER_NAME = "My Company";
    public $PARTNER_URI = "https://mycompany.com";

    public function __construct()
    {
        $arModuleVersion = [];
        include __DIR__ . '/version.php';

        $this->MODULE_VERSION = $arModuleVersion["VERSION"];
        $this->MODULE_VERSION_DATE = $arModuleVersion["VERSION_DATE"];
    }

    public function InstallDB()
    {
        ModuleManager::registerModule("pdf.generator");
        RegisterModuleDependences(
            "sale",
            "OnSaleOrderSaved",
            "pdf.generator",
            "\\PdfGenerator\\EventHandler",
            "onSaleOrderSaved"
        );
        return true;
    }

    public function UnInstallDB()
    {
        UnRegisterModuleDependences(
            "sale",
            "OnSaleOrderSaved",
            "pdf.generator",
            "\\PdfGenerator\\EventHandler",
            "onSaleOrderSaved"
        );
        ModuleManager::unRegisterModule("pdf.generator");
        return true;
    }

    public function DoInstall()
    {
        $this->InstallDB();
    }

    public function DoUninstall()
    {
        $this->UnInstallDB();
    }
}

2. Файл `eventhandler.php`
<?php
namespace PdfGenerator;

use Bitrix\Main\Mail\Event;
use Bitrix\Sale\Order;
use Bitrix\Sale\PropertyValue;
use CFile;
use Bitrix\Main\Diag\Debug;

class EventHandler
{
    public static function onSaleOrderSaved(Order $order)
    {
        if ($order->getId() && $order->isNew())
        {
            $filePath = $_SERVER["DOCUMENT_ROOT"] . "/local/modules/pdf.generator/pdf/file.pdf";

            Debug::writeToFile("Processing order ID: " . $order->getId(), "Order Processing", "/upload/log.txt");

            if (file_exists($filePath)) {
                $arFile = CFile::MakeFileArray($filePath);

                if ($arFile) {
                    $fileId = CFile::SaveFile($arFile, "temp");
                    Debug::writeToFile("File ID: " . $fileId, "File Save", "/upload/log.txt");

                    if ($fileId) {
                        // Получение email из свойств заказа
                        $propertyCollection = $order->getPropertyCollection();
                        $emailProperty = $propertyCollection->getUserEmail();
                        $userEmail = $emailProperty ? $emailProperty->getValue() : '';

                        Debug::writeToFile("Recipient email: " . $userEmail, "Email Recipient", "/upload/log.txt");

                        $result = Event::send([
                            "EVENT_NAME" => "SALE_NEW_ORDER",
                            "LID" => "s1",
                            "C_FIELDS" => [
                                "#EMAIL#" => $userEmail,
                                "ORDER_ID" => $order->getId(),
                                "FILES" => [$fileId],
                            ],
                        ]);

                        Debug::writeToFile("Email send result: " . ($result->isSuccess() ? "Success" : "Failure"), "Email Sending", "/upload/log.txt");
                    } else {
                        Debug::writeToFile("Failed to save file.", "File Save Error", "/upload/log.txt");
                    }
                } else {
                    Debug::writeToFile("Failed to create file array.", "File Creation Error", "/upload/log.txt");
                }
            } else {
                Debug::writeToFile("File does not exist: " . $filePath, "File Error", "/upload/log.txt");
            }
        }
    }
}

3. Файл `include.php`
<?php
Bitrix\Main\Loader::registerAutoLoadClasses("pdf.generator", [
"\\PdfGenerator\\EventHandler" => "lib/eventhandler.php",
]);


В логах при этом я получаю все данные, но сообщение не приходит:
Order Processing:
Processing order ID: 31

File Save:
File ID: 955

Email Recipient:
Recipient email: ******@gmail.com

Email Sending:
Email send result: Success
  • Вопрос задан
  • 54 просмотра
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы