0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【備忘録】メールの送信機能の実装について

Last updated at Posted at 2023-02-16

はじめに

  • 本記事は、備忘録としてまとめたものになります。
  • 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
  • また記載内容はすべて、正しい内容が記載されているとは限りません。
  • 誤った内容を見つけた場合は、ご指摘をお願いいたします。

この記事は誰向けの記事か?

  • ChatGPTの拡張機能をGoogleChromeに導入したい人

背景

タスク

主に以下のタスクが生じます。

  • 事前準備をしましょう。
  • ターミナル上からメーラークラスを生成しましょう。
  • メールを送信するためのメソッドを定義しましょう。
  • メール文面を設定しましょう。
  • 送信メーラーを利用するための環境設定をしましょう。
  • コントローラーのアクションに送信メソッドを宣言しましょう。

★事前に準備が必要なもの・こと

  • Railsでアプリを事前に作成していること
  • VSCodeを使用していること
  • Gmailアカウント:メールアドレスとアプリパスワード

★メーラークラスの作成

ターミナル上で、以下のコマンドを実行することで、メーラークラスが生成されます。(noticeの部分の名称は任意です)

rails g mailer notice

生成後、ターミナル上で以下のメッセージが出力されれば、生成が完了となります。

create  app/mailers/notice_mailer.rb
invoke  erb
create    app/views/notice_mailer
invoke  test_unit
create    test/mailers/notice_mailer_test.rb
create    test/mailers/previews/notice_mailer_preview.rb

万が一、メーラークラスを削除したい場合は、以下のコマンドを実行することで、削除されます。

rails d mailer notice

実行結果は以下の通りになります。

remove  app/mailers/notice_mailer.rb
invoke  erb
remove    app/views/notice_mailer
invoke  test_unit
remove    test/mailers/notice_mailer_test.rb
remove    test/mailers/previews/notice_mailer_preview.rb

★メールの送信メソッドを定義

VSCode上に、notice_mailer.rbが作成されているので、そこに送信メソッドを定義する。
スクリーンショット 2023-02-16 22.09.34.png
以下は、アプリケーション上から管理者にお問い合わせのメールを送信するためのメソッドです。宛先にはto以外にも、ccやbccも設定でき、複数のアドレスを設定することも可能です。

class NoticeMailer < ApplicationMailer
  def send_admin(inquiry)
    @Inquiry = inquiry
    mail to: ENV['GMAIL_ADMIN_ADDRESS'], #ここで宛先の指定を行う(GitHubに公開するため、アドレスは環境変数に設定している)
      subject: "利用者からお問い合わせがありました" #件名
  end
end

★メール文面を設定

VSCode上に、ファイルを2つ準備し、その中にメールに記載する内容を記載する。名前は送信メソッド名と同じにする。
スクリーンショット 2023-02-16 22.33.19.png
以下のコードは、メール文面の一例です。

管理者様

ユーザーからお問い合わせがありました。以下の内容をご確認いただき、ご対応をお願いいたします。<br><br>
お名前<br>
<%= @Inquiry.name %>
<br><br>
連絡先メールアドレス<br>
<%= @Inquiry.email %>
<br><br>
お問い合わせ内容<br>
<%= safe_join(@Inquiry.detail.split("\n"),tag(:br)) %>

★Gmailの送信メーラーを利用するための環境設定

メーラーを使用するため、以下の記述を行う。
スクリーンショット 2023-02-16 22.50.26.png

  • 開発環境であれば、「environments>development.rb」へ記述
  • 本番環境であれば、「environments>production.rb」へ記述
Rails.application.configure do
  #Email-related settings(Google SMTP)
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.perform_deliveries = true
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
    address:  'smtp.gmail.com',
    port:  '587',
    user_name:  ENV['GMAIL_ADMIN_ADDRESS'], #Gmailのカウントユーザー名(〜@gmail.com)
    password:  ENV['GMAIL_APP_PASSWORD'], #アプリケーションパスワード(取得方法は、このページの最後に記載しています)
    authentication:  :plain,
    enable_starttls_auto:  true
  }
end

※GitHub上でアドレスやパスワードが流出することを防止するために、環境変数で設定している。

★コントローラー上に送信メソッドを記述

「送信メソッドの定義」「メール文面の設定」「送信メーラーの環境設定」を終えたら、各コントローラーのアクション上に送信メソッドを宣言するだけでメール送信の機能が使えます。以下のコードは、メール送信させるための一例です。

  def create
        @Inquiry = Inquiry.new(inquiry_params)
    if @Inquiry.valid?
      NoticeMailer.send_admin(@Inquiry).deliver_now #送信メソッド
      redirect_to send_inquiry_path #送信完了画面へリダイレクト
    else
      render :new #送られてきたパラメータに問題があれば、問い合わせ入力ページへ戻す
    end
  end

  private
  
  def inquiry_params
    params.require(:inquiry).permit(:name,:email,:detail)
  end

(補足)アプリパスワードの取得方法

  1. Googleアカウントにログイン
  2. アカウント管理画面から「セキュリティ」タブを選択
    スクリーンショット 2023-02-16 23.16.46.png
  3. アプリパスワードへアクセス
    スクリーンショット 2023-02-16 23.17.11.png
  4. アプリパスワードからアプリやデバイスを選択
    スクリーンショット 2023-02-16 23.18.20.png
  5. アプリパスワードをコピー
    スクリーンショット 2023-02-16 23.18.27.png

(補足)開発環境

OS:macOS Ventura 13.1
ブラウザ:GoogleChrome 110.0.5481.100(Official Build) (arm64)
開発言語:Ruby on Rails 6.0.6.1
開発環境:AWS(EC2、Route53)、Nginx、GitHub
その他:Let's Encrypt、Gmail

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?