Ir al contenido

Ruby

send.rb
require "net/http"
require "json"
require "uri"
class SpacePost
API = URI("https://api.spacepost.dev")
class Error < StandardError
attr_reader :status_code, :name
def initialize(body, status)
@status_code = status
@name = body["name"]
super("#{body["name"]}: #{body["message"]}")
end
end
def initialize(api_key = ENV.fetch("SPACEPOST_API_KEY"))
@api_key = api_key
end
def send_email(email, idempotency_key: nil)
req = Net::HTTP::Post.new("/emails")
req["Authorization"] = "Bearer #{@api_key}"
req["Content-Type"] = "application/json"
req["Idempotency-Key"] = idempotency_key if idempotency_key
req.body = JSON.generate(email)
res = Net::HTTP.start(API.host, API.port, use_ssl: true, read_timeout: 15) { |http| http.request(req) }
body = JSON.parse(res.body)
raise Error.new(body, res.code.to_i) unless res.is_a?(Net::HTTPSuccess)
body # {"id" => "..."}
end
end
puts SpacePost.new.send_email(
from: "Acme <hello@acme.com>",
to: ["delivered@test.spacepost.dev"],
subject: "Hello from Ruby",
html: "<p>It works.</p>"
)

¿Usas Rails? El relé SMTP funciona con Action Mailer sin cambios.