错误:内部火力函数,当它与节点邮件程序一起使用时


const transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'xxxxxx@gmail.com',
pass: 'xxxxxxxx'
} ,
tls: {
rejectUnauthorized: false
},
});
exports.sendMail=functions.https.onCall((req,res)=>{
cors(req,res,()=>{
const email=JSON.parse(req.email)
const mailOptions = {
from: 'xxxxxxxxx@gmail.com',
to: email,
subject: 'Invitation to register your profile in xxxxxxx solutions',
text: `http://xxxxxx/xxxxxxxx`
};
return transporter.sendMail(mailOptions, function(error, info){
if (error) {
return res.send(error);
}
return res.send("Email sent")
});
})
})

这很可能是因为您:

  • 在可调用云函数中使用 cors。
  • 返回在可调用云函数中的res.send("Email sent")

因此,您应该更改为 HTTP 云函数,如下所示:

exports.sendMail=functions.https.onCall((req,res)=>{
cors(req,res,()=>{
const email=JSON.parse(req.email)
const mailOptions = {
from: 'xxxxxxxxx@gmail.com',
to: email,
subject: 'Invitation to register your profile in xxxxxxx solutions',
text: `http://xxxxxx/xxxxxxxx`
};
transporter.sendMail(mailOptions)
.then(() => {
res.send("Email sent");
})
.catch(error => {
console.log(error);
res.status(500).send(error);
});
})
})

或者修改您的可调用云函数,如下所示:

exports.addMessage = functions.https.onCall((data, context) => {
const email = data.email;

const mailOptions = {
from: 'xxxxxxxxx@gmail.com',
to: email,
subject: 'Invitation to register your profile in xxxxxxx solutions',
text: `http://xxxxxx/xxxxxxxx`
};
return transporter.sendMail(mailOptions)
.then(() => {
return {result: "Email sent"};
})
.catch(error => {
console.log(error);
throw new functions.https.HttpsError('interna', error.message);
});
});

另外,请参阅此处如何从客户端调用可调用 CF。

最新更新