Brevo اور HTTP API کا استعمال کرتے ہوئے کلاؤڈ SMTP پابندیوں کو کیسے نظرانداز کریں۔

آج کل، ویب ایپلیکیشن کے ذریعے ای میل بھیج کر بات چیت کرنے کے قابل ہونا ضروری ہے۔ اس سے کاروباروں کو ممکنہ گاہکوں سے جڑے رہنے، صارف کی شناخت کی محفوظ طریقے سے تصدیق کرنے اور پاس ورڈ ری سیٹ جیسی اہم اطلاعات فراہم کرنے میں مدد ملتی ہے۔

لیکن بعض اوقات، کلاؤڈ پر مکمل طور پر کام کرنے والے ای میل فنکشن کو تعینات کرنے کے نتیجے میں غیر متوقع اور مایوس کن غلطیاں ہو سکتی ہیں۔ اگر میں پسدید بناتا ہوں اور اسے مقامی طور پر جانچتا ہوں تو یہ بالکل کام کرتا ہے۔ پھر میں نے اسے کلاؤڈ پر لگا دیا اور اچانک ایپ مکمل طور پر ای میلز بھیجنا بند کر دیتی ہے۔

اس آرٹیکل میں، آپ یہ جانیں گے کہ آپ کا ای میل سیٹ اپ رینڈر یا ہیروکو جیسے کلاؤڈ پلیٹ فارمز پر کیوں ناکام ہو جاتا ہے، نیٹ ورکنگ کے کون سے بنیادی اصول مسئلہ کا باعث بن رہے ہیں، اور بریوو کے HTTP API کا استعمال کرتے ہوئے ان حدود کو خوبصورتی سے کیسے نظرانداز کیا جائے۔

آئیے اس میں داخل ہوں۔

خاکہ

شرطیں

اس ٹیوٹوریل سے زیادہ سے زیادہ فائدہ اٹھانے کے لیے، درج ذیل کا بنیادی علم ہونا ضروری ہے:

  • JavaScript اور Node.js: JS سرور سائیڈ پر کس طرح کام کرتا ہے اس کی بنیادی سمجھ رکھنے سے پروجیکٹ کی پیروی کرنا آسان ہو جائے گا۔

  • REST API: آپ کو اس بات کی بنیادی سمجھ ہونی چاہیے کہ HTTP درخواستیں (جیسے POST اور GET) مقامی کا استعمال کرتے ہوئے کیسے کام کرتی ہیں۔ fetch() Node.js میں۔

  • Express.js: چونکہ ہم اصل کنٹرولر کی تعمیر کریں گے، پہلے سے طے شدہ سرور روٹس بنانے کے بارے میں تھوڑا سا پس منظر مددگار ثابت ہوگا۔

  • نوڈ میلر کیا ہے اور کلاؤڈ ہوسٹنگ پلیٹ فارمز (جیسے رینڈر یا ہیروکو) کیسے کام کرتے ہیں اس کی بنیادی تفہیم۔

اپنے حالیہ منصوبوں میں سے ایک میں، ہم نے ایک پیچیدہ توثیق کا بہاؤ بنایا ہے جس کے لیے صارفین کو اپنی رجسٹریشن مکمل کرنے کے لیے ان کے ای میل پر ایک وقتی پاس ورڈ (OTP) بھیجنے کی ضرورت تھی۔ میں نے نوڈ میلر ترتیب دیا، اسے Gmail سے منسلک کیا، اور اس کا تجربہ کیا۔ localhost. ای میل بالکل سیکنڈوں میں پہنچ گئی۔

لیکن جب میں نے بیک اینڈ کو رینڈر پر تعینات کیا تو سائن اپ کا پورا بہاؤ ٹوٹ گیا۔ تھوڑی گہری کھدائی کے بعد، میں نے سوچا کہ یہ کیوں ٹوٹا ہے اور اسے مستقل طور پر کیسے ٹھیک کیا جائے۔ اب جب میں جانتا ہوں کہ یہ کیسے کام کرتا ہے، میں اسے آپ سب کے ساتھ شیئر کرنا چاہتا ہوں۔

