このブログでは、お問い合わせフォームや、エラー通知などにメール送信する処理が一部あります。
メール送信にSnedGridを使いたかったので、アカウント取得、Django での 設定、Postfixの設定変更などを実施してみました。
実施したことを記載します。
1. 目次
2. SnedGrid でアカウントを取得する
以下から、メールアドレスを登録して、アカウントを申し込みます。
新規会員登録 | SendGrid【日本公式サイト】
メールアドレスを登録すると、個人情報、用途などを入力する画面に進みます。
企業ではなくてもアカウントは取得できますが、審査などがあり2、3日かかるので、待ちます。
3. 独自ドメインの設定
独自ドメインを利用する - ドキュメント | SendGrid
を参考に、独自ドメインの設定を行いました。
Domain Authentication
の設定のみ一旦行いました。
Link Branding
は、Link のトラッキングドメインを独自ドメインに変更できる設定で、
メール本文内のURLが勝手に置換されてしまいます。解除できますか? – サポート
にリンクの書き換え動作の説明が記載されています。
4. Inbound Email Parse Webhook の設定、受信したメールをスプレッドシートに書き出す
SendGrid は、メールの受信ボックスがない代わりに、Inbound Email Parse Webhook
という機能があり、メール受信内容を指定したURLにPOSTすることができます。
Inbound Email Parse Webhook
の設定は、メールを受信する - ドキュメント | SendGrid を参考に行いました。
エンドポイントとして指定するURLは、SendGridで独自ドメインを設定してGoogle Apps Scriptで受信、パースしGoogle スプレッドシートへ保存する | hiroyuki’s Ownd を参考に、Google Apps Script でスプレッドシートに記録するAPIを作成し、そのURLを指定しました。
5. Djangoでの、SendGridの設定
5.1. SendGridからのメールの送信方法
Django で SendGrid からメールを送信する方法は、Web API を使う方法と、SMTPを使う方法があります。
SMTPを使う場合は、settings.py を変更するだけで使うことができるので今回はこの方法でメール送信を行います。
5.2. EMAIL_HOST_USER、EMAIL_HOST_PASSWORD の特定方法
SendGrid のアカウントのアカウント名がEMAIL_HOST_USER
、SendGrid のアカウントのパスワードが、EMAIL_HOST_PASSWORD
になります。
アカウント作成後に、以下の手順で、アカウント名、パスワードは参照できます。
5.3. settings.pyの設定
Djangoでメール送信 - ドキュメント | SendGrid に記載がありますが、以下のように設定できます。
- settings.py で sendgridをSTMPサーバとして使用する
EMAIL_HOST = 'smtp.sendgrid.net' EMAIL_HOST_USER = 'sendgrid_username' EMAIL_HOST_PASSWORD = 'sendgrid_password' EMAIL_PORT = 587 EMAIL_USE_TLS = True
また、デフォルトのFROMアドレスはDEFAULT_FROM_EMAIL
を指定をすると、設定可能です。
DEFAULT_FROM_EMAIL= 'webmaster@monotalk.xyz'
エラーメール送信時のFROMアドレスは、SERVER_EMAIL
を指定すると、設定可能です。
SERVER_EMAIL= 'error-notifications@monotalk.xyz'
6. Postfixの設定変更
Postfixでメール送信 - ドキュメント | SendGrid を参考に、SendGridをリレーホストとして設定しました。
CentOS 7 では、これで sendmail コマンドで送信されるメールにもSendGrid が使用されるようになります。
また、独自ドメインは取得していたものの、Postfixからの送信メールの設定はしていなかったので合わせて設定しました。
main.cf
に追記した設定は以下になります。
- main.cf
# SendGrid relay settings smtp_sasl_auth_enable = yes smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd smtp_sasl_security_options = noanonymous smtp_sasl_tls_security_options = noanonymous smtp_tls_security_level = encrypt header_size_limit = 4096000 relayhost = [smtp.sendgrid.net]:587 # hostname settings myhostname = mail.monotalk.xyz mydomain = monotalk.xyz masquerade_domains = monotalk.xyz
また、crontabからのメール送信元の設定のため、MAILFROM
を以下のように設定しました。
MAILTO="xxxxxxxxxxx@gmail.com"
MAILFROM="error-notifications@monotalk.xyz"
7. 参考
以下、設定時に参考にした記事になります。
- DjangoとSendGridでいい感じのメール配信の仕組みを作る - Qiita
- SendGridとの連携 - ドキュメント | SendGrid
- Shinobilayer: SendGrid初心者のための注意点(SoftLayer版) - Qiita
- メール運用がロストテクノロジーになっていく話 - Qiita
- SendGridでメール配送を始めるためのまとめ - Qiita
- 独自ドメインを利用する - ドキュメント | SendGrid
- Inbound Email Parse Webhook - ドキュメント | SendGrid
- Postfixでメール送信 - ドキュメント | SendGrid
- CentOSとPostfixを使って送信専用のメールサーバーを構築する方法 - レムシステム エンジニアブログ
- Cronの標準出力結果メールの送信元を変更する方法 | Step On Board
- Inbound Email Parse Webhook - ドキュメント | SendGrid
- SendGrid-Inbound Email Parse Webhookでメール受信をPUSH(第1回) | MIKI-IE.COM(みきいえMIKIIE)
以上です。
コメント