К содержимому

Документация

PHP SDK: Почта: письмо и вложения

Создайте адрес кнопкой «+» в верхней полосе раздела «Входящая почта». Отправляйте на него письма, пересылайте полученные или добавляйте адрес в копию. Ограничивать отправителей необязательно: пустой список принимает любые адреса. Фильтр находится в дополнительных настройках адреса. В карточке опубликованного сценария откройте «Входящие письма» и подключите адрес. Сценарий запускается после проверки письма. Отправлять письма из этого SDK нельзя.

Все примеры ниже выполняются внутри run(\Sdk\Context $ctx). Проверяйте available(): пробный запуск не получает настоящую переписку.

available

available(): bool

Есть ли в текущем прогоне проверенное письмо. В ручном и пробном запуске возвращается false.

if (!$ctx->mail()->available()) return;

current

current(): array

Тема, отправитель, текст, вложения и срок хранения текущего письма. Служебные заголовки и чужие адресаты не выдаются. Объём текста ограничен 1 MiB, признак text_truncated сообщает о сокращении.

if ($ctx->mail()->available()) {
    $message = $ctx->mail()->current();
    $ctx->log($message['subject']);
}

text

text(): string

Получить текст письма без HTML.

if ($ctx->mail()->available()) {
    $text = $ctx->mail()->text();
    $ctx->log('Символов в письме: '.mb_strlen($text));
}

attachments

attachments(): array

Список проверенных вложений: id, name, mime, size. Ссылки на загрузку требуют прав текущего пространства.

if ($ctx->mail()->available()) {
    foreach ($ctx->mail()->attachments() as $file) {
        $ctx->log($file['name']);
    }
}

document

document(string $id): Document

Извлечь текст, листы Excel, таблицы Word или страницы PDF из собственного вложения. Ссылки не открываются автоматически. Не более восьми разборов документов на прогон.

if ($ctx->mail()->available()) {
    foreach ($ctx->mail()->attachments() as $file) {
        $document = $ctx->mail()->document($file['id']);
        if (!$document->complete()) $ctx->fail('Разделите большой документ на части');
        foreach ($document->rows() as $row) {
            $ctx->log(json_encode($row, JSON_UNESCAPED_UNICODE));
        }
    }
}

attachment

attachment(string $id): string

Прочитать исходные байты вложения до 10 MiB. Для таблиц и текста удобнее document(). Доступ закрывается после удаления письма, истечения срока или отключения прав.

if ($ctx->mail()->available()) {
    foreach ($ctx->mail()->attachments() as $file) {
        $bytes = $ctx->mail()->attachment($file['id']);
        $ctx->log('Получено байт: '.strlen($bytes));
    }
}

Почтовые вложения доступны только в обработке связанного письма. Подставить идентификатор другого письма в параметры ручного прогона нельзя. Реплей не читает живую почту.

Обработка на своём агенте

Место выполнения определяется настройками источника. Если выбран ваш агент, Akmelo поставит ему задание, а тот запросит письмо и вложения через защищённое соединение. Код SDK остаётся тем же. document() разбирает файл локальным обработчиком агента, включая расчёт поддерживаемых формул Excel. Задание не содержит копию письма; доступ проверяется при каждом чтении и прекращается по сроку, удалению, отключению привязки или отзыву прав. Для первого чтения нужна связь с платформой.

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