0

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

你好,{{name}}!

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

但是,当按照文档中的示例进行操作时,只要包含个性化设置,我就会收到 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 Bad Request 并没有那么有帮助......

看起来这些功能实际上还不支持:https ://github.com/sendgrid/sendgrid-python/issues/591

4

2 回答 2

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)
于 2018-10-28T16:27:18.703 回答
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

于 2018-08-28T16:31:40.040 回答