إرسال البريد الإلكتروني باستخدام JavaScript (Node.js): nodemailer, sendgrid, mailgun
يعد إرسال البريد الإلكتروني إحدى الوظائف الأساسية لتطبيقات الويب الحديثة: تسجيل المستخدمين، إعادة تعيين كلمات المرور، الإشعارات، والنشرات التسويقية. في بيئة Node.js، توجد عدة حلول موثوقة تتيح دمج وظائف البريد الإلكتروني في دقائق. في هذه المقالة، سنستعرض بالتفصيل ثلاث أدوات شائعة: nodemailer و sendgrid و mailgun. ستتعلم كيفية إعداد SMTP، إرسال رسائل مع مرفقات وقوالب HTML، وأي المقاييس يجب تتبعها.
1. Nodemailer — عميل SMTP شامل
Nodemailer هي المكتبة الأكثر شيوعًا لإرسال البريد الإلكتروني في Node.js. تدعم SMTP و SES و Sendmail والعديد من وسائل النقل. المزايا الرئيسية:
- إعداد بسيط عبر حساب SMTP (Gmail, Yandex, Mail.ru).
- دعم المرفقات والصور المضمنة وقوالب HTML.
- العمل مع قوائم الانتظار ومجموعات الاتصالات.
- إرسال غير متزامن عبر
async/await.
التثبيت والإرسال الأساسي
npm install nodemailerconst nodemailer = require('nodemailer');
const transporter = nodemailer.createTransport({ host: 'smtp.gmail.com', port: 587, secure: false, // true للمنفذ 465 auth: { user: 'your-email@gmail.com', pass: 'your-password' // أو كلمة مرور التطبيق }});
const mailOptions = { from: '"المرسل" <your-email@gmail.com>', to: 'recipient@example.com', subject: 'مرحبًا من Node.js!', text: 'هذه رسالة اختبارية.', html: '<h1>مرحبًا!</h1><p>هذه نسخة HTML.</p>'};
const sendMail = async () => { const info = await transporter.sendMail(mailOptions); console.log('تم إرسال الرسالة:', info.messageId);};
sendMail().catch(console.error);الإرسال مع المرفقات
const mailOptions = { // ...الحقول الأساسية attachments: [ { filename: 'document.pdf', path: '/path/to/document.pdf' }, { filename: 'image.png', content: fs.createReadStream('/path/to/image.png') } ]};هام: بالنسبة لـ Gmail، استخدم كلمة مرور التطبيق أو OAuth2.
2. SendGrid — خدمة سحابية للرسائل المعاملاتية
يوفر SendGrid (جزء من Twilio) واجهة برمجة تطبيقات قوية لإرسال البريد الإلكتروني مع معدل تسليم مرتفع. مناسب للشركات الناشئة والمشاريع الكبيرة. الإمكانيات الرئيسية:
- واجهة برمجة تطبيقات بمفاتيح وصول (بدون SMTP).
- قوالب ديناميكية (Handlebars).
- تحليلات: الفتح، النقرات، إلغاء الاشتراك.
- خطة مجانية تصل إلى 100 رسالة/يوم.
التثبيت والإرسال
npm install @sendgrid/mailconst sgMail = require('@sendgrid/mail');sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = { to: 'recipient@example.com', from: 'sender@example.com', subject: 'رسالة معاملاتية', text: 'نص الرسالة', html: '<strong>محتوى HTML</strong>', attachments: [ { content: 'base64encodedcontent', filename: 'invoice.pdf', type: 'application/pdf', disposition: 'attachment' } ]};
sgMail.send(msg) .then(() => console.log('تم إرسال البريد الإلكتروني')) .catch(console.error);استخدام القوالب الديناميكية
const msg = { to: 'user@example.com', from: 'noreply@mysite.com', templateId: 'd-xxxxxxxxxxxxxxxx', dynamicTemplateData: { username: 'إيفان', orderLink: 'https://mysite.com/order/123' }};