我正在使用云功能向存储在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
答案 0 :(得分:1)
只有在完成所有异步工作之后,才应该调用callback()
。您是在工作开始之前就调用它的。那肯定是行不通的。来自documentation:
回调
表示该函数执行完成的回调。
您已提前通知函数结束。您仅应在工作完成后在异步工作的then
和catch
回调中调用它。