Перейти к документации
Ruby

Установка

Один гем, без зависимостей во время выполнения, Ruby 3.2 и новее.

Установка

Текущий релиз: 0.0.1. В нём есть метод для каждого метода TypeScript SDK под тем же именем в snake_case, а проверка соответствия гема роняет сборку, когда какой-то метод пропадает или отправляет другой запрос.

bundle add openemail
send_email.rb
require "openemail" OpenEmail.init(api_key: ENV.fetch("OPENEMAIL_API_KEY")) email = OpenEmail.emails.send(  from: "Acme Billing <[email protected]>",  to: "[email protected]",  subject: "Your September invoice",  html: "<p>Invoice attached.</p>") puts email[:id], email[:status]

OpenEmail.init один раз настраивает общий клиент, и с этого момента OpenEmail.emails, OpenEmail.threads и все остальные пространства имён используют его в каждом файле. Если пропустить этот шаг, первый же вызов соберёт клиент из OPENEMAIL_API_KEY.

Ответ представляет собой разобранный JSON в виде Hash с ключами типа Symbol, поэтому email[:id] читает id. Ключи сохраняют имена из API, поэтому поле вроде scheduledAt остаётся в camelCase, тогда как методы и их параметры пишутся в snake_case.

То, что send вернул результат, не значит, что сообщение ушло. Запланированная или отменяемая отправка возвращается со статусом queued или scheduled и завершается позже. Читайте status, а не сам факт возврата из вызова.

Где он работает

Ruby 3.2 и новее, без зависимостей во время выполнения. HTTP-клиент: Net::HTTP из стандартной библиотеки с пулом постоянных (keep-alive) соединений, поэтому второй запрос к API переиспользует соединение, открытое первым.

Один клиент можно безопасно разделять между потоками, поэтому процессу Puma или Sidekiq нужен только один. После форка, как в кластерном режиме Puma, в Unicorn или Resque, дочерний процесс открывает собственные соединения, а не переиспользует родительские.

Клиент несёт API-ключ рабочего пространства, который может отправлять почту и читать почтовый ящик, поэтому его место на сервере, в задании или в инструменте, который работает на вашей собственной машине. Храните ключ в Rails.application.credentials или в переменной окружения, но никогда в коде.