Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
5
Help us understand the problem. What is going on with this article?
@ms2sato

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

More than 5 years have passed since last update.

はじめに

  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です。

5
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ms2sato
何でも屋だが、最近はRails中心。JavaScript好き。レビューやタスク分解が多くて近頃仕事ではコード書けていない。仕事でもプライベートでもコラボできる人が常に欲しい人。 会社では人を育てるの中心で https://circlearound.co.jp/training/ こんなのやってます。 独り言はこっち https://ms2sato.circlearound.co.jp

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
5
Help us understand the problem. What is going on with this article?