среда, 4 мая 2011 г.

Отправка писем с DKIM-подписью в Django

Если вы вдруг обеспокоились тем, чтобы ваши письма не попадали в черные списки почтовых сервисов и решили-таки прикрутить DKIM-подписи к своим письмам в Django, то нет ничего проще.

Начиная с версии 1.2, Django стала поддерживать почтовые backend'ы, что существенно облегчило жизнь разработчику в этом плане. Все, что требуется, так это установить pydkim и создать модуль с бекендом, например <ваше_приложение>/mail/backends.py:

from django.core.mail.backends.smtp import EmailBackend
from django.conf import settings
import dkim

class DKIMBackend(EmailBackend):
         u'''
         Бекенд, позволяющий вставлять в письма DKIM-подпись.
         Требует определения переменных в settings:
                 DKIM_SELECTOR - селектор, все что до точки в  "selector._domainkey.example.com"
                 DKIM_DOMAIN - домен например, "example.com"
                 DKIM_PRIVATE_KEY - приватный DKIM-ключ. Полностью, включая "-----BEGIN RSA PRIVATE KEY-----" и т.п.
         @requires: python-dkim, есть на http://hewgill.com/pydkim
         '''
     def _send(self, email_message):

         if not email_message.recipients():
             return False
         try:
             message_string = email_message.message().as_string()
             signature = dkim.sign(message_string,
                                   settings.DKIM_SELECTOR,
                                   settings.DKIM_DOMAIN,
                                   settings.DKIM_PRIVATE_KEY)
             self.connection.sendmail(email_message.from_email,
                     email_message.recipients(),
                     signature+message_string)
         except:
             if not self.fail_silently:
                 raise
             return False
         return True

Останется только сменить в settings.py параметр EMAIL_BACKEND на "<ваше_приложение>.mail.backends.DKIMBackend" и прописать там же DKIM_SELECTOR, DKIM_DOMAIN и DKIM_PRIVATE_KEY (смотрите докстринг в коде). Сгенерировать недостающие ключи можно тут.

Комментариев нет:

Отправить комментарий