مسئلہ: نوڈ میلر اور SMTP بلاک کرنا

تو اصل میں مسئلہ کیا ہے؟

Nodemailer ایک بہت مشہور Node.js ماڈیول ہے جو آپ کو مؤثر طریقے سے ای میل بھیجنے کی اجازت دیتا ہے۔ ڈیولپرز عام طور پر اسے Gmail یا Mailtrap جیسی سروسز سے منسلک کرنے کے لیے استعمال کرتے ہیں۔ SMTP (سادہ میل ٹرانسفر پروٹوکول)۔ جب آپ کا کوڈ ای میل بھیجنے کی کوشش کرتا ہے، نوڈ میلر میل سرور سے کنکشن کھولنے کے لیے پورٹ کا استعمال کرتا ہے۔ 587 (STARTTLS کے لیے) یا پورٹ 465 (SSL کے لیے)۔

لیکن کلاؤڈ فراہم کنندگان جیسے Render, Heroku, DigitalOcean, اور AWS کو ہر روز خودکار سپیمرز کے خلاف ایک بڑی جنگ کا سامنا کرنا پڑتا ہے۔ بدنیتی پر مبنی صارفین اکثر ہزاروں فری ٹائر سرورز کو گھماتے ہیں خاص طور پر لاکھوں سپام ای میلز بھیجنے کے لیے۔ اگر آپ کا کلاؤڈ فراہم کنندہ اس کی اجازت دیتا ہے تو، نیٹ ورک کے IP پتوں کا ایک پورا بلاک Gmail، Outlook، اور Yahoo کے ذریعے بلیک لسٹ کر دیا جائے گا۔

اپنے نیٹ ورک کی ساکھ کے تحفظ کے لیے، کلاؤڈ فراہم کرنے والوں نے مضبوط، پرسکون اصول قائم کیے ہیں: پورٹ 25، 465 اور 587 پر تمام آؤٹ باؤنڈ ٹریفک کو فری اور بنیادی ٹائرز پر سختی سے بلاک کر دیا گیا ہے۔

اس کا مطلب ہے کہ آپ کا سرور لفظی طور پر فائر وال کے پیچھے پھنس گیا ہے۔ اگر آپ سرور لاگز کو چیک کرتے ہیں، تو آپ کو کوئی "غلط پاس ورڈ” کی خامیاں نظر نہیں آئیں گی۔ اس کے بجائے، آپ کو درج ذیل ٹائم آؤٹ کی خرابی نظر آئے گی۔

Error: connect ETIMEDOUT 142.250.102.108:587
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1494:16)

آپ کا کوڈ ٹوٹا نہیں ہے۔ یہ صرف نیٹ ورک کی سطح پر مسدود ہے!

"جدید” نقصانات: ڈومین کی تصدیق

جب ڈویلپرز اس دیوار سے ٹکراتے ہیں، تو وہ اکثر API پر مبنی نئی ای میل سروسز جیسے کہ دوبارہ بھیجیں یا SendGrid آزماتے ہیں۔ یہ ایک حیرت انگیز ٹول ہے، لیکن یہ ابتدائیوں کے لیے نئی مشکلات پیدا کرتا ہے۔ سخت ڈومین کی توثیق۔

اگر آپ پروڈکشن میں ری ڈائریکٹ استعمال کرنا چاہتے ہیں، تو آپ اپنی مرضی کے مطابق ڈومین استعمال کر سکتے ہیں، جیسے yourname.com) DNS ریکارڈز (SPF، DKIM، اور DMARC) کو ترتیب دیں۔ اگر آپ کے پاس ڈومین نہیں ہے تو، ری سینڈ کا سینڈ باکس موڈ صرف ای میل بھیجنے کو سختی سے محدود کرتا ہے۔ صرف اپنے آپ کو۔ ای میلز حقیقی صارفین کو نہیں بھیجے جا سکتے۔

ڈویلپرز کے لیے جو صرف ایک پورٹ فولیو پروجیکٹ شروع کرنا چاہتے ہیں، صرف ٹیسٹ ای میلز بھیجنے کے لیے ڈومین خریدنا ایک بہت بڑی رکاوٹ ہے۔

