Sendgrid-nodejs: O envio do modelo transacional descarta o assunto especificado por meio do objeto de dados

Criado em 31 out. 2018  ·  19Comentários  ·  Fonte: sendgrid/sendgrid-nodejs

Resumo do problema

Ao usar a função sendgridMail.send para enviar um modelo transacional, qualquer linha de assunto adicionada ao objeto data que é passado sendgridMail.send (via data.subject ou data.personalizations[someIndex].subject ) é descartado e a linha de assunto especificada no próprio modelo transacional real é usada.

O comportamento que eu espero é que os campos especificados no objeto data substituam quaisquer campos de modelo existentes, mas esse não parece ser o caso. Observando a documentação da API de envio de email v3, a descrição do campo template_id afirma:

A id de um modelo que você gostaria de usar. Se você usar um modelo que contém um assunto e conteúdo (texto ou html), não é necessário especificá-los nas personalizações nem no nível da mensagem.

Para mim, "você não precisa especificar aqueles nas personalizações nem no nível da mensagem" implica que você pode substituir o assunto do modelo. Se esse não for o caso, a descrição deve ser alterada para "você não pode especificar aquelas nas personalizações nem no nível da mensagem".

Exemplo

  • Eu criei um modelo transacional com o assunto "Assunto do meu email"
  • Tentei enviar um e-mail usando sendgridMail.send onde especifiquei data.subject como "[TEST] Assunto do meu e-mail"
  • O e-mail que recebi tinha o assunto "Assunto do meu e-mail"

Passos para reproduzir

  1. Crie um modelo transacional em https://sendgrid.com que tenha um assunto especificado
  2. Use a função sendgridMail.send para enviar o modelo. Certifique-se também de especificar data.subject ou data.personalizations[someIndex].subject .
  3. Confirme se o e-mail foi recebido com a linha de assunto original, não aquela passada para a API

Detalhes técnicos:

  • sendgrid-nodejs Versão: 6.3.1
  • Versão Node.js: v8.11.3
non-library issue

Comentários muito úteis

Doh! Eu descobri onde o {{assunto}} precisa ser definido. Caso outra pessoa tenha esse problema, vá para editar o seu modelo e clique em "Configurações" à esquerda. Haverá um espaço para inserir seu Assunto. Digite {{assunto}} aqui.

Todos 19 comentários

Olá @ 10kc-zack,

Eu acredito que no modelo transacional você definiria o assunto como {{subject}}, então em seu código você definiria data.subject como "[TEST] My Email Subject" .

Isso funciona para você?

Obrigado pela atenção,

Elmer

Obrigado pela resposta @thinkingserious e sua sugestão!

Embora isso realmente faça o trabalho (e seja a solução que estamos usando no momento), eu preferiria muito mais poder definir o assunto como parte de nosso corpo de chamada de API. Você pode confirmar que de fato o assunto fornecido para a API foi descartado e que essa informação está faltando na documentação da API?

Olá @ 10kc-zack,

Eu acredito que no modelo transacional você definiria o assunto como {{subject}}, então em seu código você definiria data.subject como "[TEST] My Email Subject" .

Isso funciona para você?

Obrigado pela atenção,

Elmer

Como @ 10kc-zack afirmou, esta solução alternativa funciona, mas também notei que o modelo está convertendo alguns caracteres, como ' apostrophy .. ex. "Alguém" em entidades html. Meu e-mail chega com o assunto Someone's

Estou tendo problemas para definir a linha de assunto usando os métodos de pacote SendMail Nuget. Este é meu código, que tentei atualizar usando as informações acima:

    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; }
    }

Executei no modo de depuração e os valores estão sendo definidos corretamente. O que estou recebendo como linha de assunto é um hífen. Alguma ideia?

Doh! Eu descobri onde o {{assunto}} precisa ser definido. Caso outra pessoa tenha esse problema, vá para editar o seu modelo e clique em "Configurações" à esquerda. Haverá um espaço para inserir seu Assunto. Digite {{assunto}} aqui.

@smschick ,

No seu caso, você faria {{{ subject }}} .

@ 10kc-zack,

Tenho um pedido aberto para fazer essa alteração na documentação. Presumo que você esteja se referindo a esta documentação , correto?

Obrigado pela atenção,

Elmer

@thinkingserious Essa é de fato a documentação a que me referia: +1:

Há algum plano para definir o assunto por meio da API sem usar dynamic_template_data ?

Sim, é bastante confuso que você não possa passar o assunto por meio de personalizações ao usar dados de modelo dinâmico, você tem que passar nos dados que parece.

@ mou01 Exemplo simples aqui de como definir o assunto: https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/single-email-single-recipient.md

isso funciona com modelos dinâmicos?

Acho que não, acho que a ideia por trás dos modelos dinâmicos é definir o assunto no modelo configurado e usar os dados dinâmicos no assunto. A desvantagem é que você deve transmiti-los em dados dinâmicos se quiser que sejam totalmente flexíveis.

se alguém tiver esse problema:
vá para o seu modelo e clique em "Configurações" com um ícone de engrenagem e coloque-o no campo de assunto {{subject}}
e, finalmente, ao enviar sua carga, " dynamic_template_data " deve ter o valor do assunto.
"dynamic_template_data":{ "subject": "My Subject Value here" }

Fechar esse problema, pois a documentação é alterada, não é algo que pode ser corrigido neste repositório. Enviei uma solicitação para a equipe de documentos (título de referência: _Atualizações para enviar por e-mail template_id description_) e irei circular de volta aqui com quaisquer atualizações.

Os documentos foram atualizados.

Obrigado @ childish-sambino

Os colchetes triplos ainda estão funcionando, ainda é a solução oficial?
Obrigado!

image

@tcukanoot Sim.

Esta página foi útil?
0 / 5 - 0 avaliações