Sendgrid-nodejs: Beim Senden einer Transaktionsvorlage wird der über das Datenobjekt angegebene Betreff verworfen

Erstellt am 31. Okt. 2018  ·  19Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

Problemzusammenfassung

Wenn Sie die Funktion sendgridMail.send verwenden, um eine Transaktionsvorlage zu senden, wird jede Betreffzeile, die dem data Objekt hinzugefügt wird, das an sendgridMail.send (über data.subject oder data.personalizations[someIndex].subject ) wird verworfen und die Betreffzeile verwendet, die auf der eigentlichen Transaktionsvorlage selbst angegeben ist.

Das Verhalten, das ich erwarte, ist, dass die im data Objekt angegebenen Felder alle vorhandenen Vorlagenfelder überschreiben würden, aber dies scheint nicht der Fall zu sein. In der Dokumentation für die v3 Mail Send API heißt es in der Beschreibung des Felds template_id :

Die ID einer Vorlage, die Sie verwenden möchten. Wenn Sie eine Vorlage verwenden, die einen Betreff und Inhalt enthält (entweder Text oder HTML), müssen Sie diese weder auf Personalisierungs- noch auf Nachrichtenebene angeben.

Für mich bedeutet "Sie müssen diese weder auf Personalisierungs- noch auf Nachrichtenebene angeben" , dass Sie den Vorlagenbetreff überschreiben können . Ist dies nicht der Fall, sollte die Beschreibung in "Sie können diese weder auf Personalisierungs- noch auf Nachrichtenebene angeben" geändert werden.

Beispiel

  • Ich habe eine Transaktionsvorlage mit dem Betreff "Mein E-Mail-Betreff" erstellt.
  • Ich habe versucht, eine E-Mail mit sendgridMail.send zu senden, wobei ich data.subject als "[TEST] Mein E-Mail-Betreff" angegeben habe.
  • Die E-Mail, die ich erhalten habe, hatte die Betreffzeile "Mein E-Mail-Betreff".

Schritte zum Reproduzieren

  1. Erstellen Sie auf https://sendgrid.com eine Transaktionsvorlage mit einem angegebenen Betreff
  2. Verwenden Sie die Funktion sendgridMail.send , um die Vorlage zu senden. Stellen Sie außerdem sicher, dass Sie entweder data.subject oder data.personalizations[someIndex].subject angeben.
  3. Bestätigen Sie, dass die E-Mail mit der ursprünglichen Betreffzeile empfangen wurde, nicht der, die an die API übergeben wurde

Technische Details:

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

Hilfreichster Kommentar

Doh! Ich habe gefunden, wo das {{subject}} gesetzt werden muss. Falls jemand anderes dieses Problem hat, bearbeiten Sie Ihre Vorlage und klicken Sie dann links auf "Einstellungen". Es wird ein Feld zur Eingabe Ihres Betreffs geben. Geben Sie hier {{Betreff}} ein.

Alle 19 Kommentare

Hallo @10kc-zack,

Ich glaube, in der Transaktionsvorlage würden Sie den Betreff auf {{ Betreff }} setzen, dann setzen Sie in Ihrem Code data.subject auf "[TEST] My Email Subject" .

Funktioniert das für dich?

Mit besten Empfehlungen,

Elmer

Danke für die Antwort @thinkingserious und deinen Vorschlag!

Während dies die Arbeit erledigt (und dies ist die Umgehung, die wir derzeit verwenden), würde ich es vorziehen, den Betreff als Teil unseres API-Aufruftexts festlegen zu können. Können Sie bestätigen, dass der der API bereitgestellte Betreff tatsächlich verworfen wird und diese Informationen in der API-Dokumentation fehlen?

Hallo @10kc-zack,

Ich glaube, in der Transaktionsvorlage würden Sie den Betreff auf {{ Betreff }} setzen, dann setzen Sie in Ihrem Code data.subject auf "[TEST] My Email Subject" .

Funktioniert das für dich?

Mit besten Empfehlungen,

Elmer

Wie @10kc-zack angegeben hat, funktioniert diese Problemumgehung, aber ich habe auch bemerkt, dass die Vorlage einige Zeichen wie ' Apostrophie .. dh "Jemand" in HTML-Entitäten konvertiert. Meine E-Mail kommt mit dem Betreff Someone's

Ich habe Probleme beim Festlegen der Betreffzeile mit den SendMail-Nuget-Paketmethoden. Hier ist mein Code, den ich mit den obigen Informationen zu aktualisieren versucht habe:

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

Ich habe im Debugging-Modus ausgeführt und die Werte werden richtig eingestellt. Was ich als Betreffzeile bekomme, ist ein Bindestrich. Irgendwelche Ideen?

Doh! Ich habe gefunden, wo das {{subject}} gesetzt werden muss. Falls jemand anderes dieses Problem hat, bearbeiten Sie Ihre Vorlage und klicken Sie dann links auf "Einstellungen". Es wird ein Feld zur Eingabe Ihres Betreffs geben. Geben Sie hier {{Betreff}} ein.

@smschick ,

In Ihrem Fall würden Sie {{{ subject }}} tun.

@10kc-zack,

Ich habe eine Anfrage offen, diese Änderung der Dokumentation vorzunehmen. Ich gehe davon aus, dass Sie sich auf diese Dokumentation beziehen, richtig?

Mit besten Empfehlungen,

Elmer

@thinkingserious Das ist in der Tat die Dokumentation, auf die ich mich bezog :+1:

Gibt es Pläne, den Betreff über die API festlegen zu können, ohne dynamic_template_data ?

Ja, es ist ziemlich verwirrend, dass Sie den Betreff nicht über Personalisierungen übergeben können, wenn Sie dynamische Vorlagendaten verwenden, Sie müssen ihn in den Daten übergeben, wie es scheint.

@mou01 Einfaches Beispiel zum https://github.com/sendgrid/sendgrid-nodejs/blob/master/docs/use-cases/single-email-single-recipient.md

Funktioniert das mit dynamischen Vorlagen?

Ich denke nicht, ich denke, die Idee hinter den dynamischen Vorlagen ist, dass Sie den Betreff in der Vorlageneinrichtung festlegen und dynamische Daten im Betreff verwenden können. Der Nachteil besteht darin, dass Sie es in dynamischen Daten übergeben müssen, wenn Sie vollständig flexibel sein möchten.

falls jemand dieses Problem hat:
Gehe zu deiner Vorlage und klicke auf die "Einstellungen" mit einem Zahnradsymbol und setze dies in das Betrefffeld {{subject}}
Und schließlich sollte beim Senden Ihrer Nutzlast " dynamic_template_data " den
"dynamic_template_data":{ "subject": "My Subject Value here" }

Das Schließen dieses Problems bei Änderung der Dokumente kann in diesem Repository nicht behoben werden. Ich habe eine Anfrage an das Docs-Team gesendet (Referenztitel: _Updates to mail-send template_id description_) und werde hier mit allen Updates zurückkommen.

Dokumente wurden aktualisiert.

Danke @childish-sambino

Die Dreifachklammern funktionieren noch, ist das immer noch die offizielle Lösung?
Vielen Dank!

image

@tcukanoot Ja.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

egges picture egges  ·  3Kommentare

agostonbonomi picture agostonbonomi  ·  3Kommentare

thinkingserious picture thinkingserious  ·  4Kommentare

Loriot-n picture Loriot-n  ·  4Kommentare

murphman300 picture murphman300  ·  4Kommentare