##アカウント有効化のメール送信
アカウント有効化メールの送信に必要なコードを追加
このメソッドではAction Mailerライブラリを使ってUserのメイラーを追加
Usersコントローラのcreateアクションで有効化リンクをメール送信するために使います。
このテンプレートの中に有効化トークンとメールアドレスのリンクを含め、使っていきます。
###送信メールのテンプレート
####メイラーの生成
ubuntu:~/environment/sample_app (account-activation) $ rails generate mailer UserMailer account_activation password_reset
Running via Spring preloader in process 11611
create app/mailers/user_mailer.rb
invoke erb
create app/views/user_mailer
create app/views/user_mailer/account_activation.text.erb
create app/views/user_mailer/account_activation.html.erb
create app/views/user_mailer/password_reset.text.erb
create app/views/user_mailer/password_reset.html.erb
invoke test_unit
create test/mailers/user_mailer_test.rb
create test/mailers/previews/user_mailer_preview.rb
account_activationメソッド、password_resetメソッドが生成されました
####アカウント有効化メイラーのテキストビュー
app/views/user_mailer/account_activation.text.erb
User#account_activation
<%= @greeting %>, find me in app/views/user_mailer/account_activation.text.erb
####アカウント有効化メイラーのHTMLビュー
app/views/user_mailer/account_activation.html.erb
<h1>User#account_activation</h1>
<p>
<%= @greeting %>, find me in app/views/user_mailer/account_activation.html.erb
</p>
####Applicationメイラー
app/mailers/application_mailer.rb
class ApplicationMailer < ActionMailer::Base
default from: "noreply@example.com"
layout 'mailer'
end
####生成されたUserメイラー
app/mailers/user_mailer.rb
class UserMailer < ApplicationMailer
def account_activation(user)
@user = user
mail to: user.email, subject: "Account activation"
# mailにsubjectキーを引数として渡しています。
# この値は、メールの件名にあたります
end
def password_reset
@greeting = "Hi"
mail to: "to@example.org"
end
end
####アカウント有効化のテキストビュー
app/views/user_mailer/account_activation.text.erb
Hi <%= @user.name %>,
Welcome to the Sample App! Click on the link below to activate your account:
<%= edit_account_activation_url(@user.activation_token, email: @user.email) %>
####アカウント有効化のHTMLビュー
app/views/user_mailer/account_activation.html.erb
<h1>Sample App</h1>
<p>Hi <%= @user.name %>,</p>
<p>
Welcome to the Sample App! Click on the link below to activate your account:
</p>
<%= link_to "Activate", edit_account_activation_url(@user.activation_token,
email: @user.email) %>
####演習
1.
コンソールを開き、CGIモジュールのescapeメソッド(リスト 11.15)でメールアドレスの文字列をエスケープできることを確認してみましょう。このメソッドで"Don't panic!"をエスケープすると、どんな結果になりますか?
>> CGI.escape('foo@example.com')
=> "foo%40example.com"
>> CGI.escape("Don'tpanic!")
=> "Don%27tpanic%21"