はじめに
- http://qiita.com/ms2sato/items/7c07b2079b48c49fad2a
- http://qiita.com/ms2sato/items/eed1e3c929ac8f6195a9
- http://qiita.com/ms2sato/items/5bd201c84dab858ee501
- 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環境を整備する
ここまでしなくてもいいのですが、ポータビリティを上げたいのでGemfile
とbundler
を利用した管理に移行します。
$ pwd
path/to/sinatform # sinatformのディレクトリか確認
$ gem install bundler
の記事を参考にしてみました。Gemfile
を用意します。
source 'http://rubygems.org'
gem 'rubygems-update'
gem 'sinatra'
gem 'sinatra-reloader'
gem 'rest-client'
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を作成
準備はできたのでまずはメールが送信できるか確かめます。
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
ファイルを作って、下記のように書き込みます。
/.bundle
/vendor/bundle
git status
した時に上記のファイルが表示されなくなっていればOKです。