إجراء أولوية الخطاب لمكونات البريد الإضافية

المستودع: إضافة بريد أولوية Discourse Action Mailer

ماذا تفعل هذه الإضافة؟

تضيف هذه الإضافة قناتين SMTP جديدتين بالإضافة إلى قناة SMTP الافتراضية القياسية في Discourse. إحدى القنوات مخصصة لرسائل البريد الإلكتروني ذات “الأولوية العالية”؛ وهي (بشكل ذاتي) رسائل إشعار عندما يطلب المستخدم تسجيل الدخول عبر البريد الإلكتروني، أو الاشتراك، أو طلب إعادة تعيين كلمة المرور. أما القناة الأخرى فهي مخصصة لرسائل البريد الإلكتروني الملخصة (Digests). إذا لم يتم تكوين أي من قناتي SMTP الجديدتين (سنناقش ذلك لاحقًا)، فستعود القناتان الجديدتان تلقائيًا إلى قناة SMTP الافتراضية في Discourse.

لماذا يجب أن يهتم أي شخص أو يقوم بتثبيت هذه الإضافة؟

وجود قناة SMTP واحدة تجمع بين رسائل البريد الإلكتروني ذات “الأولوية العالية” للمستخدمين (مثل طلبات تسجيل الدخول عبر البريد الإلكتروني) ورسائل البريد الإلكتروني الملخصة (على سبيل المثال) في نفس القناة يخلق مشكلة محتملة في “التوافر”ملاحظة 1، خاصة إذا كانت قناة SMTP الافتراضية محدودة.

واجهنا هذه المشكلة مباشرة عند أول هجرة لنا إلى Discourse من منتدى قديم كنا نستخدم فيه حساب Google Workspace (المعروف سابقًا باسم G Suite). نظرًا لأن Google تفرض قيودًا على هذا الحساب، تم “قفل” حساب البريد الإلكتروني المحدد لبضعة أيام. لم تكن هذه مشكلة خطيرة حقًا لأننا قمنا بإنشاء حساب آخر وأوقفنا الرسائل الملخصة؛ ولكن لفترة قصيرة، لم يتمكن الأعضاء من تسجيل الدخول عبر البريد الإلكتروني أو الاشتراك.

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

في الواقع، من السهل جدًا القيام بذلك كما يمكنكم رؤية مدى بساطة كود هذه الإضافة.

كيف تقوم بتثبيت هذه الإضافة؟

تثبيت هذه الإضافة أمر بسيط.

  • قم بتثبيت الإضافة تمامًا كما تفعل مع أي إضافة أخرى لـ Discourse.
  • عرّف بيانات اعتماد SMTP الإضافية في ملفات بناء الحاوية (ملفات .yml الخاصة بك).

تُستخدم متغيرات بيئة حاوية Discourse الإضافية التالية، ما لم ترغب في استخدام القيم الافتراضية. هذه متغيرات البيئة الخاصة بـ SMTP تشبه إلى حد كبير متغيرات بيئة SMTP الافتراضية في Discourse مع إضافة _PRIORITY و _DIGEST إلى كل منها:

متغيرات بيئة قناة الأولوية

env:
  DISCOURSE_SMTP_ADDRESS_PRIORITY:                     
  DISCOURSE_SMTP_PORT_PRIORITY: 
  DISCOURSE_SMTP_USER_NAME_PRIORITY: 
  DISCOURSE_SMTP_PASSWORD_PRIORITY: 
  DISCOURSE_SMTP_AUTHENTICATION_PRIORITY:               # عادة ما يتم تعيينها على plain
  DISCOURSE_SMTP_ENABLE_START_TLS_PRIORITY:             # عادة ما يتم تعيينها على true

متغيرات بيئة قناة الملخصات

env:
  DISCOURSE_SMTP_ADDRESS_DIGEST:                     
  DISCOURSE_SMTP_PORT_DIGEST: 
  DISCOURSE_SMTP_USER_NAME_DIGEST: 
  DISCOURSE_SMTP_PASSWORD_DIGEST: 
  DISCOURSE_SMTP_AUTHENTICATION_DIGEST:               # عادة ما يتم تعيينها على plain
  DISCOURSE_SMTP_ENABLE_START_TLS_DIGEST:             # عادة ما يتم تعيينها على true

