与哨兵避免曼德勒错误

2024-06-02 07:57:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的服务器上安装了一个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头的部分:

^{pr2}$

(此异常由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头。但我不喜欢编辑/修补第三方代码,我也不知道在其他地方是否需要这个头。在

如何正确实现这一点?从Mandrill切换现在不是一个选择。在

谢谢!在


Tags: selfapiidmessageaddress电子邮件emailmy
1条回答
网友
1楼 · 发布于 2024-06-02 07:57:35

由于您无法轻松地更改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)

相关问题 更多 >