Saltar para a documentação
Ruby

Instalar

Uma gem, sem dependências em tempo de execução, para Ruby 3.2 ou superior.

Instalar

A versão atual é a 0.0.1. Tem um método para cada método do SDK de TypeScript, com o mesmo nome em snake_case, e a verificação de paridade da gem falha o build quando algum fica de fora ou envia um pedido diferente.

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 o cliente partilhado uma vez e, a partir daí, OpenEmail.emails, OpenEmail.threads e todos os outros espaços de nomes usam-no, em todos os ficheiros. Se o omitir, a primeira chamada constrói o cliente a partir de OPENEMAIL_API_KEY.

Uma resposta é o JSON analisado como um Hash com chaves Symbol, por isso email[:id] lê o id. As chaves mantêm os nomes da API, e é por isso que um campo como scheduledAt continua em camelCase, enquanto os métodos e as suas opções estão em snake_case.

O facto de send ter terminado não significa que a mensagem tenha partido. Um envio agendado ou cancelável volta como queued ou scheduled e resolve-se mais tarde. Leia status, e não o facto de a chamada ter terminado.

Onde corre

Ruby 3.2 ou superior, sem dependências em tempo de execução. O cliente HTTP é o Net::HTTP da biblioteca padrão, com um pool de ligações persistentes, por isso um segundo pedido à API reutiliza a ligação que o primeiro abriu.

Um mesmo cliente pode ser partilhado entre threads com segurança, por isso um processo Puma ou Sidekiq só precisa de um. Depois de um fork, como no modo cluster do Puma, no Unicorn ou no Resque, o processo filho abre as suas próprias ligações em vez de reutilizar as do pai.

O cliente transporta uma chave de API do espaço de trabalho que pode enviar correio e ler a caixa de correio, por isso o seu lugar é num servidor, numa tarefa ou numa ferramenta que corra na sua própria máquina. Guarde a chave em Rails.application.credentials ou numa variável de ambiente, nunca no código.