【问题标题】:Avoid Mandrill errors with Sentry使用 Sentry 避免 Mandrill 错误
【发布时间】:2014-07-19 11:10:51
【问题描述】:

我在我的服务器上安装了一个 Sentry 实例,我想将其配置为使用 Mandrill 及其 Django 集成 djrill 发送警报电子邮件。这是我正在使用的sentry.conf.py 文件中的相关设置:

EXTRA_INSTALLED_APPS = (
    'djrill',
)
EMAIL_BACKEND = 'djrill.mail.backends.djrill.DjrillBackend'

MANDRILL_API_KEY = '[... Mandril API key ...]'
DEFAULT_FROM_EMAIL = 'my-mandrill-allowed@email.address'
SERVER_EMAIL = 'my-mandrill-allowed@email.address'

而且这个设置有效,除了由于某种原因 Mandrill 不允许设置 Message-Id 标头的部分:

NotSupportedByMandrillError: Invalid message header 'Message-Id' - Mandrill only allows Reply-To and X-* headers

(此异常由 djrill 引发,不是 Mandrill 的响应)

由哨兵here设置:

class MessageBuilder(object):
    # ...
    @cached_property
    def message_id(self):
        if self.reference is not None:
            return email_id_for_model(self.reference)

我已经设法通过编辑该方法使其工作并使其始终返回None,因此电子邮件中没有设置Message-Id 标头。但我不喜欢编辑/修补第 3 方代码,我不知道其他地方是否需要该标头。

如何正确地做到这一点?现在不能从 Mandrill 切换。

谢谢!

【问题讨论】:

    标签: python django mandrill sentry


    【解决方案1】:

    据我所知,由于您无法轻易更改 Sentry 的行为,我建议实现 DjrillBackend 的子类,在发送消息之前删除 Message-Id 标头。类似(未经测试):

    class HeaderRemovingBackend(DjrillBackend):
        def send_messages(self, email_messages):
            for message in email_messages:
                if 'Message-Id' in message.extra_headers:
                    del message.extra_headers['Message-Id']
            super(HeaderRemovingBackend, self).send_messages(email_messages)
    

    【讨论】:

    • 好吧,我在安装最新版本的 Djrill 时解决了这个问题。但我会接受这个答案,因为如果升级不是一个选项,我会实施它。谢谢!
    猜你喜欢
    • 2018-08-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-20
    • 2020-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多