SendGridのメール送信前チェックリスト

SendGridエバンジェリストの[@nakansuke](https://twitter.com/nakansuke)です。クリスマスイブにはぶりしゃぶを堪能しました。

これは[SendGrid Advent Calendar 2016](http://qiita.com/advent-calendar/2016/sendgrid)最終日の記事です。
昨日は[@Nagafuchik](https://twitter.com/Nagafuchik)さんの[Mautic × SendGrid連携してみた](http://gyori.hatenablog.com/entry/201612mautic-sendgrid)でした。

このアドベントカレンダーも沢山の方々のご協力のお陰で無事最終日までつなぐことが出来ました。ありがとうございます。
最後の最後になりましたがSendGrid送信時に確認すべきことをチェックリストにまとめてみました。簡単に送ることができるせいで、よく設定周りを確認せずいきなり大量送信して問題が発生してしまう、というのを結構見かけます。

本番で使う前に一つ一つ確認しておきましょう。

# 事前準備
## リストのクリーニング
はい、いきなりでました。これが一番重要です。
SendGridでは[異常なアクティビティを検知したときにアカウントを凍結する](https://support.sendgrid.kke.co.jp/hc/ja/articles/203392245)ことがあります。一番多いのがバウンスが多発してこれはやばい、と凍結されるケースです。

バウンスが多発することで[レピュテーション](http://qiita.com/nakansuke/items/cbdf3a3ba130431be466)が低下してしまい、正常に配送ができなくなる可能性があるためです。共有IPアドレスを利用している場合は他のユーザに迷惑がかかってしまいます。

「いや、私はちゃんと正当なメールを送ってるんで」というのは言い訳にはなりません。メールを受ける側から見ると、正当な人なのかスパマーなのかは、観測された事実からしか判断はできません。
ではどうやってクリーニングすればいいのでしょうか。

#### 手動で削除
ログを保存している場合、過去にバウンスしたアドレスは全てリストから外します。うちは3回までバウンスをOKにしてるんで、という話もよく聞きますが、ハードバウンスは恒久的なエラー(携帯キャリアなどの一部の例外を除く)なので、1回で削除してしまいましょう。

#### 外部のクリーニングツールを利用する
リストサイズが大きい場合や、ログが残っていないような場合はクリーニングツールを使いましょう。
以下のようなサービスがあります。

- [BriteVerify](http://www.briteverify.com/)
- [Webbula](https://webbula.com/)
- [kickbox](https://kickbox.io/)

これらのサービスはCSVでリストをアップしたり、APIでリストを渡すことで、有効/無効なアドレスを判別し結果を返してくれます。実際にメールを送るわけではないので、宛先がチェックされているということを気づくことはありません。

SendGridが推奨しているのはBriteVerifyです。１点注意点としては、BriteVerifyはyahoo.co.jpの判定はできないようなので、yahoo.co.jpのアドレスが多い場合は、他のサービスを試してみてください。

メールアドレスを取得してから何年も経過している場合や、きちんとバウンスしたアドレスをリストから除去していない場合、SendGridを使い始めたタイミングでバウンスが大量発生し、凍結されるケースが非常に多いです。
特に他サービスから移行する際など、きちんと除去されているはず、と思い込んでいて実は入ったままだった、ということもあるのでしっかりと確認しておきましょう。

# 初期設定
## 独自ドメイン利用に関する設定(Whitelabel)
SendGridでは独自ドメインに関する設定として、

- Domain Whitelabel
- Email Links Whitelabel
- IP Whitelabel

の3つを用意しています。これらを設定することで、ユーザ自身のドメインから来たメールであると、見せかけることができるようになります。設定しない場合、SendGridドメインから来たメールであるように見えます。

#### Domain Whitelabel
SPFとDKIMを独自ドメインで認証可能な状態にします。
詳しくは、[SendGridでSPFやDKIMを設定する](http://qiita.com/nakansuke/items/bd9988206987cc46bdd2)を確認してください。よくある質問の部分は、本当によく聞かれる質問なのでぜひご確認ください。

#### Email Links Whitelabel
各種トラッキングに使用するリンクのドメインを独自ドメインにします。
例えば開封トラッキングを使用する場合、メール送信時に、SendGridが自動的に画像ファイルを埋め込み、開封時にそこにアクセスを受けることで開封を確認します。設定をしない場合、sendgrid.netドメインへのアクセスになるのですが、それを独自ドメインに変更することが可能です。
設定方法については[独自ドメインを利用する](https://sendgrid.kke.co.jp/docs/Tutorials/D_Improve_Deliverability/using_whitelabel.html)を確認してください。

#### IP Whitelabel
これは結構マニアックな機能で、送信元IPアドレスを逆引きしたときの結果のドメインをSendGridのものから独自ドメインに変更します。
![元のメッセージ.png](https://qiita-image-store.s3.amazonaws.com/0/24785/074518a2-6c06-86a4-9171-0b43ca7b0bec.png)

正直なところ、どうしてもSendGridの文字を隠したい場合とかでなければ設定をしなくても問題はないと思います。逆引きをした時にドメインが設定されていない場合に受信を拒否するというISPは存在するようですが、それがFromのドメインとまで一致しているかどうかまで確認しているというのは聞いたことがありません。

## 自動HTML変換機能
SendGridではTextパートのみのメールを自動的にTEXTとHTMLのマルチパートメールに変換して送信する機能を提供しているのですが、厄介なことにデフォルトでその機能が有効になっています。

TEXTからHTMLの変換に[MKDoc-Text-Structured](http://search.cpan.org/~bpostle/MKDoc-Text-Structured-0.83/lib/MKDoc/Text/Structured.pm)というライブラリを使用しているようで、そのため、改行が思ったようにつかない。という問題が発生しやすいです。

正直この変換機能に頼るくらいだったら、きちんとHTMLパートを自分で設定するか、TEXTのみのメールを送るほうが安全だと思います。

Settings > Mail Settings > Plain Content で設定を変更可能です。これがまた紛らわしいのですが、**ONにすると自動変換が無効になります**。

![ PlainContent.png](https://qiita-image-store.s3.amazonaws.com/0/24785/c7f7163f-29c5-8d33-ad45-8aebb712fcd0.png)


## トラッキング設定
#### 開封トラッキング
こちらもデフォルトで有効になっています。上記の自動HTML変換機能と相まってテキストしか設定してないのに、自動的にHTMLパートが生成され、かつ画像が付与され開封をトラックするという挙動になるので、不要であればOFFにしておきましょう。

Settings > Tracking > Open Tracking で設定します。
![OpenTracking.png](https://qiita-image-store.s3.amazonaws.com/0/24785/9062b9db-c01a-b256-772d-cd4360d34649.png)


#### クリックトラッキング
これもデフォルトで有効になっています。オプションとして、TEXTメールでもトラッキングするかを選択することが可能です。トラッキング用のURLは非常に長くなるのでTEXTメールではトラッキングをしないようにしている方が多い印象です。

Settings > Tracking > Click Tracking で設定します。
![Clicktracking.png](https://qiita-image-store.s3.amazonaws.com/0/24785/a971b38b-913c-a7c1-4530-8e9452039499.png)


# API Keyの作成
ここまでの設定で問題なく送信はできますが、使っておいたほうが良い機能としてAPI Keyがあります。Webポータルへのアクセスに使用するユーザ名/パスワードを使用してAPIコールをすることも可能ですが、漏れたりした際に危ないので、メール送信専用のAPI Keyを作成して、それを利用することをおすすめします。
詳しい使い方は[こちら](https://sendgrid.kke.co.jp/blog/?p=3659)

# 最後に
Event WebhookやIP Access Managementなどまだまだ紹介したい機能は盛り沢山なのですが、とりあえずSendGridをはじめる上でおさえておいたほうが良いポイントを紹介しました。
まずは今回紹介した項目を確認してみて、慣れてきたら他の機能も試してみてください。
	
それでは良いメール配信を。
**Happy Sending!!**