🗂
Action Mailer を試す
Action Mailer (+Sendgrid) を試してみる
Sendgridとは
- 多機能メール送信代行
- 最初に(最初じゃなくても)見ておくべき動画はこちらです。
はじめてのSendGrid
下準備
rails new action_mailer -d mysql -B --skip-test
rails webpacker:install
bundle install
bin/rails generate mailer User
rails generate scaffold user name email login
rails db:create
rails db:migrate
rails s
mail 送信
app / controllers / users_controller.rb
- user 作成時にメールを送信する
- 入力された @user 情報を利用して、 UserMail を呼び出すと変数渡しができる
def create
@user = User.new(user_params)
UserMailer.with(user: @user).first.deliver_now
end
app / mailers / user_mailser.rb
- 他 Controller から呼び出された時には params として受け取る
- mail ごとに固定値を定義したい場合にはインスタンス変数として定義する
class UserMailer < ApplicationMailer
def first
@user = params[:user]
@url = 'http://localhost:3000/login'
mail(to: @user.email, subject:'action_mailer test')
end
end
app / views / user_mailer / first.html.erb, first.text.erb
でも、いまいち html / text の使い分けの方法がわからん。
- html として送信する場合
<!DOCTYPE html>
<html>
<head>
<meta content='text/html; charset=UTF-8' http-equiv='Content-Type'/>
</head>
<body>
<h1> First mail. To <%= @user.name %></h1>
<p>
login id「 <%= @user.login %> 」
login url <%= @url %>
</p>
</body>
</html>
- text として送信する場合
First mail. To <%= @user.name %>
login id「 <%= @user.login %> 」
login url <%= @url %>
送信してみる
http://127.0.0.1:3000/users/new
ユーザ登録- まぁ、着信しないですね...。(それはそう)
- 自分の gamil を利用して、見ず知らずのPC(IP)からいきなり from gmail を語られて送信しても通る可能性なんて一ミリもないですよね。
SendGrid で API key を生成する
秘匿情報を登録する
- 秘匿情報なので enc されるところに。
EDITOR=vi rails credentials:edit
- 何のKeyかわかりやすい感じで
SENDGRID_API_KEY: SG.先ほど発行した SendGrid の API key
- 実際には発行されたAPI Keyをそのまま登録してます。
rails c 確認
[1] pry(main)> Rails.application.credentials.dig(:SENDGRID_API_KEY)
=> "SG.先ほど発行した SendGrid の API key"
[2] pry(main)>
config ( environment/development.rb )
ActionMailer::Base.smtp_settings = {
:user_name => 'apikey',
:password => Rails.application.credentials.dig(:SENDGRID_API_KEY),
:domain => 'gmail.com',
:address => 'smtp.sendgrid.net',
:port => 587,
:authentication => :plain,
:enable_starttls_auto => true
}
http://127.0.0.1:3000/users/new
改めて新規ユーザ登録...!- 色々と酷い言われようですが、届きはしましたよ...!
- けどテストとはいえバンバン投げてたら蹴られそう。
- けどテストとはいえバンバン投げてたら蹴られそう。
所感
- 便利なんだけど不安(もっと複雑だと思ってた思いから)
- セーフティ機能周りを深掘りしたい(Sidekiq含め、運用部分をもっと)
- SendGrid のAPI送信でも Template 管理ができるらしいので試したい
なので、まぁ... 他も覚えたら改めて深掘りしたいですね...!
商用利用
- 警告でたり届かなかったりするので、 spf, DKIM, DMARC をちゃんと設定しようね。
- SendGrid を使うなら Sender 設定もね
- job を永続化する仕組みが必要よう。 (Sidekiq 周りを調べた後に改めて追記予定)
- 全部 SendGrid 経由するなら別に?だそうだけど、どちらかというと非同期にメール送信処理をしたい場合には Sidekiq を使うそうな
- Bounce 時の処理についても確認する
- 配信停止かなぁ、フラグもっといたほうが良さそうだけど、他に影響ないから後からAddColumnでもいいんかな。
- SendGrid さんならよろしく bounce 先には再度送信しないようにしてくれる(強制?)
- 都度確認する手間があるので、SendgridからSlackに通知とかほしい
- 開封率とか取ってたりするけど、どうやるんだろうな。
- SendGrid で確認できるけども...けども?
- そもそもそこまで興味なかった()
Discussion