MandrillのWebhocksとDjrillの組み合わせ

みなさんこんにちは。

以前イナゴについて語った会津です。

久しぶりの投稿になります。

今回は、以前業務で使った「Mandrill」というメール配信サービスで、メールを正常に送信できなかったなど何か問題が起こった場合に通知するWebhocks設定と、Djangoのパッケージの「Djrill」の組み合わせについて書けることを書こうと思います。

と言っても、Mandrill側の設定は自分では行ってないので、本当に書けるのはDjango側での設定のみになります…。


準備

まずは、Djrillをインストールする方法ですが、これは普通に「 pip install Djrill 」で入ります。

そして、プロジェクト直下のurls.pyに以下を追加してください。

from djrill import urls as djrill_urls

urlpatterns = patterns('',
...
url(r'^djrill/', include(djrill.urls)),
)

それから、Mandrill側から送られてくるパラメータを受け取り、そのあとの処理を設定するファイルを用意しましょう。自分の時は「mandrill_hocks.py」という名前でした。


パラメータを受け取ってログを出す

設定ファイルの中身ですが、簡単に書けば以下のような感じです。

from djrill.signals import webhook_event
from django.dispatch import receiver

@receiver(webhook_event)
def handle_bounce(sender, event_type, data, **kwargs):
if event_type == 'hard_bounce' or event_type == 'soft_bounce':
     # ログなどの処理
logger.error('%s: %s' % (data['msg']['bounce_description'], data['msg']['email']))

@receiver(webhook_event)
def handle_blacklist_sync(sender, event_type, data, **kwargs):
if event_type == 'blacklist_add' or event_type == 'blacklist_remove':
     # ログなどの処理
logger.error('%s: %s' % (event_type, data['reject']['email']))

これは、メールが正常に送信できなかった場合、もしくは、Mandrillのブラックリスト(ブラックリストに載ると、そのアドレス宛にはメールは送信されない)が変更された場合にログに出すものになります。

このログの出力イメージとしては、こんな感じになります。

invalid_domain: (送信しようとしたアドレス)
blacklist_add: (ブラックリストに載ったアドレス)


また、ログの他に指定のアドレスに通知メールを送る設定をしても良いと思います。(メール送信のやり方はプロジェクトそれぞれなので、ここでは省略します)

ただし、その通知メールが送信失敗すると、Webhocksが再度動き無限ループが発動します。(体験談)

その場合は、落ち着いてメール送信処理の箇所をコメントアウトしましょう。

株式会社日本システム技研's job postings
1 Likes
1 Likes

Weekly ranking

Show other rankings
If this story triggered your interest, go ahead and visit them to learn more