紙一重の積み重ねスマートフォン用の表示で見る紙一重の積み重ねアラフォーのエンジニアがなれる最高の自分を目指して、学んだことをこつこつ情報発信するブログです。アカウント有効化のメール送信の演習まとめ&解答例です。個人の解答例なので、誤りがあればご指摘ください。Mailerライブラリを使用して、メイラーを作成する。generateで自動生成する。viewのテンプレートが2つ生成される。test/mailers/previews/user_mailer_preview.rb【mailer】メールテンプレートのカスタマイズデフォルトのfromアドレスを編集する。この値はアプリケーション全体で共通となる。自動生成された、account_activationメソッドを編集する。ユーザー情報のインスタンス変数を作成し、user.email宛にメールを送信する。end【view】テキストメールとHTMLメールビューのカスタマイズユーザーの有効化URLには、有効化トークンを含める。q5lt38hQDc_959PVoo6b7Aの文字列は、実装済みのnew_tokenメソッドで生成した値。Base64でエンコードされている。AccountActivationsコントローラのeditアクションでは、paramsハッシュでparams[:id]として参照することができる。http://www.example.com/account_activations/q5lt38hQDc_959PVoo6b7A/editまた、URLからユーザーを特定するために、メールアドレスをクエリパラメータで追加する。URLの末尾に?を付与して、キーと値のペアを記載する。%40でエスケープする必要がある。Railsでは自動的にエスケープしてくれる。account_activations/q5lt38hQDc_959PVoo6b7A/edit?email=foo%40example.com上記を踏まえ、実装する。テキストメールのテンプレート。%>HTMLメールのテンプレート。メールアドレスの文字列をエスケープできることを確認してみましょう。panic!“をエスケープすると、どんな結果になりますか?実行結果は以下の通り。@や、'、!がエスケープされて表示される。本章での学び特殊なURLにアクセスして、メールの内容をその場でプレビューする。【environment】develop環境のメール設定変更ホスト名を各自の環境に合わせて設定する。}設定が完了したら、develop環境のサーバを再起動する。自動生成されたプレビューファイルは、そのままでは動かないため、ユーザー情報を追加する。end動作確認ブラウザから、下記URLにアクセスする。https://xxxxxxxxx.c9users.io/rails/mailers/user_mailer/account_activation.htmlメイラーのプレビュー画面が表示される。演習1Railsのプレビュー機能を使って、ブラウザから先ほどのメールを表示してみてください。「Date」の欄にはどんな内容が表示されているでしょうか?上記の動作確認の通り。「Date」には、UTC時間が表示されているため、日本と9時間ずれてる。送信メールのテスト本章での学び前項で実装した、メールプレビューのテストコードを作成する。【test】Userメイラーのテストコードの作成テストユーザーとしてfixtureからmichaelを取得するテストユーザーの有効化トークンを生成するUserメイラーのアカウント有効化処理にテストユーザー情報を渡して、メールオブジェクトを作成するメールオブジェクトの件名をチェックするメールオブジェクトの送信先メールアドレスをチェックするメールオブジェクトの送信元メールアドレスをチェックするテストユーザーの名前が、メールの本文に含まれているかチェックするテストユーザーの有効化トークンが、メールの本文に含まれているかチェックするテストユーザーのアドレスがエスケープされて、メールの本文に含まれているかチェックする上記を踏まえ実装する。"password_reset"については、12章で実装するためコメントアウトする。end【config】テストファイル内のドメイン名を設定するテスト内でのドメインを設定する。}動作確認mailerのテストがgreenになることを確認。greenになっていることを確認してみましょう。テストスイートがgreenであることを確認。redに変わることを確認してみましょう。CGI.escape部分をコメントアウトする。mail.body.encodedテストスイートがredになることを確認。skips動作確認後は、コメントアウト部分を元に戻しておく。本章での学び作成したメイラーを使うために、createアクションを修正する。else以下のように修正する。deliver_nowは、メールを送信するメソッド。現時点では、テストがredになってしまう。skips失敗するテストを一時的にコメントアウトする。endテストがgreenになることを確認。skips動作確認ブラウザから、ユーザー登録を行う。(test2ユーザーで登録を実施)コンソールにメール送信ログが表示されていることを確認。</body></html>演習1新しいユーザーを登録したとき、リダイレクト先が適切なURLに変わったことを確認してみましょう。その後、Railsサーバーのログから送信メールの内容を確認してみてください。有効化トークンの値はどうなっていますか?コンソールログをより確認。リダイレクト先のURLが下記の通りルートURLに302で送信されていることを確認。0.0ms)演習2コンソールを開き、データベース上にユーザーが作成されたことを確認してみましょう。このユーザーはデータベース上にはいますが、有効化のステータスがfalseのままになっていることを確認してください。追加されたユーザーの有効化ステータスが、falseであることを確認。false>>おわりにメールの送信処理の組み込みが完了しました。Railsだと簡単に実装できます。仕組みが非常に勉強になりました。はてなブログProSIerで働く36歳のエンジニアです。自社WEBサービスの開発・AWSのインフラ構築を行っています。なれる最高のフルスタックエンジニアを目指して、RailsやAWSをこつこつ学習中。本を10冊出すことが夢です。PL/SQL」(シーアンドアール研究所)の著者。#devsumiDスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。