Ir a la documentación
Ruby

Instalación

Una gema, sin dependencias en tiempo de ejecución, para Ruby 3.2 o superior.

Instalación

La versión actual es 0.0.1. Tiene un método por cada método del SDK de TypeScript, con el mismo nombre en snake_case, y la comprobación de paridad de la gema hace fallar la compilación cuando falta alguno o envía una solicitud distinta.

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 configura el cliente compartido una vez, y a partir de entonces OpenEmail.emails, OpenEmail.threads y todos los demás espacios de nombres lo usan, en todos los archivos. Si lo omites, la primera llamada construye el cliente a partir de OPENEMAIL_API_KEY.

Una respuesta es el JSON analizado como un Hash con claves Symbol, así que email[:id] lee el id. Las claves conservan los nombres de la API, y por eso un campo como scheduledAt sigue en camelCase mientras que los métodos y sus opciones están en snake_case.

Que send devuelva un resultado no significa que el mensaje haya salido. Un envío programado o cancelable vuelve como queued o scheduled y se resuelve más tarde. Lee status, no el hecho de que la llamada haya devuelto algo.

Dónde funciona

Ruby 3.2 o superior, sin dependencias en tiempo de ejecución. El cliente HTTP es Net::HTTP, de la biblioteca estándar, con un pool de conexiones persistentes, así que una segunda solicitud a la API reutiliza la conexión que abrió la primera.

Un mismo cliente se puede compartir entre hilos de ejecución sin riesgo, así que un proceso de Puma o Sidekiq solo necesita uno. Tras un fork, como en el modo clúster de Puma, en Unicorn o en Resque, el proceso hijo abre sus propias conexiones en lugar de reutilizar las del padre.

El cliente lleva una clave de API del espacio de trabajo que puede enviar correo y leer el buzón, así que su sitio es un servidor, un trabajo en segundo plano o una herramienta que se ejecute en tu propia máquina. Guarda la clave en Rails.application.credentials o en una variable de entorno, nunca en el código.