Skip to main content

Send an email

require 'net/http'
require 'json'
require 'uri'

uri = URI("https://app.usesendi.com/api/emails")
http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true

request = Net::HTTP::Post.new(uri)
request["Authorization"] = "Bearer snd_your_api_key"
request["Content-Type"] = "application/json"
request.body = {
  from: "you@yourdomain.com",
  to: ["user@example.com"],
  subject: "Hello from Sendi",
  html: "<p>It just works.</p>"
}.to_json

response = http.request(request)
data = JSON.parse(response.body)
puts data["id"]

With name in from

request.body = {
  from: "Your App <noreply@yourdomain.com>",
  to: ["user@example.com"],
  subject: "Welcome",
  html: "<h1>Welcome aboard</h1>"
}.to_json

Using Rails (Action Mailer)

Configure in config/environments/production.rb:
config.action_mailer.delivery_method = :sendi
Create lib/sendi_delivery.rb:
class SendiDelivery
  def initialize(settings)
    @api_key = settings[:api_key]
  end

  def deliver!(mail)
    uri = URI("https://app.usesendi.com/api/emails")
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true

    request = Net::HTTP::Post.new(uri)
    request["Authorization"] = "Bearer #{@api_key}"
    request["Content-Type"] = "application/json"
    request.body = {
      from: mail.from.first,
      to: mail.to,
      subject: mail.subject,
      html: mail.html_part&.body&.to_s,
      text: mail.text_part&.body&.to_s
    }.to_json

    http.request(request)
  end
end