Ruby on RailsでCustomers Mail Cloudを使ってメール送信する

Customers Mail CloudをRuby on Railsプロジェクトの中で利用する方法を解説します。Ruby on Rails標準のActionMailerを使って、簡易的なお問い合わせフォームを作成してみます。コードは【Ruby on Rails】お問合せフォームの作成 - Qiitaを参考にしています。

ベースプロジェクト生成

まずベースになるRailsプロジェクトを生成します。

$ rails new contact_form

必要なライブラリをインストールします。

$ cd contact_form
$ bundle install

メールオブジェクトを生成

railsコマンドを使ってメールオブジェクトを生成します。

$ rails g mailer ContactMailer

app/mailers/contact_mailer.rb を編集します。 from や to は必要なものに書き換えてください。

class ContactMailer < ApplicationMailer
  def send_mail(contact)
    @contact = contact
    mail from: 'info@smtps.jp', to: 'no-reply@smtps.jp', subject: 'お問い合わせ'
  end
end

モデルの作成

Railsのモデルを作成します。これは絶対必要な訳ではありませんが、あった方がテンプレートなどでの扱いが楽になります。

$ rails g model Contact name:string email:string message:text

そしてDBスキーマに反映します。

$ rake db:migrate

config/environments/development.rbの編集

config/environments/development.rbを編集してメール送信できるようにします。

config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
        port: 10025,
        address: 'YOUR_SMTPS_ADDRESS',
        user_name: 'YOUR_USER_ID',
        password: 'YOUR_API_KEY',
        enable_starttls_auto: true
}

YOUR_SMTPS_ADDRESSは契約によって異なります。SUBDOMAINは契約によって異なりますので注意してください。 YOUR_USER_ID 、 YOUR_API_KEYはご自身のものを設定してください。

利用プラン アドレス
sandbox sandbox.smtps.jp
pro SUBDOMAIN.smtps.jp

コントローラの作成

次にコントロールを作成します。

$ rails g controller contacts

app/controllers/contacts_controller.rb の内容は次のようになります。

class Public::ContactsController < ApplicationController
    #  お問い合わせフォーム表示
  def new
    @contact = Contact.new
  end
    # メール送信
  def create
    @contact = Contact.new(contact_params)
    if @contact.save
      ContactMailer.send_mail(@contact).deliver_now
      redirect_to done_path
    else
      render :new
    end
  end
    # 完了ページ表示用
  def done
  end

  private
  def contact_params
    params.require(:contact)
          .permit(:email,
                  :name,
                  :message
                 )
  end
end

ルーティングの編集

config/routes.rb を編集します。

Rails.application.routes.draw do
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
  resources :contacts, only: [:new, :create]
  get 'done', to: 'contacts#done', as: 'done'
  # Defines the root path route ("/")
  # root "articles#index"
end

ビューの作成

メール用

まずメール用のビューを作成します。ファイルは views/contact_mailer/send_mail.text.erb になります。

<%= @contact.name %> 様からの問い合わせ

メールアドレス:<%= @contact.email %>

問い合わせ内容:
<%= @contact.message %>

お問い合わせ入力用

ファイルは app/views/contacts/new.html.erb になります。

<%= form_for(@contact, url: contacts_path) do |f| %>
  <div class="form-group">
    <%= f.label :name, 'お名前*' %>
    <%= f.text_field :name, autofocus: true, class: 'form-control' %>
  </div>
    <br />
  <div class="form-group">
    <%= f.label :email, 'メールアドレス*' %>
    <%= f.text_field :email, class: 'form-control' %>
  </div>
    <br />
  <div class="form-group">
    <%= f.label :message, 'メッセージ*' %>
    <%= f.text_area :message, size: '10x10', class: 'form-control' %>
  </div>
    <br />
  <div>
    <%= f.submit '送信する' %>
  </div>
<% end %>

お問い合わせ完了時用

ファイルは app/views/contacts/done.html.erb になります。

<h1>お問い合わせいただきありがとうございます</h1>

レイアウトの編集

レイアウト用の app/views/layouts/application.html.erb にBootstrap用のCSSを追加します。

<link
    href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css"
    rel="stylesheet"
    integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC"
    crossorigin="anonymous">

これで作成完了です。

試してみる

まず http://localhost:3000/contacts/new にアクセスします。お問い合わせフォームが表示されるはずです。

f:id:moongift:20211216163815j:plain

お問い合わせ内容を入力して、送信ボタンを押します。完了メッセージが出れば完成です。

f:id:moongift:20211216163823j:plain

メールはCustomers Mail Cloudを経由しているので、メールボックスに問題なく届くはずです。

f:id:moongift:20211216163852j:plain

まとめ

Railsアプリケーションであれば、SMTPサーバの設定を変えるだけですぐにCustomers Mail Cloudを利用できます。ぜひ皆さんのRailsアプリの中で活用してください。

クラウドからのメール送信を簡単に。確実に。| Customers Mail Cloud