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 и хранится там до выбранного срока. Собственный агент отвечает за выполнение сценария, а не заменяет этот почтовый вход. Результаты на агенте передаются на платформу только при включённом зеркалировании. Явно созданные сценарием записи и выгрузки имеют свой срок хранения.