Sendgrid-nodejs: Unerwarteter Fehler beim Versuch, Transaktions-E-Mails zu senden

Erstellt am 31. Aug. 2017  ·  23Kommentare  ·  Quelle: sendgrid/sendgrid-nodejs

Problemzusammenfassung

Bei der folgenden Nutzlast wird der Fehler "Bad Request" angezeigt.

Anfrage

cosnt msg = {
        "to": "[email protected]",
        "from": "[email protected]",
        "subject": "Support Pay Transparency at PayCheck",
        "templateId": "24ae3147-4faa-4380-8613-c5be144f4542",
        "customArgs": {
            "ally_id": "cj6zlh7yd000001qir4r5suuk"
        }
};
sgMail.send(msg)

Antwort

{
        "message": "Bad Request",
        "code": 400,
        "response": {
            "headers": {
                "server": "nginx",
                "date": "Wed, 30 Aug 2017 22:30:41 GMT",
                "content-type": "application/json",
                "content-length": "365",
                "connection": "close",
                "access-control-allow-origin": "https://sendgrid.api-docs.io",
                "access-control-allow-methods": "POST",
                "access-control-allow-headers": "Authorization, Content-Type, On-behalf-of, x-sg-elas-acl",
                "access-control-max-age": "600",
                "x-no-cors-reason": "https://sendgrid.com/docs/Classroom/Basics/API/cors.html"
            },
            "body": {
                "errors": [
                    {
                        "message": "Unless a valid template_id is provided, the content parameter is required. There must be at least one defined content block. We typically suggest both text/plain and text/html blocks are included, but only one block is required.",
                        "field": "content",
                        "help": "http://sendgrid.com/docs/API_Reference/Web_API_v3/Mail/errors.html#message.content"
                    }
                ]
            }
        }
    }

Anmerkungen

In der Dokumentation steht templateId aber in der Fehlermeldung steht template_id . Ich habe beide ausprobiert und die gleiche Fehlermeldung erhalten. Ich habe einen Screenshot meines Vorlagenbildschirms zur Überprüfung der Integrität angehängt, um sicherzustellen, dass ich ihn in sendgrid richtig konfiguriert habe.

Technische Details:

  • sendgrid-nodejs Version: master (letztes Commit: [Commit-Nummer])
  • Node.js Version: 6.10.3
  • Ausführen in einer AWS Lambda-Funktion

screen shot 2017-08-30 at 6 43 57 pm

help wanted bug

Hilfreichster Kommentar

Danke für die Hilfe guckt. Ich verlor buchstäblich den Verstand. Ich habe gestern Abend endlich eine Problemumgehung gefunden und kam hierher, um weitere Informationen zu melden, aber es scheint, als ob ihr alle schon dabei seid :-)

Alle 23 Kommentare

@onesien Die neue JS-Mailer-API des Knotens ist templateId als auch template_id . Kamelfälle sind in JS-Ländern häufiger anzutreffen, daher haben wir Unterstützung dafür hinzugefügt, während die API selbst Schlangenfälle verbraucht.

Ich werde nachsehen, was mit der Vorlagen-ID passiert

Hallo @onesien ,

Möglicherweise möchten Sie sich auch an den Support wenden . Ich denke, das Problem hängt möglicherweise mit dem alten Vorlageneditor zusammen.

Können Sie auch versuchen, eine neue Vorlage zu erstellen und diese ID zu verwenden?

Mit besten Empfehlungen,

Elmer

@thinkingserious kannst du das an deinem Ende überprüfen? Es scheint, als würden wir den Parameter template_id mit der Anfrage korrekt senden. Ich habe gerade eine neue Vorlage erstellt und bekomme auch dieses Problem.

@adamreisnz ,

Meine lokalen Tests funktionieren, aber ich habe nur neue Vorlagen in unserem Konto.

Ich werde es noch einmal überprüfen

Nein, ich habe eine neue Vorlage verwendet, die frisch erstellt wurde und das gleiche Problem aufweist

Die folgenden Werke für mich (Version v6.1.1 verwendet wird ) nach dem Beispiel hier :

// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');

//build object 
var mailOptions = {
    personalizations:[{
      to: '[email protected]',
      substitutions: {'name':'John', 'city':'Denver'}
    }],
    from: '[email protected]',
    reply_to: '[email protected]',
    subject: 'Hello',
    html: 'email text goes here',
    templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932'
  };

//send 
sendGridMail.send(mailOptions);

Ah, ich denke, wir haben einen alten Fehler, bei dem die API in allen Fällen einen Inhaltsblock benötigt. Das funktioniert also:

// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');

//build object 
var mailOptions = {
    to: '[email protected]',
    from: '[email protected]',
    reply_to: '[email protected]',
    subject: 'Hello',
    templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
    html: ' ',
    substitutions: {
      name: 'Some One',
      city: 'Denver',
    }
  };

//send 
sendGridMail.send(mailOptions);

aber nicht das:

// Setup sendgrid api
const sendGridMail = require('@sendGrid/mail');
sendGridMail.setApiKey(process.env.SENDGRID_API_KEY);
sendGridMail.setSubstitutionWrappers('-', '-');

