Ruby: Action Mailer でメールを送信

Rails のライブラリ Action Mailer を使ってメール送信できます。

gmail のアドレスを作ってテスト送信。

/config/environments/development.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 => 'ユーザー名',
    :password => 'パスワード',
    :authentication => :plain,
    :enable_starttls_auto => true
}

メール送信コントローラーを作成する。

$ rails generate mailer user_mailer

上のコマンドでメーラーのコントローラーが /app/mailers に作られる。

ruby: app/mailers/user_mailer.rb

class UserMailer < ActionMailer::Base
  default from: "from@example.com"

  def confirm
      @greeting = "Hello"

      mail to: "送信先メールアドレス"
  end
end

TEXT メールと HTML メールのハイブリットを作成するためにテンプレートを二つ作る。

erb: app/views/user_mailer/confirm.text.erb

UserMailer#confirm
 
<%= @greeting %>, find me in app/views/user_mailer/confirm.text.erb

erb: app/views/user_mailer/confirm.html.erb

<!DOCTYPE html>
<html>
  <head>
    <meta content='text/html; charset=UTF-8' http-equiv='Content-Type' />
    <style>
      body { background-color: red; }
    </style>
  </head>
  <body>
    <h1>HTML メールテスト</h1>
    <p>HTML メールだよ</p>
  </body>
</html>

コンソールからテスト送信してみる

$ rails c
> UserMailer.confirm.deliver

Action Mailer 公式ドキュメント