尝试使用sendgrid发送电子邮件时出现错误

时间:2019-06-21 16:54:21

标签: javascript google-cloud-functions sendgrid

我收到一个错误,我相信这是从sendgrid回来的。但是,我在Twilio / Sendgrid故障排除文档中找不到此错误。我看到过一些引用,表明这是版本不匹配的问题。事情就是这样,我对此项目知之甚少。开发人员离开了一段时间。我一直在努力提供帮助,而且相当成功。但是,这让我难过。该错误不涉及任何行号或模块(我可以告诉我们)

这是从Firebase控制台日志中获取的尝试发送此电子邮件的云功能:

{ 
 insertId: "000000-55176214-acd2-453d-8258-048000f1e9e3"   
   labels: {…}   
 logName: "projects/wsos-base/logs/cloudfunctions.googleapis.com%2Fcloud-functions"   
 receiveTimestamp: "2019-06-21T16:40:19.541487656Z"   
   resource: {…}   
 severity: "ERROR"   
 textPayload: "TypeError: Object.values is not a function"   
 timestamp: "2019-06-21T16:40:13.253Z"   
 trace: "projects/wsos-base/traces/bdb710bad4f92297c239de4409de2323"   
}

sendgrid.send调用之前的控制台日志消息显示在日志中。此呼叫后没有显示任何日志消息。我已注释掉整个通话,并且日志文件中未显示任何错误。我几乎100%可以确定通话中正在发生这种情况。但是,从查找sendgrid的东西来看,我应该至少期待一个错误号。我通过替换字符串错误消息来确认'catch'在工作。我确实在日志中看到该错误消息。当我将其放回原始捕获时,会收到报告的“ TypeError ... Object.values…”消息。没有错误讯息。没有行号。没有模块。

return admin.auth().getUser(user)
                      .then(mentorObj => {
                        var mentorEmail = mentorObj.email;
                        var menteeObj = doc2.data();
                        console.log("Sending to Mentor: ", mentorEmail);
                        const confirmationMentor = {
                              to: mentorEmail,
                              from: *******,
                              template_id: ********,    
                              dynamicTemplateData: {
                                name: mentor.firstName,
                             menteeName: "MenteeNameHere"
                          },
                        };
                        console.log("Sent to Mentor: ", confirmationMentor);

                        return sendgrid.send(confirmationMentor)
                          .then(() => {
                            // console.log('Confirmation successfully sent to ' + mentorEmail);
                            console.log("sending to mentee");
...
})
                         .catch(error => console.error(error.toString()));

将上面的“ error.toString()”简单地替换为“ SomeText”,即可将控制台中的TypeError消息替换为“ SomeText”。另外,控制台日志中也没有“发送给受训者”。此外,在所有源代码中的任何地方均未引用“ .values”。

在控制台日志中,我看到正在传递JSON:

{ to: '*****',
  from: '*****',
  template_id: '******',
  dynamicTemplateData: { name: 'Rocky McChocolate', menteeName: 'MenteeNameHere' } }

我将其放在在线JSON验证器中,它无效。但是,我相信这是因为它在日志中的显示方式,而不是JSON的实际外观。由于这是可行的,所以我更改的只是模板ID。 好吧,我想我已经在上面描述了这一点(也许在错误的地方)。 客户端有一个Firebase应用程序,它会发送电子邮件。他们想要另一封电子邮件。因此,我创建了电子邮件(在Twilio / Sendgrid中),并更改了template_id值并期望发送新电子邮件。相反,我收到此错误消息。我已经与客户确认,在我处理电子邮件之前已经发送了电子邮件。

1 个答案:

答案 0 :(得分:0)

该错误"TypeError: Object.values is not a function"来自您的代码,而不是来自SendGrid。在某个地方,某些东西以无效的方式调用.values,但是它不在您在此处显示的代码中。

您是正确的,那是无效的JSON。您是否需要在值上调用toJSON或类似值,以将其转换为JSON字符串?