Why?
deviseでメールでの認証をしようとしたら、開発環境では Letter Opener で簡単に見れたけど、本番環境では使えない。何を設定しなきゃいけないんだ?
という初心者が頑張ってメールを送れるように色々設定した備忘録となっています。
実施するうえでカスタムドメインにしている前提なので未だの方はこちらの備忘録もご参考になれば。
カスタムドメイン適応の話
devise
ユーザーの新規登録からログイン、ログアウト、ユーザー情報のあれこれがこれさえあれば一通りそろうgem。ひとまず入れてカスタマイズしながら使っています。
devisev の github
SMTPサービス とは?
SMTP は Simple Mail Transfer Protocol の略らしい。
インターネット上で E メールメッセージを送受信するために使用される通信プロトコル。
詳しいところはこちらが分かりやすいので読んでみてください。
「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典
そんなこんなでEメールを送るためのサーバーが無いとダメだということらしい。
今回使わせて頂いたサービス
- heroku (デプロイ環境)
- mailjet (メール送信)
- cloudflare (DNS管理)
送信用のカスタムアドレスを作成する。
アプリからのメールであることを受け取り手に伝えるように送信用のカスタムアドレスを作成。cloudflare の Email Routingでカスタムアドレスを作成する。
-
Outlookで新規メールアドレスを作成(メールアドレスを何で作成するかはご自由に)
-
cloudflareにログイン
-
メールアドレスの
Email Routing
→ カスタムアドレス -
- カスタムアドレス → 追加したいアドレスを記入
- アクション → メールに送信
- 宛先 → Outlookで作成したメールアドレス
-
保存
-
cloudflareからメールが送られてくるのでメールのリンクからメールアドレスの確認をする。
これでカスタムアドレスの準備はok
maijetのアカウント作成
まずはアカウント作成。
アプリごとにアカウントを作成しておくと管理がしやすい気がする。
ただアカウントを分けていることを忘れると設定で嵌る。(実体験)
maijetのAPIキーの取得
-
welcome Guide
のDeveloper
からCreate API Key
-
APIキー
とSECRETKEY
をメモするかどっかに保存しておく
maijetにドメイン関係の設定をしていく
welcome Guide
のMarketer
からSet up domain
このページを起点に設定をしていく。
ドメイン名の設定
-
Domains and senders
のDomains
にあるAdd domain
を選択
- Domain → 作成したアプリのドメイン名
- Label → わかりやすいラベル ~officialとか
- 追加
- 追加した後ドメイン検証用のDNS設定が表示されたと思うので、それをCloudflareに登録するしてから確認ボタンを押す。(といけたと思うけどちょっと忘れた。)
メール送信に使うアドレスの設定
mailjetに送信で使うアドレスを前もって登録しておかなければならないので、送信用のカスタムアドレスをここに登録。
-
Domains and senders
のSender addresses
にあるAdd a sender address
を選択
(先ほどのドメイン名を設定した下側)
- Label → わかりやすいラベル
- Email → 先ほどcloudflareで設定したカスタムアドレス
- 用途 → 認識に使うのであれば一番上
- 追加
- mailjetからメールが届くのでメールのリンク
Activate now
でアクティブにする
これで追加完了
SPF/DKIM認証の設定
-
SPF/DKIM Aurhentication
の下のドメインの右端にある歯車からSetup SPF/DKIM Authentication
を選択 - それぞれのsetup用のDNS設定がで表示されるのでこれらをCloudflareに設定
-
SPF/DKIM Aurhentication
に戻ってどちらもokになっていれば完了
ここまで来たら大方mailjetでの設定は終了。
次はRails側。
deviseのmodelを修正
注意
deviseはすでに入れてあってマイグレーションとか終了しているという前提で話しています。
まだの方はこちらの記事がとても参考になったので活用して実装してください。
[Rails] deviseの使い方(rails5版)
confirmable
を有効にする。
以下一部抜粋
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable,
:confirmable, :timeoutable
mailjetのgemを入れる
- gemfileにmailjet.gemを入れる。
mailjet-gem の github
gem "mailjet"
入れるときgroup
に入れると開発環境でエラーが出た気がするから入れない方がいいかも。
-
bundle install
でインストール
Railsの設定
-
config/environments/production.rb
に以下の設定を追加
config.action_mailer.delivery_method = :mailjet
config.action_mailer.default_url_options = { host: "カスタムドメイン名", protocol: "https" }
-
config/initializers/mailjet.rb
を作成し以下を設定
Mailjet.configure do |config|
config.api_key = ENV["MAILJET_API_KEY"]
config.secret_key = ENV["MAILJET_SECRET_KEY"]
config.default_from = "info@syn-on.com"
config.api_version = "v3.1"
end
-
.env
を作成し、以下を追加
# MailJet
MAILJET_API_KEY = 'mailjetで取得したAPIキー'
MAILJET_SECRET_KEY = 'mailjetで取得したシークレットキー'
注意
一応.gitignore
で.env
が対象になっていることを確認しておくと安心。
このファイルに記載してあるファイルはgithubには表示されない。
# Ignore all environment files (except templates).
/.env*
!/.env*.erb
-
config/initializers/devise.rb
のDevise.setup do |cinfig|
の中に以下の設定を追加
Devise.setup do |config|
config.mailer_sender = "送信用のカスタムアドレス"
config.mailer = "Devise::Mailer"
end
ここまでくれば後はHerokuだけ。
Herokuの設定
HerokuのアプリのSettings
から、Config Vars
にAPIキーとシークレットキーを登録する。
- KEY → MAILJET_API_KEY と MAILJET_SECRET_KEY(.envで登録した名前)
- VALUE → それぞれのキーの値
以上。
終わりに
ここまで読んで頂きありがとうございます。
そんなこんなで送れるようになりましたでしょうか?
この記事は私が実装した後にできるだけ忘れないように書いているのですが、色々模索しながら進めたのでちょっと抜けていたり、余計なことが書いてあるかもしれません。
もし、ここ違くないか?と思うことがありましたらコメント等でご指摘頂けると幸いです。
それではまた。