حتمی حل: بریوو اور HTTP API

ہمیں ایک ایسے حل کی ضرورت ہے جو دو معیارات پر پورا اترے۔

  1. بندرگاہ کو بائی پاس کرنا ضروری ہے۔ 587 آگ کا دروازہ

  2. آپ کو ای میل بھیجنے کے قابل ہونا چاہئے: جو بھی آپ کو اپنی مرضی کے مطابق ڈومین خریدنے پر مجبور کیے بغیر۔

یہ وہ جگہ ہے جہاں SMTP اور REST API کے درمیان ساختی فرق بچاؤ کے لیے آتے ہیں۔ SMTP میل روٹنگ کے لیے ایک وقف شدہ پروٹوکول ہے، جبکہ REST API اس کا استعمال کرتے ہوئے معیاری ویب ٹریفک پر کام کرتا ہے: HTTPS (پورٹ 443). کلاؤڈ فراہم کنندہ نہیں کر سکتے پورٹ 443 کو بلاک کرنا سرور کو ڈیٹا بیس سے ڈیٹا کھینچنے یا مکمل طور پر ویب سرور کے طور پر کام کرنے سے روکتا ہے۔

داخل کریں بریوو (سابقہ ​​سینڈن بلیو)۔ Brevo ایک طاقتور ای میل پلیٹ فارم ہے جو آپ کو معیاری REST APIs کے ذریعے ای میل بھیجنے دیتا ہے۔ سب سے بہتر، مفت درجے (فی دن 300 ای میلز) واحد مرسل کی تصدیق کی اجازت دیتا ہے۔ بس اپنے معیاری Gmail ایڈریس کی تصدیق کریں اور آپ کسی کو بھی بھیج سکتے ہیں!

HTTPS پر Brevo کے API کو JSON پے لوڈ بھیجیں اور سرور غیر محدود بندرگاہوں پر ٹریفک کو روٹ کرے گا۔ 443رینڈر فائر وال کو مکمل طور پر نظرانداز کرتا ہے۔

اب جب کہ ہم ان ٹولز کا نظریہ جانتے ہیں جو ہم استعمال کریں گے، آئیے کوڈ لکھنے کی طرف بڑھتے ہیں۔

بیک اینڈ کی ترتیبات

سب سے پہلے، آپ کو اپنے ماحول کو ترتیب دینے کی ضرورت ہے. اگر آپ کے کمپیوٹر پر Node.js پہلے سے انسٹال نہیں ہے تو اسے ڈاؤن لوڈ اور انسٹال کرنے کے لیے اس کی ویب سائٹ پر جائیں۔

دوڑ کر شروع کریں۔ npm init -y آپ کے ٹرمینل میں۔ یہ ہے package.json ایک فائل جو پروجیکٹ کا انتظام کرتی ہے اور تمام انحصار کو اسٹور کرتی ہے۔

کے ساتھ چلائیں۔ npm install express dotenv.

آپ اسے انسٹال کرنے سے واقف ہو سکتے ہیں۔ nodemailer آپ کے ای میل کے کام کے لیے۔ لیکن چونکہ ہم بنیادی Node.js استعمال کریں گے۔ fetch() Brevo API کے ساتھ بات چیت کرنے کے لیے API، اصل میں اسے انسٹال کرنے کی ضرورت نہیں ہے۔ کوئی بھی کوئی بھاری ای میل لائبریریاں بالکل نہیں! ہم اپنے پسدید کو ہر ممکن حد تک ہلکا رکھنا چاہتے ہیں۔

بریو کنفیگریشن کی ترتیبات

