通过Python API包装器在SendGrid API v3中使用替代项时出现错误请求

时间:2018-07-29 15:31:04

标签: python sendgrid sendgrid-api-v3 sendgrid-templates

我通过SendGrid UI创建了一个不错的模板,遇到了尝试通过sendgrid python API包装器(v5.4.1)发送电子邮件的问题。我有一个具有以下(截断)文本的模板的模板ID:

  

你好,{{name}}!

     

点击以下链接以验证您的帐户:{{verification_url}}。

但是,当遵循example in the documentation时,每当包含个性化设置时,都会出现400 Bad Request错误。我包括以下个性化设置:

mail.personalizations[0].add_substitution(Substitution("{{name}}", "Example User"))

此外,mail.get()返回以下内容:

{
  'from': {
    'email': 'test@school.edu'
  },
 'subject': 'Account Verification',
 'personalizations': 
    [
      {
        'to': [{'email': 'testemail@test.com'}],
        'substitutions': {
                          '{{name}}': 'Example User'}
                         }
    ],
 'template_id': '<template_id_here>'
}

是否有任何方法可以调试正在发生的事情?不幸的是,一个400错误的请求并没有那么有用...

貌似实际上尚不支持以下功能:https://github.com/sendgrid/sendgrid-python/issues/591

2 个答案:

答案 0 :(得分:0)

几周前,我也遇到了这个问题。替换格式已更改为使用dynamic_template_data。

代替:

    mail.personalizations[0].add_substitution(Substitution("{{name}}", "Example User"))

使用:

    mail.personalizations[0].dynamic_template_data = Substitution("name", "Example User").get()

get()返回替换的JSON就绪版本。此外,请确保您至少使用的是Sendgrid API的5.6.0版本。刚刚添加了此功能,这是指向github提交的链接:https://github.com/sendgrid/sendgrid-python/commit/4be8d580ec15f1f10180a562aeace8478f76597e

答案 1 :(得分:0)

API V3最近有更改,这对我有用

import os import sendgrid from sendgrid.helpers.mail import Mail, Email, Personalization

    sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
    mail = Mail()
    mail.from_email = Email('customerservice@jafutexpress.com.ng')
    mail.subject = "You are welcome!"
    mail.template_id = 'template_id'
    p = Personalization()
    p.add_to(Email('test@example.com'))
    p.dynamic_template_data = {
    'name': 'Bob',
    }
    mail.add_personalization(p)
    response = sg.client.mail.send.post(request_body=mail.get())
    print(response.status_code)
    print(response.headers)
    print(response.body)