Railsでメール周りの開発をやることが多いので、ノウハウってわけじゃないが雑に書き残しておく。
思いつきで書いてるので、後で思い出したら追記予定
アジェンダ
- preview
- CSS
- HTMLメールの作り方
- 確認
- バウンス
- unsubscribe
preview
開発時にHTMLの見た目を確認する方法
実際にメール送って、 https://github.com/ryanb/letter_opener を使って確認することが多いが、preview機能を使ったほうが圧倒的に早い
Rails Guides - Action Mailer の基礎 にpreviewのリンクがあるのでこちらを参考に
CSS
HTMLメールにCSSを当てて装飾したい場合があるが、CSSは埋め込み方式 + tableレイアウトで作るのがほとんど。
CSSをせめて外のファイルで管理して他のメールに使いまわしたいので、
その場合は https://github.com/fphilipe/premailer-rails を使う
class ApplicationMailer < ActionMailer::Base
layout 'mailer'
end
html
head
= stylesheet_link_tag 'email', media: 'all'
body
= yield
.main {
background: #f3f3f3;
}
あとはテーブルレイアウトでいい感じに
HTMLメールの作り方
1からHTMLメールを作るのはすごく大変なので、HTMLメールを作ってそれをHTMLに落とし込めるようにする
以前は https://mailchimp.com/ でGUIでポチポチしていい感じに作ったあとHTMLに吐き出し、それをslimやhamlに置き換えていた
https://beefree.io/ は使ったことないけど、これでもいいかも
確認
実際にメールを飛ばすが、本当のユーザーに飛ばすのはよくないので、メールは飛ばないけど実際の画面を見れるサービスを使う。
letter_openerやpreviewでは見つからないバグを見つけるのに便利(cssで画像を埋め込んだパターンで本番だと見えないとか)
https://mailcatcher.me/ or https://mailtrap.io/
mailtrapはLaravelで使ったことあるけど、こっちのほうがセットアップ楽かも?(mailcatcherは自身でセットアップしたことない)
バウンス
メールのバウンス管理は本当にだるい。今までメールの開発について書いてきたが、めんどくさいので https://sendgrid.kke.co.jp/ 等外部のメール配信サービスに金払って使うほうがいい。
バウンス管理や開封率のレポートとか全部やってくれるし、send gridのgemもある
AWSのSESでやっていた時は、以下のような対応をした
- SESが失敗したバウンスの結果をSQSに流し込む
- https://github.com/phstc/shoryuken でSQSのデータを取り出す
- 取り出した結果をngリストみたいなテーブルに保存し、アプリケーションからメールを飛ばさないように対応
※確かAWSさんからバウンスレート10%超えたから2週間で改善しないとメールをスパム認定するから改善してねーって言われて速攻で対応して0.2%ぐらいにしたような記憶。ダブルオプトインじゃなくて、シングルオプトインだったからバウンスレートがやばかった
unsubscribe(配信停止)
メルマガ等送られてくる場合、たまに非購読にするリンクがないメールが送られてくるが、特定電子メール法により禁止されているので、つける必要がある
(法律周りはそこまで詳しいわけじゃないのでご了承ください)
よくあるのが、ログイン後にこの画面にいってメルマガ配信停止してくださいみたいなのあるけど、そもそもパスワード覚えてねぇよみたいなことになりがちで結果的に迷惑メール設定してみたいなパターンが多すぎる。
ちなみにsendgridを使えばメール本文に1クリックで配信停止にできるリンクを仕込めます。
結論
自分で開発するのはやめて、sendgridを使おう