اپنا ای میل فنکشن لکھنے سے پہلے، آپ کو اپنی API کلید تک رسائی حاصل کرنے کے لیے پہلے Brevo کو کنفیگر کرنا ہوگا۔

  1. Brevo.com پر جائیں اور ایک مفت اکاؤنٹ بنائیں۔

  2. سیٹ اپ کے دوران، آپ کو درج ذیل شامل کرنے کے لیے کہا جائے گا: بھیجنے والا ای میل. یقینی بنائیں کہ آپ اپنا معیاری Gmail پتہ درج کریں۔ ہم آپ کو ایک لنک کے ساتھ ایک ای میل بھیجیں گے اس بات کی تصدیق کرنے کے لیے کہ آپ اس پتے کے مالک ہیں۔

  3. تصدیق کے بعد، ڈیش بورڈ کے اندر اوپری دائیں کونے میں اپنے پروفائل کے نام پر کلک کریں اور SMTP اور APIs ڈراپ ڈاؤن مینو سے

  4. پر جائیں۔ API کلید تھپتھپائیں اور کلک کریں۔ ایک نئی API کلید بنائیں. اسے "MyWebApp” جیسا نام دیں۔

تیار کردہ کلید کو کاپی کریں اور اسے محفوظ طریقے سے درج ذیل فولڈر میں محفوظ کریں۔ .env پروجیکٹ کی جڑ میں فائلیں:

# .env file
EMAIL_USER = yourverifiedemail@gmail.com
BREVO_API_KEY = xkeysib-your-generated-api-key-goes-here

ایک ای میل فنکشن بنائیں

اب جب کہ آپ نے اپنی API کلید حاصل کر لی ہے اور اپنے ماحول کے متغیرات کو ترتیب دے دیا ہے، بس بیک اینڈ کوڈ کو ایک ساتھ رکھنا باقی ہے۔

نام کی ایک فائل بنائیں۔ utils/email.js.

سب سے پہلے .env آپ فائل بنا کر اپنی تخلیق کردہ اسناد تک آسانی سے رسائی حاصل کر سکتے ہیں۔

require("dotenv").config();

// We'll define the function to accept dynamic options
const sendEmail = async (options) => {
  const brevoApiKey = process.env.BREVO_API_KEY;
  const senderEmail = process.env.EMAIL_USER;

  // Validate that the keys actually exist
  if (!brevoApiKey || !senderEmail) {
    throw new Error("Missing Brevo credentials in environment variables.");
  }

اگلا، ہمیں پے لوڈ کی ساخت بنانے کی ضرورت ہے۔ یہ ایک JSON آبجیکٹ ہے جو بریوو کو بالکل بتاتا ہے کہ ای میل کس کو بھیجا جا رہا ہے، کون اسے وصول کر رہا ہے، اور مواد کیا ہے۔ ایسا کرنے کا طریقہ یہاں ہے:

  const payload = {
    sender: {
      name: "My Awesome Web App",
      email: senderEmail, // Must match your verified Brevo email
    },
    to: [
      {
        email: options.email, // The dynamic email address of the user receiving the email
      },
    ],
    subject: options.subject,
    htmlContent: options.html,
  };

اوپر کے کوڈ میں payload آبجیکٹ آپ کی معلومات کو محفوظ طریقے سے پیک کرتا ہے۔ ہم گزرتے ہیں options.email، options.subjectاور options.html آپ اس واحد فنکشن کو خوش آمدید ای میلز، پاس ورڈ دوبارہ ترتیب دینے اور اطلاعات کے لیے دوبارہ استعمال کر سکتے ہیں۔

اب ہم بریوو بیک اینڈ پر ڈیٹا بھیجنے کے لیے نیٹ ورک کی اصل درخواست کرتے ہیں۔ ہم ہیں POST طریقہ ڈیٹا کی منتقلی کے وقت، اسے JSON فارمیٹ میں سٹرنگ کیا جانا چاہیے۔

  try {
    const response = await fetch("https://api.brevo.com/v3/smtp/email", {
      method: "POST",
      headers: {
        "Content-Type": "application/json",
        "api-key": brevoApiKey,
      },
      body: JSON.stringify(payload),
    });

    const result = await response.json();

    if (!response.ok) {
      throw new Error(`Brevo API Error: ${JSON.stringify(result)}`);
    }

    console.log(`Email successfully sent to ${options.email} via Brevo HTTP API!`);
  } catch (error) {
    console.error("Error details:", error.message);
  }
};

module.exports = sendEmail;

