إرسال البريد الإلكتروني باستخدام 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/mailimport 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