django sendgrid发送唯一参数

eh57zj3b  于 2022-12-14  发布在  Go
关注(0)|答案(3)|浏览(147)

Sendgrid允许在发送电子邮件时指定唯一的参数。这些参数可以用于事件webhook集成以识别电子邮件doc
我在django中有一段代码使用django.core.mail.EmailMultiAlternatives通过SendGrid发送电子邮件。如果可能的话,我想指定上面提到的唯一参数。到目前为止,我尝试使用custom_args字段

email.custom_args = {'test_arg': 'value'}

但这似乎不起作用。我看到有一个django-sendgrid module,但如果可能的话,我宁愿不必重写现有的代码库。

ctehm74n

ctehm74n1#

我不使用SendGrid,但看起来Unique Arguments是电子邮件headers,根据文档:电子邮件消息,您可以添加headers,例如:

from django.core.mail import EmailMultiAlternatives

subject, from_email, to = 'hello', 'EXAMPLE@FROM.com', 'EXAMPLE@TO.NET'
text_content = 'This is an important message.'
msg = EmailMultiAlternatives(
    subject,
    text_content,
    from_email,
    [to], headers={"customerAccountNumber": "55555", },
)
msg.send()
7rtdyuoh

7rtdyuoh2#

您是否尝试过使用SendGrid Python Library
术语custom_args是特定于Web API v3 Mail Send的,因此将其添加到SMTP消息中是行不通的。Web v3 API调用比SMTP事务更快、功能更全面,但它是新一代的调用,并且有一些更新的词汇。
如果你需要通过SMTP发送,你需要在X-SMTPAPI header中使用术语unique_args,这将允许这些key:值被附加到与该发送中生成的消息相关的所有事件中。

xtfmy6hx

xtfmy6hx3#

我使用Python和Django来配置通过SendGrid发送消息:https://docs.sendgrid.com/for-developers/sending-email/django
正如其他人所提到的,匹配事件webhook和以前发送的邮件的最好方法是在发送邮件时添加一个唯一标识符。为此,您需要使用带有unique_args键/值的X-SMTPAPI头。正确配置此头非常重要,否则邮件将被拒绝。两个有用的链接:

  • 构建X-SMTPAPI标头
  • 唯一参数

基于此文档,我的实现如下所示:

MESSAGE_ID_KEY = 'jv_message_id'
message = EmailMultiAlternatives(
        subject=subject,
        body=plain_content,
        from_email=from_email or EMAIL_ADDRESS_SEND,
        to=to_emails,
        cc=cc_email,
        headers={
            'X-SMTPAPI': json.dumps({'unique_args': {MESSAGE_ID_KEY: '<internal message id>'}})
        }
    )

然后,当发送webhook时,我会得到如下所示的消息ID:

def post(self, request):
        event_data = request.data
        if not event_data:
            logger.error('Sendgrid webhook delivered an unparseable request')
            return Response(status=status.HTTP_200_OK)
            
        for event in event_data:
            event_type = event['event']
            if not (message_id := event.get(MESSAGE_ID_KEY)):
                logger.warning('Sendgrid webhook delivered an event without a unique message ID')
                continue
...

相关问题