Ruby
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" => "..."} endend
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.