ब्राउज़र मेल सर्वर से रॉ TCP कनेक्शन को रोकते हैं। फ्रंटएंड कोड में API कुंजी या SMTP पासवर्ड रखने से आपके क्रेडेंशियल हर उस व्यक्ति को दिख जाते हैं जो डेवलपर टूल्स खोलता है।
ब्राउज़र ईमेल क्यों नहीं भेज सकता?
ब्राउज़र JavaScript को रॉ TCP सॉकेट उपलब्ध नहीं कराते, इसलिए क्लाइंट-साइड कोड वह SMTP कनेक्शन नहीं खोल सकता जिसकी मेल सर्वर को ज़रूरत होती है। ब्राउज़र से सीधे किसी HTTP ईमेल API को कॉल करने पर भी आपकी API कुंजी पेज सोर्स और नेटवर्क टैब में दिख जाती है। ब्राउज़र फ़ॉर्म इनपुट इकट्ठा करके आपके बैकएंड को भेजता है, और बैकएंड ईमेल भेजता है।
Node बैकएंड से SMTP के ज़रिए ईमेल कैसे भेजें?
Node में SMTP के लिए Nodemailer मानक लाइब्रेरी है। आप एक बार ट्रांसपोर्ट कॉन्फ़िगर करते हैं, फिर sendMail कॉल करते हैं:
import nodemailer from "nodemailer";
const transporter = nodemailer.createTransport({
host: "smtp.example.com",
port: 587,
secure: false,
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASS,
},
});
await transporter.sendMail({
from: "you@yourdomain.com",
to: "recipient@example.org",
subject: "Your receipt",
text: "Thanks for your order.",
html: "<p>Thanks for your order.</p>",
});
यह लगातार चलने वाले सर्वर पर अच्छी तरह काम करता है। Nodemailer फ़ाइल अटैचमेंट और लोकल SMTP टेस्टिंग को भी सपोर्ट करता है।
HTTP ईमेल API से ईमेल कैसे भेजें?
आपका बैकएंड fetch के साथ किसी HTTP ईमेल API को JSON भेजकर भी ईमेल भेज सकता है। यह रॉ TCP सॉकेट की जगह मानक HTTPS का उपयोग करता है, इसलिए यह लगातार चलने वाले सर्वर और सर्वरलेस रनटाइम दोनों पर काम करता है:
const res = await fetch("https://us1.platform.bird.com/v1/email/messages", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.BIRD_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
from: "onboarding@messagebird.dev",
to: ["delivered@messagebird.dev"],
subject: "Hello from JavaScript",
html: "<p>It works.</p>",
}),
});
if (!res.ok) {
throw new Error(`Send failed: ${res.status}`);
}
होस्ट को अपने वर्कस्पेस के क्षेत्र के अनुसार चुनें (bk_us1_ कुंजियों के लिए us1.platform.bird.com, bk_eu1_ कुंजियों के लिए eu1.platform.bird.com)। API कुंजी को सर्वर-साइड एनवायरनमेंट वेरिएबल में रखें, ताकि वह कभी क्लाइंट तक न पहुँचे।
Bird से भेजें
टाइप की गई प्रतिक्रियाओं और अपने-आप फिर से प्रयास के साथ Node.js या TypeScript से भेजने के लिए, BIRD_API_KEY को Bird TypeScript SDK में पास करें:
import { BirdClient } from "@messagebird/sdk";
const bird = new BirdClient({ apiKey: process.env.BIRD_API_KEY! });
const { data, error } = await bird.email
.send({
from: "onboarding@messagebird.dev",
to: ["delivered@messagebird.dev"],
subject: "Hello from Node",
html: "<p>It works.</p>",
})
.safe();
कस्टम डोमेन कॉन्फ़िगर करने से पहले onboarding@messagebird.dev प्रेषक और delivered@messagebird.dev सैंडबॉक्स प्राप्तकर्ता से आपके सेटअप की पुष्टि होती है। अगर आप ईमेल का मुख्य भाग React कंपोनेंट के रूप में बनाते हैं, तो React Email कंपोनेंट को उस HTML स्ट्रिंग में रेंडर करता है जिसे html में पास किया जाता है।