【问题标题】:SendGrid Python API Dynamic Template DataSendGrid Python API 动态模板数据
【发布时间】:2021-05-14 01:23:02
【问题描述】:

我有一个 python 脚本,它从我们的数据库中提取客户交易数据并将其格式化以供 SendGrid 的动态模板使用,但我无法从 SendGrid 文档或任何其他来源中弄清楚如何在他们的电子邮件中插入每个客户的唯一数据.这是脚本中的相关代码(假设所有变量都由脚本预先填充):

from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail, To

message = Mail(
    from_email=("no_reply@mywebsite.com", "My Website"),
    to_emails=to_emails,
    is_multiple=True)

message.template_id = "d-thetemplateidthatiamusing"

try:
    sendgrid_client = SendGridAPIClient("SG.thesecretkeythatdoesnotbelongonstack")
    sendgrid_client.send(message)
except Exception as e:
    print(e)

当我运行它时,它会发送给正确的客户电子邮件,但没有任何自定义数据。我准备好为每个客户发送以下对象,但不知道如何通过电子邮件将其附加到电子邮件中:

{
    "name": "Customer Name",
    "games": [
        {
            "game_title": "Test Team vs. Demo Team",
            "event_name": "Live Showcase I",
            "date": "5/9/2021",
            "score": "79-55",
            "url": "app.website.com/"
        },
        {
            "game_title": "Test Team vs. Demo Team",
            "event_name": "Live Showcase I",
            "date": "5/9/2021",
            "score": "79-69",
            "url": "app.website.com/"
        }
    ]
}

当我将此 JSON 放入 SendGrid 模板测试数据区域时,它与我的设计完美配合。有什么想法吗?

【问题讨论】:

    标签: python sendgrid sendgrid-api-v3


    【解决方案1】:

    你缺少一个属性:

    message.dynamic_template_data = {
     "name": "Customer Name",
    }
    

    要动态传递信息,您需要将客户实例传递给您的电子邮件调度员:

    def sendEmail(instance):
    
        message = Mail(
        from_email=("no_reply@mywebsite.com", "My Website"),
        to_emails=to_emails,
        is_multiple=True)
    
        message.dynamic_template_data = {
         "name":instance.name
        }
    
        message.template_id = "d-thetemplateidthatiamusing"
    
        try:
            sendgrid_client = SendGridAPIClient("SG.thesecretkeythatdoesnotbelongonstack")
            sendgrid_client.send(message)
        except Exception as e:
            print(e)
    

    【讨论】:

      【解决方案2】:

      您没有包含to_emails 的初始化代码, 这是一个link 示例,它显示了如何为每个“收件人”电子邮件地址设置动态模板数据。另外,我不清楚,每个收件人都有自己的 json 数据集,还是 name 他们之间唯一的区别?换句话说,他们是否都会收到相同的games 数据?

      这里有一段摘录(调整收件人和dynamic_template_data 以满足您的需要):

      import os
      from sendgrid import SendGridAPIClient
      from sendgrid.helpers.mail import Mail, To
      
      to_emails = [
          To(email='test+to0@example.com',
             name='Customer Name 0',
             dynamic_template_data={
                 'name': 'Customer Name 0',
                 'games': games,
             },
             subject='Override Global Subject'),
          To(email='test+to1@example.com',
             name='Customer  Name 1',
             dynamic_template_data={
                 'name': 'Customer Name 1',
                 'games': games,
             }),
      ]
      message = Mail(
          from_email=('test+from@example.com', 'Example From Name'),
          to_emails=to_emails,
          subject='Global subject',
          is_multiple=True)
      message.template_id = 'd-12345678901234567890123456789012'
      
      try:
          sendgrid_client = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
          response = sendgrid_client.send(message)
          print(response.status_code)
          print(response.body)
          print(response.headers)
      except Exception as e:
          print(e.message)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多