メール送信設定を行っていないので、パスワードリセット等の試験を行えません。ダミーのメールサーバを立てて、どのユーザ宛のメールも同一ユーザで受信できるようにし、Devise でダミーメールサーバを使用してメール関連の機能の確認が行えるようにします。
メールサーバの設定
まずは、ローカルサーバにメールを送受信可能な試験用のメールサーバを構築します。
話が長くなるので別エントリにまとめました。
Postfixで特定ドメイン宛をすべて特定ユーザで受信させる
今回は example.com を使用して、example.com あてのすべてのメールを user01@example.com で受信し、user01 の $HOME/Maildir/new を確認すればメールの内容を見れるようにしました。
Rails および Devise のメール送信設定
Devise のメール送信設定
Devise では、メール送信者の設定を行います。今回は example.com をドメインに使用するので no-reply@example.com を使用することにします。
config/initializers/devise.rb の 21行目あたりの config.mailer_sender を設定します。
1 2 3 4 5 |
# ==> Mailer Configuration # Configure the e-mail address which will be shown in Devise::Mailer, # note that it will be overwritten if you use your own mailer class # with default "from" parameter. config.mailer_sender = 'no-reply@example.com' |
ほかにも、パスワード変更時に Notification を送るか、等の設定はありますが、一旦それは放置
Rails のメール送信設定
次に、Rails のメール送信設定を行います。
今回は試験環境なので、config/environments/development.rb にメール送信設定を行います。production と development で分けておきたい等があれば、production は production の設定に同じような内容を書き込んでください。私は development.rb の一番最後の方に以下の内容を設定しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# Use an evented file watcher to asynchronously detect changes in source code, # routes, locales, etc. This feature depends on the listen gem. config.file_watcher = ActiveSupport::EventedFileUpdateChecker # for devise config.action_mailer.default_url_options = {host: 'localhost', port: 3000 } # for SMTP config.action_mailer.delivery_method = :smtp config.action_mailer.smtp_settings = { address: '127.0.0.1', domain: 'example.com', port: 25 } end |
今回はローカルでメールサーバを動かしていてユーザ認証等は行っていないので上記の設定になっています。
動作確認
アプリケーションを再起動して、すでに登録したユーザで forget password してみてください。user01 の $HOME/Maildir/new にメールができていると思います。以下の例は、user02@example.com を作成してパスワード忘れた!を実行したときの例です。
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 |
Return-Path: <no-reply@example.com> X-Original-To: user02@example.com Delivered-To: user01@localhost.localdomain Received: from example.com (localhost [127.0.0.1]) by localhost.localdomain (Postfix) with ESMTP id 0BCF1FA456012 for <user02@example.com>; Wed, 11 Sep 2019 21:48:41 +0900 (JST) Date: Wed, 11 Sep 2019 21:48:40 +0900 From: no-reply@example.com Reply-To: no-reply@example.com To: user02@example.com Message-ID: <5d78c2f8f3b15_f1ac2afe7aeb79ec968e7@localhost.mail> Subject: Reset password instructions Mime-Version: 1.0 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 7bit <p>Hello user02@example.com!</p> <p>Someone has requested a link to change your password. You can do this through the link below.</p> <p><a href="http://localhost:3000/users/password/edit?reset_password_token=QBTpYbZx9jhzgEGq1TMB">Change my password</a></p> <p>If you didn't request this, please ignore this email.</p> <p>Your password won't change until you access the link above and create a new one.</p> |