著者:石井怜央(香川大学SLP)
前回は、OSC広島の前日に行われた学生LT大会の様子を紹介し、その中で僕が発表した、サークルで開発を行ったメール管理システムについて触れました。
今回はその開発で使用した、Sinatraやmail gemについて紹介し、それらを組み合わせて簡単なWebアプリケーションを作成したいと思います。
記事本文掲載のシェルスクリプトマガジンvol.47は以下リンク先でご購入できます。
1 |
$ gem install bundler |
1 |
$ bundle init |
1 2 3 4 5 6 |
require 'sinatra' set :bind, '0.0.0.0' get '/' do 'Hello World' end |
1 2 3 4 5 6 7 |
require 'sinatra' set :bind, '0.0.0.0' get '/' do @world = 'World' # erbファイルに渡すインスタンス変数 erb :hello # hello.erbを呼び出す end |
1 2 3 4 5 6 7 8 9 10 |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello World</title> </head> <body> <p>Hello <%= @world %></p> </body> </html> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
require 'sinatra' require 'mail' set :bind, '0.0.0.0' get '/new' do erb :new_mail end post '/send' do mail_to = params[:mail_to] title = params[:title] sentence = params[:sentence] mail = Mail.new do from '送信元メールアドレス' to "#{mail_to}" subject "#{title}" body "#{sentence}" end options = { :address => "smtp.gmail.com", :port => 587, :domain => "gmail.com", :user_name => '送信元メールアドレス', :password => "パスワード", :authentication => :plain, :enable_starttls_auto => true } mail.charset = 'utf-8' mail.delivery_method(:smtp, options) mail.deliver @mail_to = mail_to @title = title @sentence = sentence erb :sent end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>new mail</title> </head> <body> <form method="post" action="send"> <h4>宛先</h4> <input type="text" name="mail_to"> <h4>件名</h4> <input type="text" name="title"> <h4>本文</h4> <textarea rows="5" name="sentence"></textarea> <button type="submit">送信</button> </form> </body> </html> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>sent</title> </head> <body> <h4>宛先</h4> <p><%=@mail_to%></p> <h4>件名</h4> <p><%=@title%></p> <h4>本文</h4> <p><%=@sentence.gsub("\n","<br>\n")%></p> <p>送信しました。</p> </body> </html> |