ستقوم الإضافة تلقائيًا بتعيين كل من القناتين أعلاه إلى القناة القياسية في Discourse إذا لم تحدد واحدة.

ملاحظات للمطورين

تقوم إضافة Discourse هذه بإنشاء قناة SMTP جديدة ذات “أولوية عالية” لرسائل SMTP ذات “أولوية أعلى” وقناة “ملخصات” جديدة مخصصة فقط للرسائل الملخصة المرسلة إلى المستخدمين، بما في ذلك AdminConfirmationMailer والطرق التالية في بريد UserNotifications:

إجراءات قناة الأولوية

  • :email_login
  • :signup
  • :forgot_password
  • :admin_login

إجراء قناة الملخصات

  • :digest

يجب أن تكون قناة SMTP ذات “الأولوية العالية” الجديدة مختلفة عن قناتك القياسية حيث ترسل Discourse الملخصات وما إلى ذلك.

كانت الخيارات أعلاه لـ “الأولوية العالية” ذاتية بالكامل (من جانبي) ويمكن تغييرها بسهولة عن طريق تعديل الإضافة.

يمكنك بسهولة التحقق من تكوينك في الحاوية باستخدام وحدة تحكم Rails، على سبيل المثال، لعرض إعدادات SMTP الخاصة بقناة “الأولوية” يمكنك:

rails c
Rails.application.config.priority_smtp_settings

نفس الشيء لقنوات “الملخصات”:

rails c
Rails.application.config.digest_smtp_settings

ونفس الشيء لإعدادات SMTP الافتراضية القياسية (OOTB):

rails c
Rails.application.config.action_mailer.smtp_settings

إذا قمت بتثبيت الإضافة ولم تقم بتعيين متغيرات البيئة في ملف بناء الحاوية؛ يمكنك بسهولة التحقق من أنها جميعًا تعود تلقائيًا إلى Rails.application.config.action_mailer.smtp_settings

بالإضافة إلى ذلك، يمكنك بسهولة فحص لوحات إدارة Discourse:

  • /admin/email/sent
  • /sidekiq

وتأكيد أن كل شيء يعمل بشكل جيد.

الاختبار

تم اختبار هذا الإصدار (v0.1) عمليًا على مدار العديد من الأيام، وحتى الآن يعمل بدون أي أخطاء.

للمسؤولين عن الأنظمة: تكويننا

في إعدادنا الحالي، نحن مهيئون على النحو التالي:

  • قناة الملخصات: sendgrid، “api: blah_blah_blah_11111_blah_bla”
  • القناة الافتراضية: sendgrid، “api: blah_blah_blah_2222_blah_blah”
  • قناة الأولوية: حساب Google Workspace

السبب في ذلك هو أننا نحصل على إحصائيات مهمة كثيرة مع Sendgrid، ونحن على الخطة الأساسية (ليست المجانية) بتكلفة حوالي 15 دولارًا أمريكيًا شهريًا، مما يسمح لنا بإرسال ما يصل إلى 40,000 رسالة في الشهر، وندير ذلك عن طريق تشغيل وإيقاف الرسائل الملخصة لضمان بقائنا تحت حد الـ 40 ألف.

نستخدم واجهتي برمجة تطبيقات Sendgrid مختلفتين لأغراض التتبع. كنت سأقوم بتعيين “القناة الافتراضية” إلى مزود آخر مثل “MailGun”، فقط للمتعة، لكنني لم أفعل ذلك.

نستخدم حساب Google Workspace الخاص بنا لأن منتدى Discourse لدينا لا يتلقى الكثير من المستخدمين الذين يسجلون الدخول عبر البريد الإلكتروني، وحجم الاشتراكات منخفض بما يكفي بحيث لا يشكو Google؛ وبالتالي يمكننا بسهولة رؤية ما يحدث لإشعارات البريد الإلكتروني ذات “الأولوية العالية”:

