亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

向客戶端發送確認電子郵件以將數據保存到 firestore

向客戶端發送確認電子郵件以將數據保存到 firestore

HUWWW 2023-07-20 10:36:22
我正在嘗試制作一個用于在線預訂的網站。該網站已托管在 firebase 中,我正在使用 firestore 收集預訂詳細信息。我正在使用下面給出的代碼來收集 firestore 中的詳細信息。var firestore =  firebase.firestore();var messagesRef = firestore.collection("BookingData");//listen for submitdocument.getElementById('bookingForm').addEventListener('submit',submitForm);function submitForm(e){ e.preventDefault(); //get valuesvar email = getInputVal('email');var packageFields = getInputVal('packageFields');var name = getInputVal('name');var phone = getInputVal('phone');var date = getInputVal('date');saveMessage(email, packageFields, name, phone, date);//show alert}// function to get form values function getInputVal(id) {return document.getElementById(id).value; }//save messagesfunction saveMessage(email, packageFields, name, phone, date) {  messagesRef.add({   email:email,   packageFields:packageFields,   name:name,   phone:phone,   date:date   }).then(function(docRef) {console.log("Document written with ID: ", docRef.id);}) .catch(function(error) {  console.error("Error adding document: ", error);});}現在的問題是,我想使用 JS 和 SMTP 向我的客戶發送電子郵件,并在有預訂時通過我的個人電子郵件 id 收到一封電子郵件 [即數據保存在 firestore 中(用 id 編寫的文檔)]。電子郵件將自動發送到提供的電子郵件 ID。我該怎么辦呢。提前感謝您的任何幫助。
查看完整描述

3 回答

?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

可能的解決方案之一是使用專用于電子郵件發送的Firebase擴展。

由于您希望在集合中創建新文檔時發送電子郵件BookingData,因此配置它將是小菜一碟。

只需按照配置說明進行操作,并在“電子郵件文檔集合”字段中輸入“BookingData”(“電子郵件文檔集合”是“包含用于構建和發送電子郵件的文檔的集合的路徑”)

然后,如此處文檔中所述,在 BookingData 集合中創建的文檔中,包含一個與 和, (或) 字段to具有相同值的字段以及您自己的電子郵件。然后,使用文檔的字段指定其他電子郵件元素,例如主題行和電子郵件正文(純文本或 HTML)。emailccbccmessage


請注意,這樣做會將所有這些額外信息(以及一些包含擴展執行狀態的字段)添加到 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 計劃中。


查看完整回答
反對 回復 2023-07-20
?
FFIVE

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");

? });

});


查看完整回答
反對 回復 2023-07-20
?
絕地無雙

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");

  });

}



查看完整回答
反對 回復 2023-07-20
  • 3 回答
  • 0 關注
  • 179 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號