4

我正在构建一个我试图保持可插拔的应用程序。唯一的问题是我需要django-mailer稍微修改一下,以便我的应用程序可以跟踪哪些电子邮件已发送/未发送并可以访问电子邮件内容。

确保这不会与使用 的其他人django-mailer或我决定为我自己的应用程序分叉/调整的任何其他 python 库冲突的最佳方法是什么?

我应该重命名我的 fork 中的 mailer 及其所有相关导入吗?我错过了一些更容易的东西吗?

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 回答