Sendgrid-nodejs: 发送事务模板丢弃通过数据对象指定的主题

创建于 2018-10-31  ·  19评论  ·  资料来源: sendgrid/sendgrid-nodejs

问题摘要

当使用sendgridMail.send函数发送交易模板时,任何添加到data对象的主题行都会传递sendgridMail.send (通过data.subjectdata.personalizations[someIndex].subject ) 被丢弃,并使用在实际交易模板本身上指定的主题行。

我期望的行为是data对象上指定的字段将覆盖任何现有的模板字段,但情况似乎并非如此。 查看 v3 邮件发送 API 的文档, template_id字段的描述说明:

您要使用的模板的 ID。 如果您使用包含主题和内容(文本或 html)的模板,则无需在个性化或消息级别指定这些内容。

对我来说,“您不需要在个性化或消息级别指定那些”意味着可以覆盖模板主题。 如果不是这种情况,则应将描述更改为“您不能在个性化或消息级别指定那些”。

例子

  • 我创建了一个主题为“我的电子邮件主题”的交易模板
  • 我尝试使用sendgridMail.send发送电子邮件,其中我将data.subject指定为“[TEST] 我的电子邮件主题”
  • 我收到的电子邮件的主题是“我的电子邮件主题”

重现步骤

  1. https://sendgrid.com上创建一个具有指定主题的交易模板
  2. 使用sendgridMail.send函数发送模板。 还要确保指定data.subjectdata.personalizations[someIndex].subject
  3. 确认收到的电子邮件带有原始主题行,而不是传递给 API 的主题行

技术细节:

  • sendgrid-nodejs 版本:6.3.1
  • Node.js 版本:v8.11.3
non-library issue

最有用的评论

呸! 我找到了需要设置 {{subject}} 的地方。 如果其他人遇到此问题,请进入编辑您的模板,然后单击左侧的“设置”。 将有一个空格可以输入您的主题。 在此处输入 {{subject}}。

所有19条评论

你好@10kc-zack,

我相信在交易模板中,您会将主题设置为 {{ subject }},然后在您的代码中将data.subject设置为"[TEST] My Email Subject"

那对你有用吗?

最诚挚的问候,

埃尔默

感谢@thinkingserious的回复和您的建议!

虽然这确实完成了工作(并且是我们目前使用的变通方法),但我更希望能够将主题设置为我们的 API 调用主体的一部分。 您能否确认提供给 API 的主题实际上已被丢弃并且 API 文档中缺少该信息?

你好@10kc-zack,

我相信在交易模板中,您会将主题设置为 {{ subject }},然后在您的代码中将data.subject设置为"[TEST] My Email Subject"

那对你有用吗?

最诚挚的问候,

埃尔默

正如@10kc-zack 所说,这个解决方法确实有效,但我也注意到模板正在将一些字符转换为 html 实体,例如'撇号 .. 即“某人的”。 我的电子邮件到达时主题Someone's

我在使用 SendMail Nuget 包方法设置主题行时遇到问题。 这是我的代码,我尝试使用上面的信息对其进行更新:

    public async Task SendAsyncTemplate(string FromAddress, string FromName, string ToAddress, string ToName, string Subject, string LinkText, string LinkUrl)
    {
        _logger.LogInformation($"Sending mail to: {ToAddress}, with subject: {Subject}");

        var apiKey = _sendGridOptions.SendGridAPI;
        var client = new SendGridClient(apiKey);

        var from = new EmailAddress(FromAddress, FromName);
        var to = new EmailAddress(ToAddress, ToName);
        var msg = new SendGridMessage();
        var templateData = new ExampleTemplateData
        {
            Subject = Subject,
            Name = ToName,
            LinkText = LinkText,
            LinkUrl = LinkUrl
        };
        msg.Subject = "{{subject}}";
        msg.SetFrom(from);
        msg.AddTo(to);
        msg.AddCc(from);
        msg.SetTemplateId("supersecret");
        msg.SetTemplateData(templateData);

        var response = await client.SendEmailAsync(msg);

        _logger.LogInformation($"SendGrid Response Status Code: {response.StatusCode}");
    }
    private class ExampleTemplateData
    {
        [JsonProperty("subject")]
        public string Subject { get; set; }

        [JsonProperty("name")]
        public string Name { get; set; }

        [JsonProperty("linkText")]
        public string LinkText { get; set; }
        [JsonProperty("linkUrl")]
        public string LinkUrl { get; set; }
    }

我已经在调试模式下运行,并且值设置正确。 我作为主题行得到的是一个连字符。 有任何想法吗?

呸! 我找到了需要设置 {{subject}} 的地方。 如果其他人遇到此问题,请进入编辑您的模板,然后单击左侧的“设置”。 将有一个空格可以输入您的主题。 在此处输入 {{subject}}。

@smschick ,

在你的情况下,你会做{{{ subject }}}

@10kc-zack,

我有一个请求打开以更改文档。 我假设您指的是此文档,对吗?

最诚挚的问候,

埃尔默

@thinkingserious这确实是我指的文档:+1:

是否有任何计划能够在不使用dynamic_template_data情况下通过 API 设置主题?

@mou01关于如何设置主题的简单示例: https :

是的,使用动态模板数据时无法通过个性化传递主题,这相当令人困惑,您必须将其传递到数据中。

@mou01关于如何设置主题的简单示例: https :

这适用于动态模板吗?

我认为不是,我认为动态模板背后的想法是您在模板设置中设置主题,并且您可以在主题中使用动态数据。 权衡是,如果您希望它完全灵活,则必须将其传递到动态数据中。

如果有人遇到这个问题:
转到您的模板并单击带有齿轮图标的“设置”并将其放在主题字段{{subject}}
最后在发送您的有效负载时“ dynamic_template_data ”应该具有主题值。
"dynamic_template_data":{ "subject": "My Subject Value here" }

在文档更改时关闭此问题不是可以在此 repo 中修复的内容。 我已经向文档团队提交了一个请求(参考标题:_Updates to mail-send template_id description_),并且会在有任何更新时返回这里。

文档已更新。

谢谢@childish-sambino

三重括号仍然有效,这仍然是官方解决方案吗?
谢谢!

image

@tcukanoot是的。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

TobiahRex picture TobiahRex  ·  3评论

amlcodes picture amlcodes  ·  4评论

polkhovsky picture polkhovsky  ·  3评论

thinkingserious picture thinkingserious  ·  4评论

prasoonjalan picture prasoonjalan  ·  3评论