//build object 
var mailOptions = {
    to: '[email protected]',
    from: '[email protected]',
    reply_to: '[email protected]',
    subject: 'Hello',
    templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
    substitutions: {
      name: 'Some One',
      city: 'Denver',
    }
  };

//send 
sendGridMail.send(mailOptions);

Intern prüfen ...

Ich musste den Inhaltsblock hinzufügen, damit die Vorlage gesendet werden konnte. Ich habe eine _Bad Request (400) erhalten. "Sofern keine gültige template_id angegeben ist, ist der Inhaltsparameter erforderlich. Es muss mindestens ein definierter Inhaltsblock vorhanden sein ..." _, während die im neuen HTML-Editor erstellte Vorlage verwendet wird.

sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
  to: email,
  from: '[email protected]',
  templateId: 'xxxxxxx',
  substitutions: {
     verifyUrl: createAccountLink
  }
};
sgMail.send(msg)

Wenn ich den Inhaltsblock hinzufüge, wird die Vorlagen-E-Mail im HTML-Editor formatiert gesendet.

sgMail.setApiKey(sgKey);
sgMail.setSubstitutionWrappers('-', '-');
var msg: any = {
  to: email,
  from: '[email protected]',
  content: [{"type":"text/html","value":"0"}],
  templateId: 'xxxxxx',
  substitutions: {
     verifyUrl: createAccountLink
  }
};
sgMail.send(msg)

OK, ich lasse das als Fehler offen.

Ich vermute, dass dieses SDK ein leeres Inhaltsobjekt hinzufügt, wenn es nicht festgelegt ist. Ich denke, wir müssen diese Funktionen überspringen

Im Moment wird die oben beschriebene Problemumgehung genau das tun, was Sie benötigen.

@thinkingserious Ich denke du hast recht. Ich habe die API-Dokumente gelesen und dachte, das Feld sei obligatorisch. Es hat nur einen gut versteckten Kommentar (der erstaunlich gestylt ist!), Den ich verpasst habe:

image

Ich werde eine PR erstellen, um dies anzugehen!

Hehe, danke Adam!

PR ist aktiv. Dies sollte das Problem beheben und das Inhaltsfeld nicht mit der Anforderung senden, wenn kein Inhalt bereitgestellt wird.

Danke für die Hilfe guckt. Ich verlor buchstäblich den Verstand. Ich habe gestern Abend endlich eine Problemumgehung gefunden und kam hierher, um weitere Informationen zu melden, aber es scheint, als ob ihr alle schon dabei seid :-)

Entschuldigung dafür @onesien ,

Das Update wurde gerade auf npm (v6.1.2) verschoben.

Ich habe den Code wörtlich aus der Antwort von @thinkingserious verwendet und

Ich versuche nur, die grundlegendsten Ersetzungen in einer Vorlage zu erhalten, die ich in sengrid erstellt habe, um sie zu senden. Die Antwort in CloudWatch (da dies in Lambda ausgeführt wird) wird als 202 angezeigt, aber die E-Mail, die ich erhalte, lautet: A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed. The error detected was: The template id must be a valid template id for your account.

Was mache ich hier falsch, Leute? Ich versuche, die Sendgrid-Dokumente zu durchsuchen, aber alles fühlt sich wirklich stückweise an.

Wie senden Sie die Vorlagen-ID? Ist es durch eine Umgebungsvariable, wenn das Lambda aufgerufen wird?

danke für die schnelle antwort @cbilliau - nein in meinem hinterem ende aufzubauen . Mein wörtliches Beispiel ist:

const sgMail = require("@sendgrid/mail");
sgMail.setApiKey(
  "XXXXX"
);
sgMail.setSubstitutionWrappers("%", "%"); // Configure the substitution tag wrappers globally
  const msg = {
    to: formFields.toEmail,
    from: formFields.fromEmail,
    subject: "Hello world",
    text: "test",
    html: "<p>test</p>",
    templateId: "be2cc0da-5b2c-428f-8e45-c140f6cfb6eb",
    substitutions: {
      name1: formFields.fromName,
      name2: formFields.fromName,
      date: formFields.date
    }
  };

  sgMail.send(msg);

@tetreault Checkout meine Antwort oben, ich füge content: [{"type":"text/html","value":"0"}], zu meiner Funktion hinzu und es hat funktioniert. Unbekannt warum.

habe es gerade versucht, habe das Endergebnis leider nicht geändert @cbilliau :(.

A message was received from this address by our systems that had errors in the smtpapi header, and cannot be processed. 
The error detected was: The template id must be a valid template id for your account. You provided be2cc0da-5b2c-428f-8e45-c140f6cfb6eb 

wow, lass mich für eine Sekunde aussteigen @cbilliau 🤣

Total Gesichtspalme, fixiert an meinem Ende und dann hoffentlich zu erwarten, dass es funktioniert.

kk - Bestätigung, dass es jetzt funktioniert, insbesondere unter Verwendung der content: [{ type: "text/html", value: "0" }] @cbilliau erwähnten Zeile content: [{ type: "text/html", value: "0" }] 👍

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

kiranshashiny picture kiranshashiny  ·  4Kommentare

agostonbonomi picture agostonbonomi  ·  3Kommentare

TobiahRex picture TobiahRex  ·  3Kommentare

nicoasp picture nicoasp  ·  3Kommentare

wooyah picture wooyah  ·  4Kommentare