【初心者向け】Ruby on Railsアプリでメール送信機能を実装する方法


Ruby on Railsアプリでメールを自動的に送信する機能をつけたい!

どうも、Linです。開店と同時に入店してます。

 

Ruby on Railsアプリを作ると、つけたい機能としてありがちなのが、

メールの自動送信機能

ではないでしょうか??

 

たとえば、ユーザーが投稿した時にメールで通知が来るように設定したり、情報を更新したときに確認メールが送信されるといった具合ですね。

メール送信機能の実装は、すこぶる難易度が高かったですが、こちらの神記事を参考にさせてもらい、なんとかメール送信機能をつけることに成功しました。

今日はその方法を忘れないうちに書き留めておこうと思います。

 

 

Railsアプリでメール送信機能を実装する方法6つのステップ

Railsアプリにメール送信機能を実装していきましょう。

Railsのバージョンは残念ながら4ですので、そこらへんはご了承ください。

 

 

Step1. Railsアプリ作成

今回は例としてmailerというアプリを作っていきます。

 

ディレクトリを移動。

 

今回は、ユーザーが新規追加されたらメールを送るアプリを作りたいので、ユーザーテーブルを作成しておきましょう。

ユーザーテーブルには、

  • name
  • email

の2つのカラムがあれば十分です。

マイグレーションファイルを作成できたら、

でデータベースを作成しましょう。

 

これで準備完了です。

 

 

Step2. メール送信設定

続いてはメールの送信設定。

今回はGmailで送れるようにします。

 

メールの送信設定は、

config/environment/development.rb

のファイルを編集していきます。

 

 

ここでは、「メール送り主」に設定したいGmailの情報を設定していきます。

具体的には、

  • ユーザー名(メールアドレス)
  • パスワード

の2つを設定します。

Githubなどでコードを公開する場合は、自分のGmailアカウントがバレてしまうので要注意。

 

Step3. メーラー作成

お次は、「メーラー」を作成していきます。

メーラーとは、

メール送信におけるコントローラー的役割を果たす

ものです。

こいつをrailsのコマンドで作っていきましょう。

メーラーの名前はSampleMailerとします。

 

 

このコマンドを実行すると、app/mailer以下に次の2つのメーラーが作成されます。

  1. application mailer
  2. sample_mailer

「application mailer」は全体のメーラーの設定、

「sample_mailer」は先ほど作成したSampleMailerという個別のメーラーの設定です。

 

rails メール 設定

 

ぼくは最初この2つをごちゃまぜにしてゾンビになっていました。要注意です。

 

 

Step3. 全体のメーラー編集(application_mailer.rb)

いよいよメーラーの編集。

メーラー全体の設定の「application_mailer.rb」を編集していきます。

 

いじる前は次のようなコードになっていますよね??

こいつを、

のように編集します。

 

これは送信するメールの情報を表しています。

from メールの送り主の名前
bcc BCCで同時に送る宛先
reply_to 返信した場合の受信先アドレス

を表しています。

 

上の例でいうと、「謎の男」からメールが送られてきます。

また、BCCでsent@gmail.comにも送られて、もし、ユーザーがこのメールに返信した場合は、reply@gmail.comに届くというわけです。

 

 

Step4. 個別のメーラー編集(sample_mailer.rb)

個別のメール設定のメーラー(sample_mailer.rb)を編集していきましょう。

デフォルトでは、

のようになってるはず。

 

今回はこちらを、

のように編集していきます。

 

userを引数にしたsend_when_createメソッドを定義。

新しいユーザーが作成されたら、メールが送られるようになってます。

userの情報からemailをいただき、その宛先に、

こんにちは!新しいユーザーが追加されました

という件名のメールが届くように設定されてますね。

 

Step5. メール本文編集

あとはメールの本文を決めるだけ。

 

先ほどの個別のメーラーの中で、「mail」というメソッドを呼び出しましたね??

こいつを呼ぶと、メール本文のテンプレートが呼び出されるようになってます。

 

メールの本文は、どちらの場合も対応できるように、

  1. HTMLバージョン
  2. テキストバージョン

の2タイプ用意してあげましょう。

 

メール本文のテンプレートは、

app/view/sample_mailer

の中に格納していきます。

まだファイルがない状態なので、この中に新規ファイルを作成してぶち込んでいけばいいのですね。

 

rails メール 送信

 

先ほど個別メーラーで定義したsend_when_createのメソッド名から、

  • send_when_create.html.erb
  • send_when_create.txt.erb

の2種類作ってみましょう。

 

テンプレートたちと、メーラーの関係は、viewとcontrollerと一緒。

メーラーで宣言したインスタント変数をテンプレートでも使えるのです。

 

HTMLメールのテンプレート(send_when_create.html.erb)は、

テキストバージョン(send_when_create.txt.erb)は、

とでもしておきましょうか。

 

 

Step6. メーラーを呼び出す

最後にメーラーを呼び出しましょう。

メーラーはコントローラーで呼び出します。

 

今回は、ユーザーを新規作成した時にメールを送るアプリを作りたいので、「users_controller.rb」の「createメソッド」に注目。

 

 

メーラーは、

メーラー名.メソッド

で呼び出すことができます。

さらに、そこにdeliverメソッドをつかえばメールを送れるとのこと。

早速やってみましょう。

 

今回は、

  • メーラー名:SampleMailer
  • メソッド名:update_when_create

だったので、

Sample.update_when_create.deliver

という一行のコードをメールを送りたいタイミングに追加すればオッケー。

 

update_when_createの引数として、新規作成したuserオブジェクトを利用したいので、

Sample.update_when_create(@user).deliver

としてあげましょう。

この一行のコードをcreateメソッドの中に追加。

 

 

 

 Railsアプリでメール送信機能は意外と簡単だ!

と以上がRailsアプリのメール送信機能の実装方法でした。

 

早速、テストサーバーを立ち上げて検証してみましょう。

 

rails メール 送信

 

 

Linという名前のユーザーを新規追加してみると、

rails メール 送信

メールきたああああああああああ!!!

 

もし、メールが届かないという方は、もしかしたらセキュリティが固すぎるのかもしれません。

ブロックされたログインについてご確認ください

というメールが来てませんか??

 

rails メール 送信

 

安全性の低いアプリからのアクセスを許可すると、無事にメールを送れると思います笑

 

「2時間格闘しても沼にハマりっぱなしだよ!」

とキレそうになってる方にはエンジニア専門のQAサイト「teratail」がおすすめです。

第一線で活躍するエンジニアの方々が質問に答えてくれるので解決に近づくと思います。

よかったら試してみてくださいね。

 

それでは!

Lin


コメントはこちらからお願いします!



もう1本読んでみる