Sendgrid-nodejs: Отправка шаблона транзакции отбрасывает субъект, указанный через объект данных

Созданный на 31 окт. 2018  ·  19Комментарии  ·  Источник: sendgrid/sendgrid-nodejs

Резюме проблемы

При использовании функции sendgridMail.send для отправки шаблона транзакции любая строка темы, добавляемая к объекту data который передается sendgridMail.send (через data.subject или data.personalizations[someIndex].subject ) отбрасывается, и используется строка темы, указанная в самом шаблоне транзакции.

Я ожидаю, что поля, указанные в объекте data , переопределят любые существующие поля шаблона, но, похоже, это не так. Глядя на документацию по API отправки почты v3, в описании поля template_id указано:

Идентификатор шаблона, который вы хотите использовать. Если вы используете шаблон, который содержит тему и контент (текст или html), вам не нужно указывать их на уровне персонализации или сообщения.

На мой взгляд, «вам не нужно указывать их на уровне персонализации или сообщения» означает, что вы можете переопределить тему шаблона. Если это не так, описание следует изменить на «вы не можете указать их на уровне персонализации или сообщения».

Пример

  • Я создал шаблон транзакции с темой «Моя тема электронного письма».
  • Я попытался отправить электронное письмо, используя sendgridMail.send где я указал data.subject как «[ТЕСТ] Моя тема электронного письма»
  • В полученном мной электронном письме была тема "Моя тема электронного письма".

Действия по воспроизведению

  1. Создайте шаблон транзакции на https://sendgrid.com , в котором указана тема.
  2. Используйте функцию sendgridMail.send для отправки шаблона. Также не забудьте указать data.subject или data.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, этот обходной путь действительно работает, но я также заметил, что шаблон преобразует некоторые символы, такие как ' apostrophy ... т.е. "Чужие" в 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:

есть ли планы установить тему через API без использования dynamic_template_data ?

Да, это довольно сбивает с толку, что вы не можете передать тему через персонализацию при использовании данных динамического шаблона, вы должны передать ее в данных, как кажется.

@ mou01 Простой пример настройки темы: https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/single-email-single-recipient.md

это работает с динамическими шаблонами?

Я думаю, что нет, я думаю, что идея динамических шаблонов заключается в том, что вы устанавливаете тему в настроенном шаблоне, и вы можете использовать динамические данные в теме. Компромисс заключается в том, что вы должны передавать его в динамических данных, если хотите, чтобы они были полностью гибкими.

если у кого-то есть эта проблема:
перейдите к своему шаблону, нажмите «Настройки» со значком шестеренки и поместите это в поле темы {{subject}}
и, наконец, при отправке вашей полезной нагрузки " dynamic_template_data " должно иметь значение темы.
"dynamic_template_data":{ "subject": "My Subject Value here" }

Закрытие этой проблемы по мере изменения документации не может быть исправлено в этом репо. Я отправил запрос команде документации (заголовок ссылки: _Updates to mail-send template_id description_) и вернусь сюда с любыми обновлениями.

Документы обновлены.

Спасибо @ childish-sambino

Тройные скобки все еще работают, это все еще официальное решение?
Спасибо!

image

@tcukanoot Да.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

TobiahRex picture TobiahRex  ·  3Комментарии

danielflippance picture danielflippance  ·  4Комментарии

polkhovsky picture polkhovsky  ·  3Комментарии

Loriot-n picture Loriot-n  ·  4Комментарии

nicoasp picture nicoasp  ·  3Комментарии