動かざることバグの如し

近づきたいよ 君の理想に

RailsのActionMailerでGmailからメール送信

環境

やること

  • gmailのアカウント使ってSMTP経由でメール送信
  • もちろん無料

やらないこと

  • ActiveJobによる非同期処理

Googleアカウント

どうやらセキュリティ的に厳しくなったのか、Googleアカウントの2段階認証の設定をしていないと他人にメールが送信できなくなったらしい

ここから設定する

次にアプリパスワードというのを設定する。

アプリパスワードってのは普段のログインに使うパスワードとは違って生成したら1度しか表示できないってやつ

ここから作ってメモ

railsの設定

config/application.rbに以下を追加

  class Application < Rails::Application

    config.action_mailer.perform_deliveries = true
    config.action_mailer.raise_delivery_errors = true
    config.action_mailer.delivery_method = :smtp
    config.action_mailer.smtp_settings = {
      address: "smtp.gmail.com",
      port: 587,
      user_name: '*****@gmail.com',
      password: 'さっき作ったアプリパスワード',
    }
    
  end

メーラーをジェネレーターで作成 ここではNoticeMailerって名前にしたが、「〇〇Mailer」なら他でも大丈夫

~/rails/scrape $rails g mailer NoticeMailer
      create  app/mailers/notice_mailer.rb
      invoke  erb
      create    app/views/notice_mailer

app/mailers/notice_mailer.rbを以下のように

class NoticeMailer < ApplicationMailer
  default to: "*****@gmail.com"

  def alert()
    mail(subject: "失敗しました")
  end

end

app/views/notice_mailer/alert.text.erbを作って適当に文字を入れておく(最初は

で送信

NoticeMailer.alert().deliver_now