أوصي بأن المواقع التي لديها عدد كبير من الاشتراكات، وطلبات تسجيل الدخول عبر البريد الإلكتروني، وحمولة أخرى من “إشعارات البريد الإلكتروني ذات الأولوية” ألا تستخدم Google Workspace (أو أي حساب Google) وأن تستخدم مزودي البريد الإلكتروني الجماعي الآخرين مثل Sendgrid، MailGun، إلخ. كما ذُكر، نحن على الخطة الأساسية (ليست المجانية) لـ Sendgrid.

مع ذلك، فإن تكوين SMTP الخاص بك هو “من اختيارك” وليس “من اختياري” :slight_smile: لذا يرجى التكوين كما تعتقد أنه “الأفضل لك”.

التحسينات المستقبلية

هناك أيضًا أشياء ممتعة يمكننا القيام بها مثل إضافة “دوران دوري” (round robin) باستخدام مولد أرقام عشوائية لموازنة تحميل رسائل البريد الإلكتروني الملخصة (على سبيل المثال) عبر عدد من المزودين. من خلال تعديل هذه الإضافة بسهولة، يمكننا الحصول على 3 أو حتى 30 قناة بريد إلكتروني، وبالتالي يمكننا أن نكون مبدعين جدًا!

بالإضافة إلى ذلك، يمكننا النظر في استثناءات الوظائف (Jobs exceptions) لبريدنا، وإذا كانت هناك مشكلة يمكننا وضع علامة على ذلك المراسل (القناة) والتوقف عن إرسال البريد الإلكتروني إلى أي قناة “معلّمة”، إلخ.

السماء هي الحد الحقيقي؛ ولكن في الوقت الحالي، ليس لدي خطط فورية لإضافة ميزات “الدوران الدوري” أو “تعطيل القناة المعيبة” إلى هذه الإضافة لأنني مشغول بمهام أخرى.

بصراحة (خطأي)، لست من محبي برمجة EmberJS (في عام 2020، غير متأكد من عام 2021، لكنني أشك في ذلك…)، لذا لم أضف أي ميزات واجهة مستخدم جديدة في هذا الإصدار، آسف على ذلك. أنا أكثر اهتمامًا ببرمجة جانب الخادم، وإدارة الأنظمة، وميزات الأمن السيبراني (جانب الخادم)، كقاعدة عامة؛ لكن هذا أنا فقط. لا تتردد في تقديم طلب دمج (PR) لرمز واجهة مستخدم Ember جديد أو انسخ المشروع وعدل عليه! إذا قررت إضافة مسار جديد لعرض قنوات SMTP الجديدة هذه، فسأفعل ذلك على الأرجح باستخدام Bootstrap و jQuery، لأنني (كما ذُكر) لست متحمسًا حاليًا لبرمجة EmberJS.

تغيير أو إضافة طرق إضافية

تكوين الإضافة الحالي لـ “قنوات الأولوية” ذاتي بالكامل، وأنا منفتح على تغيير هذه الطرق عن طريق إضافة طرق فئات مراسلة أخرى إلى “قنوات الأولوية”. من السهل العثور علي على الإنترنت :slight_smile:

انظر أيضًا

الملاحظات الهامشية

  1. المجالات الأساسية الثلاثة للأمن السيبراني هي كالتالي:

    1. التوافر
    2. السرية
    3. النزاهة

تُصمم هذه الإضافة لتحسين مجال “التوافر” في الأمن السيبراني لـ Discourse عن طريق نقل حركة مرور SMTP منخفضة الأولوية (الرسائل الملخصة) خارج قناة SMTP الافتراضية؛ ونقل حركة مرور SMTP ذات “الأولوية الأعلى” إلى قناة SMTP ذات حركة مرور منخفضة (بدون رسائل ملخصة، وبدون إشعارات مستخدم عادية).

دعم الإضافة

أفضل طريقة للتواصل معي بشأن الدعم أو طلبات الميزات هي النشر في هذا الموضوع المرافق:

6 إعجابات

شكرًا لك على الإضافة. ستكون مفيدة بشكل خاص لل منتديات التي تضم عددًا كبيرًا من الأعضاء

إعجاب واحد (1)

شكرًا لك @ozkn

يسعدني أن أساهم، ولو بشكل بسيط، في مجتمع مستخدمين Discourse الرائع هذا.

إعجاب واحد (1)