Есть модуль, который должен отправлять 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