はじめに
- 本記事は、備忘録としてまとめたものになります。
- 他の方の参考になる可能性も踏まえて、一般公開も行なっております。
- また記載内容はすべて、正しい内容が記載されているとは限りません。
- 誤った内容を見つけた場合は、ご指摘をお願いいたします。
この記事は誰向けの記事か?
- 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が作成されているので、そこに送信メソッドを定義する。
以下は、アプリケーション上から管理者にお問い合わせのメールを送信するためのメソッドです。宛先にはto以外にも、ccやbccも設定でき、複数のアドレスを設定することも可能です。
class NoticeMailer < ApplicationMailer
def send_admin(inquiry)
@Inquiry = inquiry
mail to: ENV['GMAIL_ADMIN_ADDRESS'], #ここで宛先の指定を行う(GitHubに公開するため、アドレスは環境変数に設定している)
subject: "利用者からお問い合わせがありました" #件名
end
end
★メール文面を設定
VSCode上に、ファイルを2つ準備し、その中にメールに記載する内容を記載する。名前は送信メソッド名と同じにする。
以下のコードは、メール文面の一例です。
管理者様
ユーザーからお問い合わせがありました。以下の内容をご確認いただき、ご対応をお願いいたします。<br><br>
お名前<br>
<%= @Inquiry.name %>
<br><br>
連絡先メールアドレス<br>
<%= @Inquiry.email %>
<br><br>
お問い合わせ内容<br>
<%= safe_join(@Inquiry.detail.split("\n"),tag(:br)) %>
★Gmailの送信メーラーを利用するための環境設定
- 開発環境であれば、「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
(補足)アプリパスワードの取得方法
(補足)開発環境
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