Bei der folgenden Nutzlast wird der Fehler "Bad Request" angezeigt.
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)
{
"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"
}
]
}
}
}
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.
@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:
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" }]
👍
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 :-)