LoginSignup
4
5

More than 5 years have passed since last update.

Sinatraでmailgunでメール送信しつつbundler環境を整える

Last updated at Posted at 2015-07-20

はじめに

  1. http://qiita.com/ms2sato/items/7c07b2079b48c49fad2a
  2. http://qiita.com/ms2sato/items/eed1e3c929ac8f6195a9
  3. http://qiita.com/ms2sato/items/5bd201c84dab858ee501
  4. http://qiita.com/ms2sato/items/901d8c5ca77c1133522c

の続き。

メールを送信したいのでまずは準備です。

外部サービスmailgunを利用してメールを送信する

通常はSMPTサーバをどこからか用意したりすると思うのですが、今回はherokuにデプロイする予定なのもあってmailgunというサービスを利用して送信します。

サイトに登録するとサンプルコードが手に入ります。これは簡単と、早速組み込みに入りますが、これだけだと「RestClient なんて知りません」と怒られて送信できないのです。その準備をしていきます。

def send_simple_message
  RestClient.post "https://api:key-[secret...]"\
  "@api.mailgun.net/v3/sandbox[secret...].mailgun.org/messages",
  :from => "Mailgun Sandbox <postmaster@sandbox[secret...].mailgun.org>",
  :to => "ms2sato <xxx@xxx.com>",
  :subject => "Hello ms2sato",
  :text => "Congratulations ms2sato, you just sent an email with Mailgun!  You are truly awesome!  You can see a record of this email in your logs: https://mailgun.com/cp/log .  You can send up to 300 emails/day from this sandbox server.  Next, you should add your own domain so you can send 10,000 emails/month for free."
end

外部ライブラリを使えるようにbundler環境を整備する

ここまでしなくてもいいのですが、ポータビリティを上げたいのでGemfilebundlerを利用した管理に移行します。

$ pwd
path/to/sinatform # sinatformのディレクトリか確認
$ gem install bundler

の記事を参考にしてみました。Gemfileを用意します。

Gemfile
source 'http://rubygems.org'
gem 'rubygems-update'
gem 'sinatra'
gem 'sinatra-reloader'
gem 'rest-client'
app.rb
require 'rubygems' # この辺を追記
require 'bundler'
Bundler.require

require 'sinatra'
require 'sinatra/reloader'
require 'rest_client'

get '/' do
  erb :index  
end

get '/about' do
  erb :about
end

post '/confirm' do
  @email = params[:email]
  @message = params[:message]
  erb :confirm
end
$ bundle install --path vendor/bundle

起動して確認。bundler利用するので起動方法が変わります。

$ bundle exec ruby app.rb

とりあえず今まで通りにサイトが利用できればOK!

参考

メール送信用のテストURLを作成

準備はできたのでまずはメールが送信できるか確かめます。

app.rb
require 'rubygems'
require 'bundler'
Bundler.require

require 'sinatra'
require 'sinatra/reloader'
require 'rest_client'

get '/' do
  erb :index  
end

get '/about' do
  erb :about
end

post '/confirm' do
  @email = params[:email]
  @message = params[:message]
  erb :confirm
end

get '/test' do
  send_simple_message 
end

def send_simple_message
  RestClient.post "https://api:key-[secret...]"\
  "@api.mailgun.net/v3/sandbox[secret...].mailgun.org/messages",
  :from => "Mailgun Sandbox <postmaster@sandbox[secret...].mailgun.org>",
  :to => "ms2sato <xxx@xxx.com>",
  :subject => "Hello ms2sato",
  :text => "Congratulations ms2sato, you just sent an email with Mailgun!  You are truly awesome!  You can see a record of this email in your logs: https://mailgun.com/cp/log .  You can send up to 300 emails/day from this sandbox server.  Next, you should add your own domain so you can send 10,000 emails/month for free."
end

http://localhost:4567/testにアクセスするとテストメールが飛ぶようにしました。アクセスした時に画面上に

{ "id": "<20150720041442.29268.96455@sandbox[secret...].mailgun.org>", "message": "Queued. Thank you." }

と出れば大成功です。暫くしたらメールが自分に届くはず。

おまけ

gitで管理しているなら、ここで余計なファイルが登録されないようにすると良いです。.gitignoreファイルを作って、下記のように書き込みます。

.gitignore
/.bundle
/vendor/bundle

git statusした時に上記のファイルが表示されなくなっていればOKです。

4
5
0

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
4
5