4

プラグを差し込めるようにしようとしているアプリを作成しています。django-mailer唯一の問題は、アプリが送信されたメールと送信されなかったメールを追跡し、メールの内容にアクセスできるように、少し変更する必要があることです。

django-mailerこれが、、または自分のアプリ用にフォーク/微調整することにした他のPythonライブラリを使用している他の人と競合しないようにするための最良のアプローチは何ですか?

フォークとそれに関連するすべてのインポートでメーラーの名前を変更する必要がありますか?私はもっ​​と簡単なものが欠けていますか?

4

1 に答える 1

0

関数で解くことができます。次の両方を行う関数を作成します。

  • 後で欲しいものを手に入れることができることを確認してください
  • メッセージが送信されていることを確認してください。

または、もっと重い配管を行うこともできます。必ずそれを文書化し、他の人がこれを家で無駄な目的で試さないようにしてください。代わりに、DjangoまたはDjango-mailerチームに連絡して、より良い解決策を手配できるかどうか尋ねてください。

  • django.core.mailモジュールのEmailMessageクラスを装飾します。メッセージが正常に送信されたときに、必要な情報が別の場所にも配信されるようにします。

    # wrappedmailer.py
    from django.core.mail import EmailMessage
    
    class WrappedEmailMessage(object):
        def __init__(self, message):
            self.__message = message
            # more initialization
    
        # override all EmailMessage methods:
        # do what you want with what is provided,
        # then return self.__message.method(...)
    
  • 次に、アプリケーションが初期化されると、django-mailerがロードされる前に、次のことができます。

       import django.core.mail
       import newmailer
    
       django.core.mail.EmailMessage = newmailer.WrappedEmailMessage
    

django.core.mailモジュールは同じPythonプロセス内のキャッシュにとどまるため、django.core.mailがインポートされるたびに、EmailMessageクラスは実際にはWrappedEmailMessageクラスになります。

于 2012-08-22T20:25:18.273 に答える