【備忘録】【Rails6】「Action Mailer」でGmailのsmtpを使ったメール送信

  • URLをコピーしました!

★環境
 Ruby:3.0.2
 Rails:6.1.4.1

Rails6で「Action Mailer」とGmailのsmtpを使ったメール送信を紹介します。

目次

「Action Mailer」を継承したコントローラーを作成

コマンドから「Action Mailer」を継承したコントローラーを作成します。

※コマンドは「rails generate mailer <コントローラー名>

rails generate mailer form_mailer

「/app/mailers/<コントローラー名>.rb」が生成されます。

ここにメール送信用のコードを記載します。

class FormMailer < ApplicationMailer
    #default from: "aaaaa@example.com"

    # メール送信アクション
    def confirm_user(forms)
        #@greeting = "Hello"
        @forms = forms
        mail(
            from: 'aaaaa@example.com',
            to:   @forms.form_email,
           #bcc:  'bbbbb@example.com',
            subject: '<テストメール>お問い合わせ内容が送信されました'
          ) do |format|
            format.text #テキストメールを指定
            #format.html #HTMLメールを指定
        end
    end
end

※以下はメール送信には必要なかったのですが、上記でformのモデルを使っているので参考までに掲載

class Form

    #include ActiveModel::Model
    include ActiveModel::Validations

    #要素を定義します
    attr_accessor :form_onamae,
        :form_hurigana,
        :form_email,
        :form_tel,
        :form_message

    #バリデーションの定義
    MaxLength1 = 25
    MaxLength2 = 100
    MaxLength3 = 15
    MaxLength4 = 1000
    VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
    VALID_PHONE_REGEX = /\A\d{10}$|^\d{11}\z/i

    validates :form_onamae,
        presence: true,
        length: { maximum: MaxLength1 }
    #validates :form_hurigana,
    #    presence: true
    validates :form_email,
        presence: true,
        length: { maximum: MaxLength2 },
        format: { with: VALID_EMAIL_REGEX }
    validates :form_tel,
        #presence: true,
        length: { maximum: MaxLength3 }
        #format: { with: VALID_PHONE_REGEX }
    validates :form_message,
        presence: true,
        length: { maximum: MaxLength4 }
    
end

GoogleアカウントでGmailのSMTP送信用アプリパスワードを取得

Googleアカウントより、GmailのSMTP送信用アプリパスワードを取得します。

「アプリ

「アプリパスワード」を取得する事でメール送信時にGmailのSMTPが利用できます。

SMTP設定をコンフィグに記載

「/config/environments/development.rb」にGmailのSMTP設定を追記します。

※テスト環境は「test.rb」、本番環境は「production.rb」へ記載

  # メール送信関連の設定
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default_url_options = { :host => 'localhost:3000' }
  config.action_mailer.delivery_method = :smtp
  config.action_mailer.smtp_settings = {
      :address => 'smtp.gmail.com',
      :port => 587,
      :domain => 'example.com',
      :user_name => 'example@gmail.com',
      :password => 'iylhcoywrvnwvcik',
      :authentication => :'login',
      :enable_starttls_auto => true
  }

あとはアクションを実行してメールが送信されていればOKです。

※もしメールが送信出来なかった場合、念の為ウェブサーバーを再起動して再度実行してみて下さい

<参考>

Action Mailer の基礎 - Railsガイ...
Action Mailer の基礎 - Railsガイド Action Mailerを使用してメールを送受信する方法について解説します。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次