Herokuで定期的にメールを配信する【Python, SendGrid】

Herokuで定期的にメール配信をするための手順メモ。

Herokuのアドオン「Heroku Scheduler」で定期的な処理を行う。
メールの配信には「SendGrid」を用いる。

【環境】

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.14.3
BuildVersion:	18D109

$ heroku --version
heroku/7.22.2 darwin-x64 node-v11.9.0


【手順】

1. SendGridのアカウントを作成する

審査が通るまで~2営業日ほど待機。
sendgrid.kke.co.jp


2. SendGrid API Keyを作成する

SendGrid登録完了メールに記載されているユーザ名でログイン。
ダッシュボードから「API Keys」に移り、API Keyを作成する。


3. スケジュールを設定する

# ログイン
$ heroku login

# Appにアドオン「Heroku Scheduler」を追加する
$ heroku addons:add scheduler:standard

# スケジュール設定画面を開く
$ heroku addons:open scheduler

開いたページ内のボタン「Add new job」をクリックして、
実行するコマンド、実行周期、時間帯を設定する。
時間帯はUTCのため、9時間の時差を考慮する必要あり。

f:id:rkr0314:20190327234439p:plain
スケジュール設定例


4. メール配信プログラムの作成

# Herokuの環境変数にSendGrid API Keyを設定する
$ heroku config:set SENDGRID_APIKEY="<SENDGRID APIKEY>"

# 環境変数の確認
$ heroku config

# 必要なパッケージの登録
$ echo sendgrid >> requirements.txt

# メール配信プログラム
$ vim send_mail.py
# -*- coding: utf-8 -*-
import os
import sendgrid
from sendgrid.helpers.mail import *

APIKEY = os.getenv('SENDGRID_APIKEY', None)
sg = sendgrid.SendGridAPIClient(apikey=APIKEY)

from_email = Email("<FROM ADDRESS>")
to_email   = Email("<TO ADDRESS>")

subject = 'Send Mail Test'
content = Content('text/plain', 'Hello World')

mail = Mail(from_email, subject, to_email, content)
sg.client.mail.send.post(request_body=mail.get())


5. デプロイして完了!!

意外と簡単にできまちた。


【参考】

devcenter.heroku.com
qiita.com
qiita.com
qiita.com