RailsとSendGridでメール送信をした話

業務で`SendGrid`を導入しました。
色々と調査したことを忘れないように残していきます

##### 僕が実施したこと

1. アカウント登録申請
1. RailsからSendGrid経由でのメール送信
1. Whitelabelの登録
1. サブユーザの作成
1. IPウォームアップについて

# 1.　アカウント登録申請

Freeプランでもアカウント登録時の審査があります。
利用目的をきちんと書かないと駄目です。
僕が申請したときの文章は↓みたいな感じ。

```
利用目的
  コンテンツマネジメントシステムで作成したアンケートフォーム回答時の自動返信メールでの使用を想定しています
送信数
  開発・検証用のため未定です
宛先の入手方法
  開発・検証用のため未定です
```

僕は朝一で申請を出したところ、夕方にはアカウントが発行されました。
有料プランの場合は利用目的についてあれこれ聞かれる場合があります。
利用目的が利用規約（二次利用についてなど）に触れていたりすると連絡をとりあう必要があります

# 2. RailsからSendGrid経由でのメール送信

SendGrid経由でメールを送信する方法は２つあります。

+ SMTPとして利用する
+ APIとして利用する

僕が利用したのはSMTPの方です。
今回はそちらの方を説明します。

## SMTPとしての利用方法

テクニカルなことは一切ありません。
SMTPのアドレスをSendGridのものに変更するだけです。
Gem等のインストールも必要ありません。

```ruby:config/environments/development.rb
# これはGmail用です
config.action_mailer.smtp_settings = {
  :enable_starttls_auto => true,
  :address => 'smtp.gmail.com',
  :port => '587',
  :domain => 'smtp.gmail.com',
  :authentication => 'plain',
  :user_name => 'Gメールのアドレス',
  :password => 'Gメールのパスワード'
}
```

これを↓に変えます

```ruby:config/environments/development.rb
# こっちがSendGrid用です
config.action_mailer.smtp_settings = {
  :user_name => 'SendGridのユーザ名',
  :password => 'SendGridのパスワード',
  :domain => 'y',
  :address => 'smtp.sendgrid.net',
  :port => 587,
  :authentication => :plain,
  :enable_starttls_auto => true
}
```

これだけでSendGrid経由でメールを送信出来るようになります。
簡単でしたでしょう？

# 3. Whitelabelの登録

前項でSendGrid経由での送信は出来るようになったと思いますが、
それだけだと受信者から見えるFromアドレスには、`SendGrid経由`と表示されてしまいます。

> <img width="284" alt="スクリーンショット 2016-07-01 12.01.02.png" src="https://qiita-image-store.s3.amazonaws.com/0/80253/63bb7101-cd1e-d9b4-4115-fce63092c2b0.png">

理由をものすごく簡単に言うと、
Fromアドレスのドメインと実際の送信元のアドレスのドメインが異なっているためです。
詳しくは`DKIM認証`でぐぐってみてくださいm(_ _)m
これを回避するためにはWhitelabelの登録という作業が必要です。
気にしない人はそのままで大丈夫です（笑）

Whitelabelを簡単に言うと、
使用するドメインをSendGridに登録して、
あたかもそのドメインからメールを送信しているようにすることです。

やることはWhitelabelの登録後、SendGridから指定されたCNAMEレコードを、使用するドメインのDNSに登録するだけです
登録画面は`Settings > Whitelabels > Domains > AddWhitelabel`にあります
サブドメイン名は他で使用していなければ任意だそうですが、推奨は`em`や`em1`だそうです（理由はわかりません。ごめんなさいm(_ _)m）
AutomatedSecurityは基本的にはONにしてください。
理由は[ここ](https://sendgrid.kke.co.jp/docs/User_Manual_JP/Settings/Whitelabel/domains.html#-Automated-security)に書いてあるとおりです

> <img width="749" alt="スクリーンショット 2016-07-13 10.37.28.png" src="https://qiita-image-store.s3.amazonaws.com/0/80253/609e0fe1-069f-ea47-74d2-cb565101dece.png">

Whitelabelを登録すると↓ような画面に登録しないといけないCNAMEレコードが表示されます

> <img width="1050" alt="スクリーンショット 2016-07-13 10.37.12.png" src="https://qiita-image-store.s3.amazonaws.com/0/80253/79f067a1-7421-14ce-77ad-e2588006f933.png">


Whitelabelを正常に登録すると、SendGrid経由という表記は消えます

> <img width="289" alt="スクリーンショット 2016-07-01 12.03.56.png" src="https://qiita-image-store.s3.amazonaws.com/0/80253/2389b6f9-e7c0-4004-bf0e-4a09929da195.png">


# 4. サブユーザの作成

親アカウントに紐づく子アカウントです
アカウント毎に到達率などを取得できるため、使用方法毎にサブユーザを作成することが推奨されています。
サブユーザの作成には有効なメールアドレスが必要です。
送信可能件数は親子全てのアカウントの合計値なので、サブユーザを作成したところで送信可能件数が倍になるわけではありません。

# 5. IPウォームアップについて
特定のIPからいきなり大量のメールを送信するとそのIPが各ISPによってブロックされることがあるそうです。
そのため、一日毎に徐々にメールの送信数を増やしていくというIPウォームアップという作業が必要になる場合があります

新規でWebサービスを開発してそこで利用する場合は、特に必要のない場合が多いです。
ユーザ数の増加に伴う送信数の増加で自然とIPウォームアップになっているからです。

既に稼働しているサービスのメール機能をSendGridに載せ替える場合、
またはメール機能リリース直後からある程度の送信数を見込んでいる場合は必要かどうかを問い合わせ方が無難です

ちなみに、一日１００〜４００件程度のトランザクションメールの場合はIPウォームアップは不要とのことです（１００％ではないようですが。）

# 余談

サポートからの回答はかなり早いです
アカウント作成は当日のうちに作成されました（３営業日以内という話はなんだったのか）
その他の問い合わせに対する回答もすぐに来ます
翌営業日中に回答致しますと言っておきながら３０分で回答が来た時はびっくりしました