Lorsque vous utilisez la fonction sendgridMail.send
pour envoyer un modèle transactionnel, toute ligne d'objet ajoutée à l'objet data
qui est passé sendgridMail.send
(via data.subject
ou data.personalizations[someIndex].subject
) est ignoré et la ligne d'objet spécifiée sur le modèle transactionnel lui-même est utilisée.
Le comportement auquel je m'attends est que les champs spécifiés sur l'objet data
remplacent tous les champs de modèle existants, mais cela ne semble pas être le cas. En regardant la documentation de l'API d'envoi de courrier v3, la description du champ template_id
indique :
L'identifiant d'un modèle que vous souhaitez utiliser. Si vous utilisez un modèle qui contient un sujet et un contenu (soit du texte, soit du HTML), vous n'avez pas besoin de les spécifier au niveau des personnalisations ni du message.
Pour moi, "vous n'avez pas besoin de spécifier celles-ci au niveau des personnalisations ni au niveau du message" implique que vous pouvez remplacer le sujet du modèle. Si ce n'est pas le cas, la description doit être changée en "vous ne pouvez pas spécifier celles au niveau des personnalisations ni du message".
sendgridMail.send
où j'ai spécifié data.subject
pour être "[TEST] Mon sujet d'e-mail"sendgridMail.send
pour envoyer le modèle. Assurez-vous également de spécifier soit data.subject
soit data.personalizations[someIndex].subject
.Bonjour @10kc-zack,
Je crois que dans le modèle transactionnel, vous définissez le sujet sur {{ sujet }}, puis dans votre code, vous définissez data.subject
sur "[TEST] My Email Subject"
.
Est-ce que ça marche pour toi?
Meilleures salutations,
Elmer
Merci pour la réponse @thinkingserious et votre suggestion !
Bien que cela fasse le travail (et qu'il s'agisse de la solution de contournement que nous utilisons actuellement), je préférerais de loin pouvoir définir le sujet dans le cadre de notre corps d'appel d'API. Êtes-vous en mesure de confirmer qu'il est bien vrai que le sujet fourni à l'API est supprimé et que cette information est manquante dans la documentation de l'API ?
Bonjour @10kc-zack,
Je crois que dans le modèle transactionnel, vous définissez le sujet sur {{ sujet }}, puis dans votre code, vous définissez
data.subject
sur"[TEST] My Email Subject"
.Est-ce que ça marche pour toi?
Meilleures salutations,
Elmer
Comme @ 10kc-zack l'a déclaré, cette solution de contournement fonctionne, mais j'ai également remarqué que le modèle convertit certains caractères tels que l'apostrophie '
c'est-à-dire "quelqu'un" en entités html. Mon email arrive avec le sujet Someone's
J'ai du mal à définir la ligne d'objet à l'aide des méthodes de package SendMail Nuget. Voici mon code, que j'ai essayé de mettre à jour en utilisant les informations ci-dessus :
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; }
}
J'ai exécuté en mode de débogage et les valeurs sont correctement définies. Ce que j'obtiens comme ligne d'objet est un trait d'union. Des idées?
Oh ! J'ai trouvé où le {{subject}} doit être défini. Si quelqu'un d'autre a ce problème, allez dans pour modifier votre modèle, puis cliquez sur "Paramètres" sur la gauche. Il y aura un espace pour entrer votre sujet. Entrez {{subject}} ici.
@smschick ,
Dans votre cas, vous feriez {{{ subject }}}
.
@10kc-zack,
J'ai une demande ouverte pour faire changer la documentation. Je suppose que vous faites référence à cette documentation , n'est-
Meilleures salutations,
Elmer
@thinkingserious C'est bien la documentation à laquelle je faisais référence :+1:
est-il prévu de pouvoir définir le sujet via l'API sans utiliser dynamic_template_data
?
@mou01 Exemple simple ici pour savoir comment définir le sujet : https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/single-email-single-recipient.md
Oui, c'est plutôt déroutant que vous ne puissiez pas passer le sujet via des personnalisations lorsque vous utilisez des données de modèle dynamiques, vous devez le transmettre dans les données, semble-t-il.
@mou01 Exemple simple ici pour savoir comment définir le sujet : https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/single-email-single-recipient.md
cela fonctionne-t-il avec les modèles dynamiques ?
Je ne pense pas, je pense que l'idée derrière les modèles dynamiques est que vous définissez le sujet dans la configuration du modèle et que vous utilisez des données dynamiques dans le sujet. Le compromis est que vous devez le transmettre dans des données dynamiques si vous voulez qu'il soit totalement flexible.
si quelqu'un a ce problème :
accédez à votre modèle et cliquez sur "Paramètres" avec une icône d'engrenage et placez-le dans le champ objet {{subject}}
et enfin lors de l'envoi de votre payload " dynamic_template_data " devrait avoir la valeur de sujet.
"dynamic_template_data":{
"subject": "My Subject Value here"
}
La fermeture de ce problème au fur et à mesure que la documentation change n'est pas quelque chose qui peut être corrigé dans ce référentiel. J'ai soumis une demande à l'équipe docs (titre de référence : _Mises à jour pour envoyer par courrier le modèle_id description_) et je reviendrai ici avec toutes les mises à jour.
Les documents ont été mis à jour.
Merci @childish-sambino
Le triple bracket fonctionne toujours, est-ce toujours la solution officielle ?
Merci!
@tcukanoot Oui.
Commentaire le plus utile
Oh ! J'ai trouvé où le {{subject}} doit être défini. Si quelqu'un d'autre a ce problème, allez dans pour modifier votre modèle, puis cliquez sur "Paramètres" sur la gauche. Il y aura un espace pour entrer votre sujet. Entrez {{subject}} ici.