想要使用sendgrid通过云功能发送电子邮件

时间:2018-12-21 07:37:03

标签: node.js google-cloud-functions sendgrid

我正在使用云功能向存储在google firestore中的数据已更新的人发送电子邮件。我正在使用sendgrid发送电子邮件。

每当我更新数据时,我的云功能就可以正常工作。但是我无法发送电子邮件。

const sendgridemail = require('@sendgrid/mail');
const MY_SENDGRID_API_KEY = '<API key>'
sendgridemail.setApiKey(MY_SENDGRID_API_KEY);
exports.helloFirestore = (event, callback) => {
const triggerResource = event.resource;
console.log('Function triggered by change to: ' +  triggerResource);
console.log(JSON.stringify(event));

 const msgbody = {
                    to: 'laaaf09@gmail.com',
                    from: 'abc@nnn.co',
                    subject:  'database updated - xyzshopping.com',
                    templateId: '<template ID>',
 }
return helloFirestore.send(msgbody)

            .then(() => console.log('payment mail sent success') )
            .catch(err => console.log(err) )
             callback();


};

我已经使用嵌入式编辑器和zip上传从控制台部署了代码。 它被触发但没有发送电子邮件,这引发了我错误:

Error: getaddrinfo ENOTFOUND api.sendgrid.com api.sendgrid.com:443 at errnoException (dns.js:28:10) at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:76:26) code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo', hostname: 'api.sendgrid.com', host: 'api.sendgrid.com', port: 443

1 个答案:

答案 0 :(得分:1)

只有在完成所有异步工作之后,才应该调用callback()。您是在工作开始之前就调用它的。那肯定是行不通的。来自documentation

  

回调

     

表示该函数执行完成的回调。

您已提前通知函数结束。您仅应在工作完成后在异步工作的thencatch回调中调用它。