Установка
Один пакет Composer, PHP 8.2 и новее, с расширениями curl и json.
Установка
Текущий релиз: 0.0.1. В нём есть метод для каждого метода TypeScript SDK под тем же именем, а проверка соответствия пакета роняет сборку, когда какой-то метод пропадает или отправляет другой запрос.
composer require openemail/sdk<?php use OpenEmail\OpenEmail; require __DIR__ . '/vendor/autoload.php'; $client = new OpenEmail(); $email = $client->emails->send([ 'from' => 'Acme Billing <[email protected]>', 'to' => '[email protected]', 'subject' => 'Your September invoice', 'html' => '<p>Invoice attached.</p>',]); echo $email['id'], ' ', $email['status'], PHP_EOL;new OpenEmail() читает ключ из OPENEMAIL_API_KEY, поэтому в коде нет учётных данных. Передайте apiKey:, если ваша конфигурация хранится в другом месте. Чтобы обращаться к одному клиенту откуда угодно, настройте его один раз через OpenEmail::init() и получайте через OpenEmail::getClient().
Ответ представляет собой декодированный JSON в виде ассоциативного массива, поэтому $email['id'] читает id. Ключи сохраняют имена из API, как и методы с их именованными аргументами, поэтому scheduledAt и idempotencyKey: пишутся здесь так же, как в справочнике API.
То, что send вернул результат, не значит, что сообщение ушло. Запланированная или отменяемая отправка возвращается со статусом queued или scheduled и завершается позже. Читайте status, а не сам факт возврата из вызова.
Где он работает
PHP 8.2 и новее, с расширениями curl и json, которые есть почти в любой сборке, и без других зависимостей. Запросы идут через один дескриптор cURL на клиент, поэтому второй запрос к API переиспользует соединение, открытое первым, а сжатый ответ cURL распаковывает за вас.
Он работает под PHP-FPM, Apache, из командной строки и в долгоживущих воркерах, таких как обработчик очереди, RoadRunner или FrankenPHP. Под PHP-FPM каждый запрос начинается с чистого листа, поэтому создавайте клиент один раз на запрос. В долгоживущем процессе держите один клиент на всё время жизни процесса. После pcntl_fork дочерний процесс открывает собственное соединение, а не переиспользует родительское.
Клиент несёт API-ключ рабочего пространства, который может отправлять почту и читать почтовый ящик, поэтому его место на сервере, в задании или в инструменте, который работает на вашей собственной машине. Храните ключ в переменной окружения или в секретах вашего фреймворка, но никогда в коде.