3 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
可能的解決方案之一是使用專(zhuān)用于電子郵件發(fā)送的Firebase擴(kuò)展。
由于您希望在集合中創(chuàng)建新文檔時(shí)發(fā)送電子郵件BookingData
,因此配置它將是小菜一碟。
只需按照配置說(shuō)明進(jìn)行操作,并在“電子郵件文檔集合”字段中輸入“BookingData”(“電子郵件文檔集合”是“包含用于構(gòu)建和發(fā)送電子郵件的文檔的集合的路徑”)
然后,如此處文檔中所述,在 BookingData 集合中創(chuàng)建的文檔中,包含一個(gè)與 和, (或) 字段to
具有相同值的字段以及您自己的電子郵件。然后,使用文檔的字段指定其他電子郵件元素,例如主題行和電子郵件正文(純文本或 HTML)。email
cc
bcc
message
請(qǐng)注意,這樣做會(huì)將所有這些額外信息(以及一些包含擴(kuò)展執(zhí)行狀態(tài)的字段)添加到 BookingData 文檔中。如果您希望避免將這些額外信息添加到此文檔中,只需使用另一個(gè)專(zhuān)用集合來(lái)觸發(fā)(和配置)電子郵件。
要通過(guò)這個(gè)特定的專(zhuān)用集合生成并發(fā)送電子郵件,您可以使用批量寫(xiě)入,如下所示:
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:'youremail@mail.com',
? ?message: {
? ? subject: 'New order',
? ? html: 'This is an <code>HTML</code> email body.',
? ?}
? }
);
// Commit the batch
batch.commit().then(function () {
? ? // ...
});
不要忘記:
通過(guò)安全規(guī)則拒絕對(duì)集合的讀寫(xiě)訪問(wèn)權(quán)限
emails
。配置擴(kuò)展時(shí),在“電子郵件文檔集合”字段中輸入“電子郵件”。
請(qǐng)注意,要安裝和使用 Firebase 擴(kuò)展,您的項(xiàng)目必須位于 Blaze 計(jì)劃中。

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個(gè)贊
我可能會(huì)使用提供 HTTP API 進(jìn)行郵件發(fā)送的服務(wù)。
SendGrid 是一個(gè)很好的選擇,這里有一個(gè)簡(jiǎn)單的例子(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: "myemail@myemail.com",
? ? ? from: "no-reply@myemail.com",
? ? ? 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貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
這可以使用 smtp.js 使用下面給出的代碼來(lái)完成
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: "trippyadive.web.app@gmail.com",
Password: "xxxxxxxxxx",
To: "subhodiproy161101@gmail.com",
From: "trippyadive.web.app@gmail.com",
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");
});
}
添加回答
舉報(bào)