LoginSignup
3

More than 5 years have passed since last update.

Iron.ioを使用してバックグラウンドジョブからメールを送信

Last updated at Posted at 2018-07-17

バックグラウンドジョブからユーザーにメールを送りたいと思ったことはありませんか?

ユーザーを、あなたのシステムがメールプロバイダーにリクエストを終わるまで待たせるのは良くありません。また、ハンドシェイクして、メールが送信完了になるまで待足せるのも良くないです。

早くて簡単に「Sendgrid」,「Iron Worker」、「Ruby」を使用してメールを送信しましょう。
「Iron Worker」はDockerを元にしていますので、あなたの好きなプログラミング言語を使用できます。この事は、他のバックグラウンドサービスと比べた場合の優位点になります。

  • 新しいディレクトリーにアプリを作りましょう。 Gemfileに下記を追加して下さい。
source 'https://rubygems.org'
gem 'sendgrid-ruby'
gem 'iron_worker', '>= 3.0.0'
  • 「send_email.rb」ファイルを作成して下さい。このファイルは、メールを送ります。

私たちはIron CLIを使用したアプローチをしますが、もしかするとあなたはIron Ruby Gemを使用したアプローチを望むかもしれません。

require_relative 'bundle/bundler/setup'
require 'iron_worker'
require 'sendgrid-ruby'
include SendGrid

from = Email.new(email: IronWorker.payload["from"])
to = Email.new(email: IronWorker.payload["to"])
subject = IronWorker.payload["subject"]
content = Content.new(type: 'text/plain', value: IronWorker.payload["body"])

mail = Mail.new(from, subject, to, content)
sg = SendGrid::API.new(api_key: ENV['SENDGRID_API_KEY'])
response = sg.client.mail._('send').post(request_body: mail.to_json)
puts response.status_code
puts response.body
puts response.headers
  • 「payload.json」ファイルを作成して下さい。このファイルはメールを送る時にRubyが使用するデータになります。
{
  "from": "test@example.com",
  "to": "you@example.com",
  "subject": "It works!",
  "body": "Hello from IronWorker"
}
  • Dockerの依存関係をインストールし、コードを圧縮して「Iron.io」へアップロードします。

注意;この記事ではIronのRubyベースのDocker イメージを使用しますが、あなた独自のDockerイメージも使用出来ます。

> docker run --rm -v "$PWD":/worker -w /worker iron/ruby:dev bundle install --standalone --clean
> zip -r email_worker.zip .
> iron worker upload -e SENDGRID_API_KEY=YOUR_SENDGRID_API_KEY --name email_worker --zip email_worker.zip iron/ruby ruby send_email.rb

「Iron.io」へ圧縮したファイルをアップロード終えたら、いつでもあなたの好きな時にメールを送る事が出来ます。

  • Iron CLIを使用してメールを送って見ましょう。
> iron worker queue --payload-file payload.json --wait email_worker

下記のような結果がコンソールに出力されたら成功です。
Iron_CLI_output.png

まとめ

Iron.io ワーカーを使用する事で、バックグラウンドジョブを簡単に実行出来ます。
プログラミング言語に関係無く使用出来、オートスケールアップなどインフラを気にせずに使用出来ます。
そして、全てのクラウドとオンプレミス導入に対応していますので、ベンダーロックインを回避出来ます。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3