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".
sendgridMail.send
onde especifiquei data.subject
como "[TEST] Assunto do meu e-mail"sendgridMail.send
para enviar o modelo. Certifique-se também de especificar data.subject
ou data.personalizations[someIndex].subject
.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
?
@ 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
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!
@tcukanoot Sim.
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.