Railsを使ってSendGridのSMTPでメールを送ってみました。
このような手順で進めます。
- 1. ドメインの認証をする
- 2. メール送信専用のAPIキーを作る
- 3. Railsの設定
1. ドメインの認証をする
SMTPでメールを送信する場合、SMTP認証が必須となります。
とのことなのでまずはドメインの認証を行います。
Settings > Sender Authentication > Domain Authentication
と進み、Authenticate Your Domainを押します。
今回はAWSのRoute53を使用しているのでRoute53を選択します。
使用するドメインを入力してNextを押します。
次の画面でRoute53に入力する情報が表示されるのでこれをRoute53に入力していきます。
AWS側の設定
AWSのRoute53の画面の対象のドメインで、Create Record Setを押します。
そうすると、このような画面が右側に開くと思うのでName、Type、Valueをそれぞれ入力します。
この場合だと3行あったので3回繰り返して3つレコードを作ります。
Verify
最後にSendGridに戻り、②のOnce added, press Verifyにチェックを入れてVerifyを押してSuccessが出れば認証は完了です。
2. メール送信専用のAPIキーを作る
アカウント作成時のログイン情報でもメールを送ることはできますが、全権限を持ったユーザーをデプロイするのは万が一漏れた時のことを考えると危険なのでメール送信しかできないように権限を制限したキーを作成します。
Settings > API Keys
からCreate API Keyを押します。
API Key Nameを入力して、Restricted Accessを選択します。
選択すると権限一覧が開くのでMail SendをFullAccessに変更します。
変更したらCreate & Viewを押します。
するとキーが表示されるのでメモっておきます。
3. Railsの設定
RailsへのMailの設定はこんな感じで設定します。
config/initializers/mailer.rb
if Rails.env.test?
ActionMailer::Base.smtp_settings = {
address: 'localhost',
port: 587,
}
else
ActionMailer::Base.smtp_settings = {
user_name: ENV['SMTP_USER'],
password: ENV['SMTP_PASS'],
domain: ENV['SMTP_DOMAIN'],
address: 'smtp.sendgrid.net',
port: 587,
authentication: :plain,
enable_starttls_auto: true
}
end
smtp_settingsのオプション
キー名 | 値 |
---|---|
user_name | apikey |
password | 先ほどメモしたAPIキー |
domain | 認証したドメイン |
address | smtp.sendgrid.net |
port | 25、465、587、2525が設定できるが、587が推奨 |
authentication | 認証の種類、今回は:plainを設定します |
enable_starttls_auto | SendGridはSTARTTLSに対応しているためtrueにします |
ENVの設定
APIキーで送信するときにハマったのですが、APIキーを使って送信する場合にはユーザー名にapikeyを指定しないとSMTPAuthenticationErrorのような認証エラーがでます。
.envなど環境変数を管理しているファイルに書き込みます
SMTP_USER="apikey"
SMTP_PASS="xxxxxxxxxxxx"
SMTP_DOMAIN="example.com"