إرسال البريد الإلكتروني باستخدام JavaScript (Node.js): دليل شامل
في تطوير الويب الحديث، تُعد القدرة على إرسال البريد الإلكتروني برمجياً وظيفة بالغة الأهمية لأي تطبيق جاد. سواء كان تأكيد التسجيل، أو إعادة تعيين كلمة المرور، أو الإشعارات، أو النشرات التسويقية - يقدم Node.js عدة حلول قوية لدمج وظائف البريد. في هذه المقالة، سنستعرض بالتفصيل ثلاثة من أشهر الأساليب: المكتبة المدمجة nodemailer، والخدمة السحابية SendGrid، وواجهة API المرنة Mailgun.
لماذا نحتاج إلى مكتبة منفصلة لإرسال البريد الإلكتروني؟
لا يحتوي Node.js على أدوات مدمجة للتعامل مع بروتوكول SMTP أو REST API لخدمات البريد. لذلك، يستخدم المطورون مكتبات متخصصة تتولى:
- تكوين رسائل MIME الصحيحة (بما في ذلك HTML والمرفقات والصور المضمنة)؛
- إدارة قوائم الانتظار وإعادة المحاولة عند أخطاء الشبكة؛
- تخزين ونقل بيانات الاعتماد بشكل آمن؛
- دعم موفري البريد الإلكتروني المشهورين (Gmail، Yandex، Mail.ru، الخوادم المؤسسية).
1. Nodemailer - عميل SMTP عالمي
Nodemailer هو المعيار الفعلي لإرسال البريد الإلكتروني في Node.js. يدعم كلاً من SMTP التقليدي والتكامل مع OAuth2. تعمل المكتبة بدون تبعيات إضافية وتسمح بإرسال الرسائل عبر أي خادم SMTP.
التثبيت
npm install nodemailerمثال أساسي للإرسال عبر SMTP Gmail
const nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, secure: false, // true للمنفذ 465، false للمنافذ الأخرى auth: { user: 'your-email@gmail.com', pass: 'your-app-password' // استخدم كلمة مرور التطبيق، وليس الرئيسية! }});
const mailOptions = { from: '"اسم المرسل" <your-email@gmail.com>', to: 'recipient@example.com', subject: 'مرحباً من Node.js', text: 'هذه رسالة نصية بسيطة.', html: '<b>هذا نص غامق في HTML</b>'};
transporter.sendMail(mailOptions, (error, info) => { if (error) { return console.log('خطأ:', error); } console.log('تم إرسال البريد: %s', info.messageId);});العمل مع المرفقات
mailOptions.attachments = [ { // ملف على القرص filename: 'document.pdf', path: '/path/to/document.pdf' }, { // محتوى كسلسلة نصية filename: 'notes.txt', content: 'ملف نصي تم إنشاؤه فوراً' }];2. SendGrid - خدمة سحابية للرسائل المعاملاتية
SendGrid (الآن جزء من Twilio) يوفر REST API قوي ويضمن نسبة توصيل عالية. تعمل مكتبة @sendgrid/mail على تبسيط التكامل. مناسبة للمشاريع التي تهم فيها تحليلات الفتح والنقر وإلغاء الاشتراك.
التثبيت
npm install @sendgrid/mailمثال للإرسال
const sgMail = require('@sendgrid/mail');sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = { to: 'recipient@example.com', from: 'sender@yourdomain.com', // يجب التحقق من النطاق في SendGrid subject: 'إشعار من الخدمة', text: 'نسخة نصية من الرسالة', html: '<h1>مرحباً!</h1><p>هذه الرسالة أُرسلت عبر SendGrid.</p>',};
sgMail.send(msg) .then(() => console.log('تم إرسال البريد الإلكتروني بنجاح')) .catch((error) => console.error(error.toString()));الإرسال باستخدام القوالب الديناميكية
const msg = { to: 'user@example.com', from: 'test@example.com', templateId: 'd-xxxxxxxxxxxxxxxxxxxx', // معرف القالب من SendGrid dynamicTemplateData: {