Sendgrid-nodejs: L'envoi du modèle transactionnel supprime le sujet spécifié via l'objet de données

Créé le 31 oct. 2018  ·  19Commentaires  ·  Source: sendgrid/sendgrid-nodejs

Résumé de la question

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".

Exemple

  • J'ai créé un modèle transactionnel avec le sujet "Mon sujet d'e-mail"
  • J'ai essayé d'envoyer un e-mail en utilisant sendgridMail.send où j'ai spécifié data.subject pour être "[TEST] Mon sujet d'e-mail"
  • L'e-mail que j'ai reçu avait pour objet "Mon sujet d'e-mail"

Étapes pour reproduire

  1. Créez un modèle transactionnel sur https://sendgrid.com avec un sujet spécifié
  2. Utilisez la fonction sendgridMail.send pour envoyer le modèle. Assurez-vous également de spécifier soit data.subject soit data.personalizations[someIndex].subject .
  3. Confirmez que l'e-mail est reçu avec la ligne d'objet d'origine, pas celle transmise à l'API

Détails techniques:

  • sendgrid-nodejs Version : 6.3.1
  • Version de Node.js : v8.11.3
non-library issue

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.

Tous les 19 commentaires

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 ?

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!

image

@tcukanoot Oui.

Cette page vous a été utile?
0 / 5 - 0 notes