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

# はじめに

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

の続き。

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

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

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

http://www.mailgun.com/

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

```rb
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環境を整備する

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

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

https://blog.engineyard.com/2014/doing-an-api-mashup-with-sinatra

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

```rb:Gemfile
source 'http://rubygems.org'
gem 'rubygems-update'
gem 'sinatra'
gem 'sinatra-reloader'
gem 'rest-client'
```

```rb: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！

### 参考
http://ongaeshi.hatenablog.com/entry/20111214/1323830203

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

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

```rb: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`ファイルを作って、下記のように書き込みます。

```text:.gitignore
/.bundle
/vendor/bundle
```

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