railsアプリでメールを送信する方法

rails

本記事では、rails、apiモードのアプリケーションを使用してメール送信する処理を作成したので、備忘録として記事に残します。

メール送信処理を作成していく

詳細は公式ドキュメントに記載があります。公式をもとにして進めていますが、必要な箇所になるべく絞って説明していきます。

Action Mailer の基礎 - Railsガイド
Action Mailerを使用してメールを送受信する方法について解説します。

まず下記のコマンドでメール処理に必要なファイルをgenerateします。

# rails g mailer User
      # 下記ファイルが生成される
      create  app/mailers/user_mailer.rb
      invoke  erb
      create    app/views/user_mailer
      invoke  test_unit
      create    test/mailers/user_mailer_test.rb
      create    test/mailers/previews/user_mailer_preview.rb

作成したMailerにメールを送る処理を作成します

class UserMailer < ApplicationMailer
  default from: 'notifications@example.com'

  def welcome_email
    @user = params[:user]
    @url  = 'http://example.com/login'
    mail(to: @user.email, subject: '私の素敵なサイトへようこそ')
  end
end

メールのテンプレートを作成します

<!-- app/views/user_mailer/welcome_email.html.erb -->
<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Welcome Email</title>
</head>
<body>
  <h1>Welcome to Our App!</h1>
  <p>This is a welcome email sent by Action Mailer.</p>
</body>
</html>

次に、controllerを作成していきます。

# rails g controller Email
      create  app/controllers/email_controller.rb
      invoke  test_unit
      create  test/controllers/email_controller_test.rb

作成したコントローラにmailを送信する処理を追記します。

class EmailController < ApplicationController
  def send_email
    UserMailer.welcome_email.deliver_now
    render json: { message: 'Email sent successfully' }, status: :ok
  end
end

コントローラのルーティングを作成します。

Rails.application.routes.draw do
  post 'send_email', to: 'email#send_email'
end

上記の記載により、/send_emailでEmailControllerのsend_emailアクションの処理を実行させることができます。

最後に、Gmail用のAction Mailerを設定していきます。config/environments/$環境名(開発環境の場合はdevelopment).rbに下記を追加します。

  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
  address:         'smtp.gmail.com',
  port:            587,
  domain:          'example.com',
  user_name:       '<username>',
  password:        '<password>',
  authentication:  'plain',
  enable_starttls_auto: true,
 }

メール送信用のユーザー名とパスワードをそれぞれ入れて、メールを送信する。

メールを送信してみる

postmanからapiでリクエストを送ります。

↑上記成功したら、responseに”Email sent successfully”と表示されます。

また、上記のemailで設定したメールアドレスに下記のメールが届きます。

まとめ

以上、railsアプリからメールを飛ばす処理を作成しました。

実際には、railsにメール送信機能はなく、smtpプロトコルでメールサーバーにリクエストを送ることで、メールサーバーがメールを送る処理を担当します。

本番環境ではメールサーバー等の構築も必要になってくると思うので、メールサーバーも自分で建てられるくらいまでレベルを上げていきたいです。

コメント

タイトルとURLをコピーしました