تحسين تحليل البريد الإلكتروني لـ Mailman

لقد لاحظنا في عدد قليل من المنتديات التي تستخدم Discourse لـ نسخ قائمة بريدية عامة أن بعض المشاركات تُنسب إلى المستخدم الخطأ:


من: [ruby-talk:444110] exif - photo metadata - ruby-talk - Ruby Mailing List Mirror

في هذه الحالة، قام Discourse أولاً بإنشاء مستخدم بالاسم “Austin Ziegler via ruby-talk” بعنوان بريد إلكتروني مطابق لعنوان إرسال القائمة، وهذا ما يظهر لكل المشاركات كهذه.


من: https://community.nanog.org/t/txt-att-net-outage/56955/4

في هذه الحالة، قام Discourse أولاً بإنشاء مستخدم بالاسم “Mailman” بعنوان بريد إلكتروني مطابق لعنوان إرسال القائمة.

بعد التحقيق، فإن تحليل البريد الخاص بنا غير صحيح في بعض الأحيان. السبب هو أنه للامتثال لـ DMARC، سيقوم Mailman في بعض الأحيان بتغيير رأس “From” إلى نفسه ووضع المرسل الأصلي في “reply-to”:

To: Ryan Davis via ruby-talk
X-MailFrom: tom@tomsdomain.com
X-Mailman-Version: 3.3.3
Reply-To: Ruby users <ruby-talk@ml.ruby-lang.org>
From: Tom Reilly via ruby-talk <ruby-talk@ml.ruby-lang.org>
Cc: Tom Reilly <tom@tomsdomain.com>
To: Jared Mauch <jared@jaredsdomain.com>
X-BeenThere: nanog@nanog.org
X-Mailman-Version: 2.1.39
From: Owen DeLong via NANOG <nanog@nanog.org>
Reply-To: Owen DeLong <owen@owensdomain.com>
Cc: nanog <nanog@nanog.org>

ولكنه يتركه عندما لا يحتاج إلى التغيير:

To: Jon Lewis <jlwis@jonsdomain.org>
X-BeenThere: nanog@nanog.org
X-Mailman-Version: 2.1.39
From: William Herrin <bill@billsdomain.us>
Cc: nanog@nanog.org

يبدو أن هناك العديد من الخيارات المختلفة للسلوك هنا، لذلك نود التوصل إلى خوارزمية لتحليل ما يرسله Mailman بشكل صحيح في كل حالة.

هناك خيارات أخرى محتملة، على سبيل المثال، يمكن لـ Mailman نشر الرسالة غير المعدلة مباشرة إلى مثيل Discourse، ولكن هذه أكثر تعقيدًا في الإعداد وقد لا تكون متاحة للجميع.

إليك بداية واحدة:

  • إذا كان إصدار mailman < 3
    • إذا كان أي من:
      • عنوان From يطابق List-Id
      • عنوان From يطابق List-Post
      • عنوان From يطابق X-BeenThere
    • فاستخدم Reply-To كـ From
  • إذا كان إصدار mailman >= 3
    • إذا كان X-MailFrom موجودًا
      • استخدم الاسم من رأس From، مع تجريد /via .*/
      • استخدم البريد الإلكتروني من X-MailFrom

أيضًا، عندما ينتهي كل هذا، هل من الممكن وجود مهمة rake لإعادة معالجة المشاركات الحالية (ربما فقط تلك التي تطابق المستخدم الخاطئ) بهذا المنطق الجديد؟

4 إعجابات

الخلاصة هي أنني توصلت إلى خوارزمية تعمل مع جميع الإصدارات (التي رأيتها منتشرة).

  1. احصل على عنوان البريد الإلكتروني لقائمة المراسلات من ترويسة List-Post أو X-BeenThere.
  2. سيكون بريد المرسل في أي من الترويسات التالية: From أو Reply-To أو X-MailFrom أو X-Original-From. لذا قم بالتكرار فوق هذه الترويسات وأرجع أول ترويسة لا تتطابق مع عنوان البريد الإلكتروني لقائمة المراسلات.
3 إعجابات

يبدو أن هذا يعمل بشكل رائع! :+1:
لقد استخدمت rake emails:fix_mailman_users لإصلاح جميع المشاركات التي تم إرجاعها إلى المستخدم الخطأ على https://rubytalk.org/

إعجابَين (2)

تم إغلاق هذا الموضوع تلقائيًا بعد يومين من آخر رد. لم يعد يُسمح بالردود الجديدة.