Abdelrhman

أداة Leviro Mailer لسطر الأوامر
0 مشاهدات

أداة Leviro Mailer لسطر الأوامر

أداة مفتوحة المصدر لسطر الأوامر ترسل رسائل من قوالب وملفات CSV عبر SMTP، وتستأنف الحملات المتوقفة.

تفاصيل المشروع

Leviro Mailer أداة مفتوحة المصدر لسطر الأوامر ترسل حملة بريدية من ملف CSV محلي عبر حساب SMTP. تملأ قالب Handlebars بقيم كل صف، وترسل الرسائل بوتيرة محددة، وتحفظ سجل الإرسال الناجح كي يمكن استئناف التشغيل بعد توقفه.

المشكلة

لا تتطلب مهمة بريدية صغيرة بالضرورة خدمة حملات مستضافة. لكنها تحتاج إلى فحص المدخلات ومعاينة الرسائل ومعالجة الأعطال، وإلى طريقة تمنع تكرار الإرسال عند انقطاع العملية. تعرض الأداة هذه القرارات بوضوح للشخص الذي يشغلها.

الميزات الرئيسية

  • يستقبل أمر الإرسال ملف CSV وقالب الرسالة وعنوانها والمرسل ومعرف الحملة.
  • يتطلب تحليل CSV عمودًا للبريد الإلكتروني، ويتحقق من صحة عناوين المستلمين.
  • يملأ Handlebars محتوى الرسالة من حقول صف المستلم.
  • يفحص وضع المعاينة الحملة ويعرض نموذجًا دون إرسال بريد.
  • يرسل وضع الاختبار رسالة واحدة مميزة باستخدام أول صف بيانات.
  • يفصل تأخير قابل للضبط بين الرسائل، وتعالج إعادة المحاولة أعطال SMTP المؤقتة.
  • يتجاوز سجل الحملة المحلي العناوين المسجلة بوصفها مرسلة سابقًا.
  • يتيح خيار الإرسال القسري إعادة الإرسال المقصودة إلى مستلم مسجل.

البنية التقنية

تحلل واجهة TypeScript الخيارات باستخدام Commander، ثم تتحقق منها عبر Zod. تقرأ الأداة ملف CSV وتجهز القالب، وتسلم كل رسالة إلى Nodemailer لإرسالها عبر SMTP. تحفظ حالة الحملة في مجلد محلي باسم .leviro-mailer. يسجل مشغل الحملة كل إرسال مقبول قبل الانتقال إلى المستلم التالي. وإذا تعذر حفظ الحالة، يوقف الحملة حتى لا يستمر الإرسال بلا سجل موثوق للاستئناف.

جوانب هندسية

  • يحفظ السجل معرفات SHA-256 مشتقة من الحملة وعنوان المستلم بدل حفظ العنوان نفسه.
  • تكتب التحديثات في ملف مؤقت ثم يعاد تسميته لتقليل خطر السجل الجزئي.
  • تستخدم إعادة المحاولة تأخيرًا متزايدًا عند الأخطاء المصنفة مؤقتة.
  • تظهر أخطاء صفوف CSV والقيم الناقصة في القالب قبل بدء التسليم.
  • تغطي اختبارات Vitest التحليل والقوالب وسلوك SMTP وحالة الحملة ومسار التشغيل.

معرض الصور

No media available for this project.

آراء العملاء

آراء أشخاص استخدموا هذا المشروع أو شاركوا في تطويره.

شارك تجربتك مع هذا المشروع