Sendgrid-nodejs: Kesalahan Tak Terduga saat mencoba mengirim email transaksional

Dibuat pada 31 Agu 2017  ·  23Komentar  ·  Sumber: sendgrid/sendgrid-nodejs

Ringkasan Masalah

Mendapatkan kesalahan 'Permintaan Buruk' dengan payload berikut.

Permintaan

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)

Tanggapan

{
        "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"
                    }
                ]
            }
        }
    }

Catatan

Dalam dokumentasi tertulis templateId tetapi dalam pesan kesalahan tertulis template_id . Saya sudah mencoba keduanya dan menerima pesan kesalahan yang sama. Saya melampirkan tangkapan layar layar templat saya sebagai pemeriksaan kewarasan untuk memastikan saya telah mengonfigurasi dengan benar di sendgrid.

Detail teknis:

  • sendgrid-nodejs Versi: master (terakhir komit: [nomor komit])
  • Versi Node.js: 6.10.3
  • Berjalan dalam fungsi AWS Lambda

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

help wanted bug

Komentar yang paling membantu

Terima kasih atas bantuannya mengintip. Saya benar-benar kehilangan akal. Saya akhirnya menemukan solusinya larut malam dan datang ke sini untuk melaporkan lebih banyak informasi, tetapi sepertinya Anda semua sudah melakukannya :-)

Semua 23 komentar

@onesien node baru JS mailer API adalah case agnostik, jadi Anda dapat menggunakan templateId atau template_id . Casing unta lebih umum di tanah JS, oleh karena itu kami telah menambahkan dukungan untuk itu, sementara API itu sendiri menggunakan kotak ular.

Saya akan melihat apa yang terjadi dengan ID template

Hai @onesien ,

Anda mungkin juga ingin memeriksa dengan dukungan . Saya pikir masalahnya mungkin terkait dengan editor template lama.

Bisakah Anda juga mencoba membuat template baru dan menggunakan ID itu?

Salam hangat,

Elmer

@thinkingserious dapatkah Anda memeriksa ini di pihak Anda? Tampaknya kami mengirimkan parameter template_id dengan benar dengan permintaan tersebut. Saya baru saja membuat template baru dan mengalami masalah ini juga.

@jamur_kejang

Pengujian lokal saya berfungsi, tetapi saya hanya memiliki template baru di akun kami.

Saya akan memeriksa ulang

Tidak, saya menggunakan template baru, yang baru dibuat, mendapatkan masalah yang sama

Yang berikut berfungsi untuk saya (menggunakan versi v6.1.1) mengikuti contoh di sini :

// 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, saya pikir kami memiliki bug lama yang muncul kembali, di mana API memerlukan blok konten dalam semua kasus. Jadi ini berhasil:

// 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);

tapi bukan ini:

// 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);

Memeriksa secara internal ...

Saya harus menambahkan blok konten untuk mendapatkan templat yang akan dikirim. Saya mendapatkan Permintaan _Bad (400) "Kecuali jika template_id yang valid disediakan, parameter konten diperlukan. Setidaknya harus ada satu blok konten yang ditentukan ..." _ saat menggunakan template yang dibuat di editor html baru.

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

Jika saya menambahkan blok konten, email template dikirim sebagai format di editor html.

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)

Oke, saya biarkan terbuka sebagai bug.

Dugaan saya adalah SDK ini menambahkan objek konten kosong jika tidak disetel. Saya rasa kita perlu melewatkan fungsi-fungsi ini ketika html dan txt tidak disetel.

Untuk saat ini, solusi di atas akan melakukan apa yang Anda butuhkan.

@Serius Saya pikir Anda benar. Saya membaca dokumen API dan mengira bidang itu wajib. Itu hanya memiliki komentar yang tersembunyi dengan baik (yang ditata dengan luar biasa!) Yang saya lewatkan:

image

Saya akan membuat PR untuk mengatasi ini!

Hehe, terima kasih Adam!

PR sudah habis, ini harus memperbaiki masalah dan tidak mengirim bidang konten dengan permintaan jika tidak ada konten yang disediakan.

Terima kasih atas bantuannya mengintip. Saya benar-benar kehilangan akal. Saya akhirnya menemukan solusinya larut malam dan datang ke sini untuk melaporkan lebih banyak informasi, tetapi sepertinya Anda semua sudah melakukannya :-)

Maaf soal itu @onesien ,

Perbaikan baru saja didorong ke npm (v6.1.2).

Saya menggunakan kode kata demi kata dari respons @thinkingserious dan saya masih mengalami masalah.

Saya hanya mencoba mendapatkan substitusi paling dasar dalam template yang saya buat di sengrid untuk dikirim. Tanggapan di CloudWatch (karena ini berjalan di Lambda) ditampilkan sebagai 202 tetapi email yang saya terima adalah: 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.

Apa yang saya lakukan salah di sini guys? Saya mencoba menyaring dokumen sendgrid tetapi semuanya terasa sangat sedikit.

Bagaimana Anda mengirimkan ID template? Apakah melalui variabel lingkungan saat lambda dipanggil?

terima kasih untuk balasan cepat @cbilliau - tidak dalam kasus saya string template di-hardcode karena saya hanya mencoba untuk mendapatkan perancah fungsional di antara ujung depan dan belakang. Contoh saya verbatim adalah:

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 Lihat jawaban saya di atas, saya menambahkan content: [{"type":"text/html","value":"0"}], ke fungsi saya dan berhasil. Tidak diketahui mengapa.

baru mencobanya, sayangnya tidak merubah hasil akhirnya @cbilliau :(. Dapat email yang sama kembali:

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 biarkan aku mundur sebentar

Telapak tangan total, memperbaiki ujung saya dan semoga berhasil.

kk - mengkonfirmasikan kerja sekarang, terutama dengan menggunakan content: [{ type: "text/html", value: "0" }] garis yang @cbilliau disebutkan 👍

Apakah halaman ini membantu?
0 / 5 - 0 peringkat