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 にアクセスします。お問い合わせフォームが表示されるはずです。
お問い合わせ内容を入力して、送信ボタンを押します。完了メッセージが出れば完成です。
メールはCustomers Mail Cloudを経由しているので、メールボックスに問題なく届くはずです。
まとめ
Railsアプリケーションであれば、SMTPサーバの設定を変えるだけですぐにCustomers Mail Cloudを利用できます。ぜひ皆さんのRailsアプリの中で活用してください。