Pau*_*wns 1 function sendgrid firebase
谁能帮我这个?我正在尝试使用 Firebase 函数中的 SendGrid 将文件从 Firebase 存储附加到电子邮件。任何帮助将非常感激。我已经做到了这一点:
export const sendEmail2 = functions.https.onCall(async (data, context) => {
if (!context.auth) {
throw new functions.https.HttpsError('failed-precondition', 'You must be logged in!');
}
const toEmail = data.toEmail;
const fromEmail = data.fromEmail;
const subject = data.subject;
const body = data.body;
const msg: any = {
to: toEmail,
from: fromEmail,
subject: subject,
html: body,
};
if (data.cc) {
msg.cc = data.cc;
}
if (data.attachments) {
msg.attachments = [];
let content;
data.attachments.forEach(
async (att: any) => {
const download = bucket.file(att.filepath);
const contents = await download.download();
content = contents[0].toString('base64');
msg.attachments.push({
content: content,
filename: att.filename,
type: att.type,
disposition: 'attachment',
content_id: att.content_id,
});
}
);
}
try {
await sgMail.send(msg);
} catch (e) {
return { error: e };
}
return { success: true };
});
Run Code Online (Sandbox Code Playgroud)
终于解决了!forEach 循环似乎不尊重异步。见下文:
export const sendEmail2 = functions.https.onCall(async (data, context) => {
if (!context.auth) {
throw new functions.https.HttpsError('failed-precondition', 'You must be logged in!');
}
const toEmail = data.toEmail;
const fromEmail = data.fromEmail;
const subject = data.subject;
const body = data.body;
const msg: any = {
to: toEmail,
from: fromEmail,
subject: subject,
html: body,
};
if (data.cc) {
msg.cc = data.cc;
}
if (data.attachments) {
msg.attachments = [];
let content;
let download;
let contents;
for (const att of data.attachments) {
download = bucket.file(att.filepath);
contents = await download.download();
content = contents[0].toString('base64');
msg.attachments.push({
content: content,
filename: att.filename,
type: att.type,
disposition: 'attachment',
content_id: att.content_id,
});
}
}
try {
await sgMail.send(msg);
} catch (e) {
return { error: e };
}
return { success: true };
});
Run Code Online (Sandbox Code Playgroud)