مندرجہ بالا کوڈ میں، پے لوڈ جمع کرائے جانے کے بعد، اگر میسج کامیابی کے ساتھ بھیجا جاتا ہے تو ٹرمینل میں کامیابی کا لاگ دکھایا جائے گا۔ تاہم، اگر آپ کی API کلید میں ٹائپنگ کی غلطی کی وجہ سے پیغام کو کامیابی سے نہیں پہنچایا جاتا ہے، تو آپ کو غلطی کا پیغام ملے گا تاکہ آپ کو درست طور پر کیا غلط ہوا ہے اسے ٹھیک کرنے میں مدد ملے۔

ایکسپریس روٹ میں خصوصیات کو ضم کریں۔

اب آپ نے کامیابی کے ساتھ ایک طاقتور ای میل فیچر بنایا ہے۔ آئیے دیکھتے ہیں کہ اسے عملی طور پر ایک حقیقی ایکسپریس ایپلی کیشن میں کیسے استعمال کیا جائے۔

بنانا index.js ایک فائل بنائیں اور ایک سادہ ایکسپریس سرور پاتھ سیٹ کریں:

const express = require("express");
const sendEmail = require("./utils/email");
const app = express();

app.use(express.json()); // Middleware to parse JSON request bodies

app.post("/api/signup", async (req, res) => {
  const { username, email } = req.body;

  // 1. Save user to database (skipped for brevity)
  
  // 2. Generate a random OTP
  const otp = Math.floor(100000 + Math.random() * 900000);

  // 3. Send the email using our new Brevo function
  try {
    await sendEmail({
      email: email,
      subject: "Welcome! Here is your Verification Code",
      html: `
        

Welcome to My Awesome Web App, ${username}!

Please use the verification code below to complete your registration:

This code will expire in 10 minutes.

`, }); res.status(201).json({ message: "User created and email sent!" }); } catch (error) { res.status(500).json({ error: "Failed to send email." }); } }); app.listen(8000, () => { console.log("Server running on port 8000"); });

اور بس! اب آپ اسے مار سکتے ہیں۔ /api/signup اپنے React یا Vue فرنٹ اینڈ سے ایک اینڈ پوائنٹ بھیجیں اور ایک خوبصورت فارمیٹ شدہ ای میل فوری طور پر Brevo کے REST API کے ذریعے بھیجا جائے گا۔

نتیجہ

ایک ڈویلپر کے طور پر، یہ کیڑے کا سامنا کرنے کی ایک رسم ہے جو مقامی طور پر کام کرتے ہیں لیکن پیداوار میں ناکام رہتے ہیں۔ تاہم، "ای میل کی ترسیل ناکام” ٹائم آؤٹ کی خرابی خاص ہے۔ سافٹ ویئر انجینئرنگ صرف صاف نحو لکھنے کے بارے میں نہیں ہے، یہ بنیادی انفراسٹرکچر، نیٹ ورک کی تہوں، اور اس ماحول کے سیکیورٹی سیاق و سباق کو سمجھنے کے بارے میں ہے جس میں آپ کا کوڈ چلتا ہے۔

پروٹوکول (SMTP) کو آرکیٹیکچرل پیٹرن (HTTPS پر REST API) سے تبدیل کرنے سے صرف کیڑے ٹھیک نہیں ہوتے ہیں۔ ہم نے بھاری تھرڈ پارٹی این پی ایم ماڈیولز جیسے نوڈ میلر پر بھروسہ کیے بغیر کلاؤڈ لیول فائر والز کے ارد گرد ایک محفوظ، مفت، اور مضبوط بائی پاس کامیابی کے ساتھ ڈیزائن کیا ہے۔

اگر آپ نے ابھی تک کامیابی حاصل کی ہے، تو ہم امید کرتے ہیں کہ ہم نے نیٹ ورک کی تہہ کو سمجھنے کی اہمیت اور HTTP APIs کا استعمال کرتے ہوئے براہ راست ویب ایپلیکیشن سے ای میل پیغامات کو محفوظ طریقے سے بھیجنے کے طریقے کو کامیابی سے ظاہر کر دیا ہے۔

پڑھنے کے لیے شکریہ!

اوپر تک سکرول کریں۔