このブログでは、お問い合わせフォームや、エラー通知などにメール送信する処理が一部あります。
メール送信に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_USERSendGrid のアカウントのパスワードが、EMAIL_HOST_PASSWORDなります。
アカウント作成後に、以下の手順で、アカウント名、パスワードは参照できます。

  • 左メニューの、Account Detailsクリック。
    Image from Gyazo

  • AccountタブのUsernameEMAIL_HOST_USERに、Password EMAIL_HOST_PASSWORD指定する。
    Image from Gyazo


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. 参考

以下、設定時に参考にした記事になります。

以上です。

コメント