3 回答

TA貢獻1828條經驗 獲得超13個贊
可能的解決方案之一是使用專用于電子郵件發送的Firebase擴展。
由于您希望在集合中創建新文檔時發送電子郵件BookingData
,因此配置它將是小菜一碟。
只需按照配置說明進行操作,并在“電子郵件文檔集合”字段中輸入“BookingData”(“電子郵件文檔集合”是“包含用于構建和發送電子郵件的文檔的集合的路徑”)
然后,如此處文檔中所述,在 BookingData 集合中創建的文檔中,包含一個與 和, (或) 字段to
具有相同值的字段以及您自己的電子郵件。然后,使用文檔的字段指定其他電子郵件元素,例如主題行和電子郵件正文(純文本或 HTML)。email
cc
bcc
message
請注意,這樣做會將所有這些額外信息(以及一些包含擴展執行狀態的字段)添加到 BookingData 文檔中。如果您希望避免將這些額外信息添加到此文檔中,只需使用另一個專用集合來觸發(和配置)電子郵件。
要通過這個特定的專用集合生成并發送電子郵件,您可以使用批量寫入,如下所示:
var messagesRef = firestore.collection("BookingData");
var emailsRef = firestore.collection("emails");? // Additional collection
var batch = firestore.batch();
batch.set(messagesRef,?
?{
? ?email:email,
? ?packageFields:packageFields,
? ?name:name,
? ?phone:phone,
? ?date:date
? ?}
);
batch.set(emailsRef,?
?{
? ?to:email,
? ?bcc:'[email protected]',
? ?message: {
? ? subject: 'New order',
? ? html: 'This is an <code>HTML</code> email body.',
? ?}
? }
);
// Commit the batch
batch.commit().then(function () {
? ? // ...
});
不要忘記:
通過安全規則拒絕對集合的讀寫訪問權限
emails
。配置擴展時,在“電子郵件文檔集合”字段中輸入“電子郵件”。
請注意,要安裝和使用 Firebase 擴展,您的項目必須位于 Blaze 計劃中。

TA貢獻1797條經驗 獲得超6個贊
我可能會使用提供 HTTP API 進行郵件發送的服務。
SendGrid 是一個很好的選擇,這里有一個簡單的例子(src):
const functions = require("firebase-functions");
const sgMail = require("@sendgrid/mail");
const cors = require("cors")({
? origin: true
});
exports.emailMessage = functions.https.onRequest((req, res) => {
? const { name, email, phone, message } = req.body;
? return cors(req, res, () => {
? ? var text = `<div>
? ? ? <h4>Information</h4>
? ? ? <ul>
? ? ? ? <li>
? ? ? ? ? Name - ${name || ""}
? ? ? ? </li>
? ? ? ? <li>
? ? ? ? ? Email - ${email || ""}
? ? ? ? </li>
? ? ? ? <li>
? ? ? ? ? Phone - ${phone || ""}
? ? ? ? </li>
? ? ? </ul>
? ? ? <h4>Message</h4>
? ? ? <p>${message || ""}</p>
? ? </div>`;
? ? const msg = {
? ? ? to: "[email protected]",
? ? ? from: "[email protected]",
? ? ? subject: `${name} sent you a new message`,
? ? ? text: text,
? ? ? html: text
? ? };
? ? sgMail.setApiKey(
? ? ? "SENDGRID API KEY"
? ? );
? ? sgMail.send(msg);
? ? res.status(200).send("success");
? }).catch(() => {
? ? res.status(500).send("error");
? });
});

TA貢獻1946條經驗 獲得超4個贊
這可以使用 smtp.js 使用下面給出的代碼來完成
var firestore = firebase.firestore();
var messagesRef = firestore.collection("bookingData");
//listen for submit
document.getElementById("bookingForm").addEventListener("submit", submitForm);
function submitForm(e) {
e.preventDefault();
//get values
var email = getInputVal("email");
var packageFields = getInputVal("packageFields");
var name = getInputVal("name");
var phone = getInputVal("phone");
var date = getInputVal("date");
var [persons] = getInputVal("persons");
saveMessage(email, packageFields, name, phone, date, persons);
sendEmail(packageFields, name, date, persons);
//show alert
}
// function to get form values
function getInputVal(id) {
return document.getElementById(id).value;
}
//save messages
function saveMessage(email, packageFields, name, phone, date, persons) {
messagesRef
.add({
email: email,
packageFields: packageFields,
name: name,
phone: phone,
date: date,
persons: persons,
})
.then(function (docRef) {
console.log("Document written with ID: ", docRef.id);
console.log(email);
})
.catch(function (error) {
console.error("Error adding document: ", error);
});
}
function sendEmail(packageFields, name, date, persons) {
Email.send({
Host: "smtp.gmail.com",
Username: "[email protected]",
Password: "xxxxxxxxxx",
To: "[email protected]",
From: "[email protected]",
Subject: "Sending Email using javascript",
Body: `Your package of ${packageFields} for ${name} with total ${persons} persons (incl. ${name}) dated ${date} has been provisonalised. Your seat will be confirmed once you complete the payment of the Security Deposit`,
}).then(function (message) {
alert("mail sent successfully");
});
}
添加回答
舉報