إرسال البريد الإلكتروني باستخدام TypeScript: دليل كامل مع nodemailer و SMTP

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

إرسال البريد الإلكتروني باستخدام TypeScript: من البسيط إلى المعقد



يعد إرسال رسائل البريد الإلكتروني إحدى الوظائف الرئيسية لأي تطبيق ويب: تسجيل المستخدمين، إعادة تعيين كلمة المرور، إشعارات الطلبات، النشرات الإخبارية. في نظام TypeScript (و Node.js)، توجد عدة مكتبات قوية تسمح بتهيئة مرنة لإرسال البريد الإلكتروني. في هذه المقالة، سنستعرض ثلاث أدوات شائعة: nodemailer، @sendgrid/mail و mailgun.js، وسنقدم أمثلة كود بلغة TypeScript، ونناقش العمل الآمن مع SMTP وإنشاء القوالب.



1. nodemailer — عميل SMTP متعدد الاستخدامات



nodemailer هي المكتبة الأكثر شيوعًا لإرسال الرسائل من Node.js. وهي تدعم أي خوادم SMTP (Gmail، Yandex، Mail.ru، خادم بريد خاص)، بالإضافة إلى ناقلات مدمجة للخدمات الشائعة. تعمل "فورًا" مع TypeScript بفضل توفر الأنواع.



التثبيت

npm install nodemailernpm install @types/nodemailer --save-dev


مثال أساسي للإرسال عبر Gmail SMTP

import nodemailer from 'nodemailer';

interface EmailOptions { to: string; subject: string; text: string; html?: string;}

async function sendEmail(options: EmailOptions): Promise<void> { const transporter = nodemailer.createTransport({ service: 'gmail', auth: { user: process.env.EMAIL_USER, pass: process.env.EMAIL_PASS, }, });

const mailOptions = { from: `"My App" <${process.env.EMAIL_USER}>`, to: options.to, subject: options.subject, text: options.text, html: options.html, };

const info = await transporter.sendMail(mailOptions); console.log('تم إرسال البريد الإلكتروني:', info.messageId);}

// الاستخدامsendEmail({ to: 'user@example.com', subject: 'مرحبًا من TypeScript!', text: 'هذه رسالة اختبارية.', html: '<h1>مرحبًا!</h1><p>هذه هي نسخة <strong>HTML</strong>.</p>',}).catch(console.error);


العمل مع عدة مستلمين ومرفقات

async function sendBulkWithAttachments(): Promise<void> {  const transporter = nodemailer.createTransport({    host: 'smtp.yandex.ru',    port: 465,    secure: true,    auth: {      user: process.env.YANDEX_USER,      pass: process.env.YANDEX_PASS,    },  });

await transporter.sendMail({ from: '"الفريق" <no-reply@mydomain.ru>', to: ['user1@example.com', 'user2@example.com'], subject: 'تقرير الشهر', text: 'مرفق ملف التقرير.', attachments: [ { filename: 'report.pdf', path: './docs/report.pdf', }, ], });}


2. SendGrid — خدمة سحابية للأحجام الكبيرة



SendGrid (جزء من Twilio) هي منصة احترافية لإرسال البريد الإلكتروني. توفر API، SDK لـ Node.js/TypeScript، وتحليلات التسليم، والحماية من البريد العشوائي. يوصى بها للمشاريع ذات الأحمال العالية (آلاف الرسائل يوميًا).



التثبيت والإعداد

npm install @sendgrid/mail


import sgMail from '@sendgrid/mail';

sgMail.setApiKey(process.env.SENDGRID_API_KEY!);

interface SendGridOptions { to: string | string[]; subject: string; html: string; from?: string;}

async function sendViaSendGrid(options: SendGridOptions): Promise<void> { const msg = { to: options.to, from: options.from || 'noreply@mydomain.com', subject: options.subject, html: options.html, };

try { await sgMail.send(msg); console.log('تم إرسال البريد الإلكتروني عبر SendGrid'); } catch (error) { console.error('خطأ SendGrid:', error); throw error; }}


3. Mailgun — بديل للمطورين



Mailgun هي خدمة شائعة أخرى مع REST API متوافقة مع TypeScript

توصيات