Ruby+SES(smtp)でメールを送信

例によってシンプルな情報が少ないので、すこしまとめてみた。

設定の確認とCredentialの作成

Management Consoleの「SES > SMTP Settings」でSMPTの設定の確認と、Credentialを作成。*1

メールアドレスの認証

sandbox状態だと認証された送信者・受信者でしかメールを送受信できないので、メールを登録する。productionにするには要リクエスト

Rubyのコード

1.8系の場合、要tlsmail

require 'rubygems'
require 'time'
require 'tlsmail' # 1.9の場合は不要、、、なはず

HOST = 'email-smtp.us-east-1.amazonaws.com'
PORT = 587
HELO = 'localhost.localdomain'

ACCESS_KEY_ID     = '...'
SECRET_ACCESS_KEY = '...'

Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)

def send_mail(subject, body, from_addr, *to_addrs)
  Net::SMTP.start(HOST, PORT, HELO, ACCESS_KEY_ID, SECRET_ACCESS_KEY, :plain) do |smtp|
    smtp.send_message(<<-EOS, from_addr, *to_addrs)
From: #{from_addr}
To: #{to_addrs.join(', ')}
Date: #{Time.now.rfc2822}
Subject: #{subject}

#{body}
    EOS
  end
end

send_mail('hello', <<-EOS, 'from@example.com', 'to@example.net')
this is pen.
EOS

*1:同じ権限のユーザをIAMで作っても認証エラー…APIにそれっぽい権限を与えるActionも見つからないし、何なんだろう?