دعم IMAP لصناديق البريد الجماعية

:rotating_light: سنقوم بإزالة دعم IMAP في Discourse. راجع هذا المنشور للحصول على التفاصيل: IMAP support for group inboxes - #39 by martin . :rotating_light:


يسعدنا تقديم النسخة التجريبية (Alpha) من دعم IMAP لصناديق الوارد الجماعية. تتيح هذه الميزة إدخال بيانات اعتماد IMAP وإعداداتها على أساس كل مجموعة على حدة لمزامنة صناديق الوارد الجماعية مع صندوق بريد إلكتروني. :email:

:warning::warning: :warning:

هذه ميزة في مرحلة تجريبية (Alpha)، وبالتالي فهي غير مكتملة أو مصقولة بنسبة 100%. من المرجح جدًا أن تكون معطلة، ولا نقوم بصيانتها حاليًا أو استخدامها في الإنتاج. استخدمها على مسؤوليتك الخاصة!

:warning: :warning: :warning:

الفوائد

  • يمكن لمجموعتك البدء فورًا باستخدام صناديق الوارد في Discourse، لأن جميع بريدك الإلكتروني الحالي سيتم مزامنته! :running_woman:
  • يمكن لمجموعتك مزامنة رسائلها بين Discourse ومزود البريد الإلكتروني الخاص بك، بحيث لا توجد نقطة فشل واحدة. يمكن للأشخاص الرد من حساب البريد الإلكتروني أو من داخل Discourse، وستتم مزامنة كل شيء :zap:
  • لن تحتاج بعد الآن إلى إعداد قواعد إعادة توجيه غريبة من مزود البريد الإلكتروني الخاص بك إلى صندوق الوارد الوارد في Discourse. :arrow_right:
  • سيتم مزامنة تسميات البريد الإلكتروني مع وسوم Discourse لتبقى الأمور منظمة ومرتبة :card_file_box:
  • ستقوم بالرد على الأشخاص الذين يرسلون بريدًا إلكترونيًا إلى مجموعتك من عنوان البريد الإلكتروني الذي قمت بإعداده، حتى لو قمت بالرد من Discourse. لا مزيد من الارتباك! :relieved:

الميزات

  • سيتم مزامنة جميع الرسائل الواردة والصادرة بين خادم IMAP وDiscourse، مع إنشاء المواضيع ورسائل الرد المناسبة بناءً على تحليل البريد الإلكتروني. يمكن إنشاء الردود من Discourse أو من خادم IMAP وسيتم مزامنة كل شيء!
  • يمكن الرد على الرسائل الإلكترونية من صندوق الوارد الجماعي في Discourse أو من حساب البريد الإلكتروني.
  • سيتم إنشاء الوسوم المطبقة على موضوع Discourse كتسميات (Labels) وتطبيقها على البريد الإلكتروني على خادم IMAP (وهذا يعتمد على المزود).
  • سيتم أرشفة الرسائل الإلكترونية المؤرشفة على خادم IMAP في صندوق الوارد الجماعي.
  • سيتم أرشفة مواضيع الرسائل الخاصة الجماعية المؤرشفة في Discourse على خادم IMAP.
  • سيتم حذف المواضيع في صندوق الوارد الجماعي عند حذف الرسائل الإلكترونية على خادم IMAP.
  • سيتم حذف مواضيع الرسائل الخاصة الجماعية على خادم IMAP عند حذفها في Discourse.
  • ستحتوي الرسائل الإلكترونية المرسلة من المجموعات المفعلة لهذه الميزة على عنوان “رد إلى” (Reply-to) مضبوط على نفس اسم مستخدم البريد الإلكتروني الذي تم إعداده في إعدادات IMAP.

البدء

أولاً، هناك بعض إعدادات الموقع التي يجب عليك تكوينها قبل إعداد هذه الوظيفة في مجموعة.

  • يجب تفعيل enable imap و enable smtp معًا. يُستخدم IMAP للمزامنة مع خادم البريد الخاص بك، ويُستخدم SMTP لإرسال رسائل البريد الإلكتروني من خادم البريد الخاص بك.
  • tagging enabled و allow staff to tag pms - يجب تفعيل كليهما، حيث تطبق مزامنة التسميات الوسوم على الرسائل الخاصة.
  • enable imap write - يجب تفعيله إذا كنت تريد أن تنعكس التغييرات التي تتم في Discourse على خادم البريد الخاص بك (مثل الوسوم، وأرشفة المواضيع، وحذف المواضيع).
  • enable imap idle - يسمح لنا بتلقي تحديثات مباشرة من خادم البريد الخاص بك IF كان خادم البريد الخاص بك يدعم IDLE. هذا يسرع بشكل كبير من انعكاس التغييرات في مزود البريد الإلكتروني الخاص بك إلى Discourse. يجب عليك تشغيل هذا الخيار (على سبيل المثال، يدعم Gmail ذلك). إذا كنت تريد جميع التفاصيل الدقيقة، يمكنك قراءة المزيد عنها في RFC الخاصة بـ IDLE.
  • imap polling period mins - إذا لم يتم دعم IDLE، فهذا هو عدد الدقائق التي ننتظرها قبل التحقق من خادم IMAP بحثًا عن التغييرات. وهو أيضًا الوقت الذي ننتظره بين إرسال التغييرات إلى خادم IMAP من Discourse إذا كان enable imap write مفعلاً. الحد الأدنى هو دقيقة واحدة.

يمكن ترك هذه الإعدادات على قيمها الافتراضية، وتعديلها إذا واجهت مشاكل في المزامنة:

  • imap polling old emails - الحد الأقصى لعدد رسائل البريد الإلكتروني القديمة (المعالجة) التي يتم تحديثها في كل مرة يتم فيها استجواب صندوق IMAP (0 للكل).
  • imap polling new emails - الحد الأقصى لعدد رسائل البريد الإلكتروني الجديدة (غير المعالجة) التي يتم تحديثها في كل مرة يتم فيها استجواب صندوق IMAP.
  • imap batch import email - الحد الأدنى لعدد رسائل البريد الإلكتروني الجديدة التي تثير وضع الاستيراد (يعطل تنبيهات المنشورات).

إذا كنت تريد مزامنة التسميات/الوسوم مع خادم IMAP، فيجب عليك تفعيل إعدادات الموقع tagging enabled و allow staff to tag pms.

بعد ذلك، يجب عليك الدخول إلى المجموعة التي تريد مزامنتها مع خادم IMAP الخاص بك وملء الإعدادات.

ستكون هذه الإعدادات خاصة بالمزود، راجع أدناه للحصول على مزيد من التفاصيل. بمجرد إدخال الإعدادات وبيانات الاعتماد، انقر فوق “حفظ التغييرات” وسنتحقق من صحة بيانات الاعتماد مقابل خوادم مزود IMAP. إذا نجح ذلك، سيتم ملء قائمة صناديق البريد، وعليك اختيار الصندوق الذي تريد مزامنته (الإرشادات حول هذا الأمر خاصة بالمزود أيضًا):

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

أخيرًا، داخل ملف app.yml الخاص بك، ستحتاج إلى إضافة DISCOURSE_ENABLE_EMAIL_SYNC_DEMON: true داخل قسم env وتشغيل ./launcher rebuild. هذا سيمكن العامل الخلفي من البدء والبدء في مزامنة رسائل البريد الإلكتروني! :fireworks:

معلومات خاصة بالمزود

Gmail

  • :warning: يجب عليك إنشاء كلمة مرور تطبيق (app password)، وإلا ستحتاج إلى تشغيل “الوصول إلى التطبيقات الأقل أمانًا” والذي تتخلص منه Google في النهاية على أي حال. استخدم هذه الكلمة بدلاً من كلمة مرور حساب Gmail الخاص بك في إعدادات IMAP. راجع Sign in with app passwords - Gmail Help للحصول على مزيد من التفاصيل. :warning:
  • تأكد من استخدام هذه الإعدادات لـ SMTP و IMAP:
    • منفذ IMAP: 987
    • منفذ SMTP: 587
    • خادم IMAP: imap.gmail.com
    • خادم SMTP: smtp.gmail.com
    • استخدم SSL لكل من SMTP و IMAP
  • يُنصح بشدة (سيصبح قريبًا ميزة في واجهة المستخدم) بأن تقوم فقط بتحديد صندوق البريد “[Gmail]/All Mail” للمزامنة معه.
  • لا نقوم بحذف رسائل البريد الإلكتروني في Gmail فورًا، بل ننقلها فقط إلى صندوق المهملات عندما يتم حذف الموضوع في Discourse. ستأخذ وظيفة الحذف “30 يومًا” داخل Gmail زمام المبادرة من هناك.
  • ستؤدي الوسوم المطبقة على مواضيع Discourse إلى إنشاء تسميات (Labels) في Gmail وتطبيقها على سلاسل البريد الإلكتروني. التسميات في Gmail هي أيضًا صناديق بريد IMAP!

القيود

هذه ميزة في مرحلة تجريبية (Alpha)، وبالتالي فهي غير مكتملة أو مصقولة بنسبة 100%. لذلك، تنطبق القيود التالية حاليًا:

  • فقط Gmail مدعوم حاليًا كمزود IMAP. لدينا بعض وظائف IMAP العامة ولكن لا يُضمن عملها. Outlook Online هو هدفنا التالي الكبير للدعم.
  • إعادة إحياء رسائل البريد الإلكتروني المحذوفة من سلة مهملات Gmail وعكس حالتها في Discourse غير مستقر حاليًا.
  • :warning: لا يُنصح بتغيير صندوق المزامنة بعد مزامنة رسائل البريد الإلكتروني بالفعل، وقد يؤدي ذلك إلى العديد من المشاكل الغريبة. :warning:
  • يمكن مزامنة صندوق بريد واحد فقط لكل مجموعة.
  • التواصل بين المجموعات منطقة غير مستكشفة ولن يعمل بشكل جيد (على سبيل المثال، إرسال بريد إلكتروني إلى team@yoursite.com من support@yoursite.com إذا تم إعداد كل من هذه الرسائل لمجموعة مختلفة).

قد تكون هناك أيضًا مفاجآت خفية أخرى وحواف خشنة حيث أن هذه ميزة تجريبية.

ملاحظات & خارطة الطريق

نود الحصول على ملاحظات من أي شخص يستخدم هذه الميزة مع Gmail. سأكون أنا الشخص المسؤول عن معالجة أي أخطاء/مشاكل. تصحيح الأخطاء صعب قليلاً في الوقت الحالي لكنني أعمل على ذلك!

الأمور التالية التي سأعمل عليها:

  • تحسين تصحيح الأخطاء لتسهيل عرض سجلات IMAP وفهم الأشياء التي تذهب بشكل خاطئ.
  • تحسين واجهة البريد الإلكتروني للمجموعة للحد من صناديق البريد التي يمكن اختيارها من Gmail ولردع/منع تغيير صناديق البريد.
  • التحقق لمنع استخدام تفاصيل IMAP نفسها لمجموعات متعددة.
  • ربما تحسينات في كيفية تخزين إعدادات IMAP الجماعية وتجربة مستخدم أفضل للتحقق من صحة بيانات الاعتماد.
  • دعم Outlook.

حاليًا، بينما نعمل على حل المشاكل، هذه الميزة غير متاحة لعملائنا المستضافين.

شكر خاص :pray:

كل من @dan و @j.jaffeux هما المساهمان الرئيسيان في هذه الميزة الضخمة التي تم العمل عليها لفترة طويلة. بدون عملهما الرائع، لم أكن لأتمكن من جلب الميزة إلى هذه النقطة وإعلان هذا الخبر :tada:.

41 إعجابًا

هذه أخبار رائعة ومخيفة في آن واحد. دعني أشرح. أولاً، من الأخبار الجيدة رؤية تكامل IMAP مع مجموعات Discourse، حيث يوفر هذا التكامل عددًا من الحلول المفيدة لهوية المجموعة (باستخدام العنوان الأصلي الصحيح)، ويسهل استخدام عدة مستخدمين لنفس حساب IMAP (وهو أمر لا يدعمه النظام بشكل جيد بشكل أصلي، مثل عدم وجود حالات قراءة مشتركة)، كما يفتح الطريق لصناديق الوارد الخاصة بـ ActivityPub… لكن الأمر مخيف لأن تطبيقه يفضل عمالقة البريد الإلكتروني الذين حولوا خدمة موزعة إلى نظام مركز إلى حد كبير. أفهم جاذبية العمل مع مقدمي الخدمات على نطاق واسع، لكنني أتمنى أن يُفضل معيار IMAP على الإضافات الخاصة بمقدم الخدمة، بحيث يتم دعم أي مزود بريد إلكتروني بمجرد وصول هذه الميزة إلى مرحلة الاختبار التجريبي.

تهانينا على تحقيق هذا الأمر.

10 إعجابات

هناك سبب كبير يجعل هذه الميزة تُعتبر “ألفا” :slight_smile:

المشكلة مع بروتوكول IMAP، كما لاحظت من الجانب، هي كمية “الفسحة للتفسير” التي نضطر للتعامل معها.

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

ندعو بشدة إلى تقديم طلبات دمج (PRs) لجعل هذا يعمل بشكل أفضل مع مزودين آخرين، وفي غيابها، ومع مرور الوقت وملاحظتنا لرغبة متزايدة في استخدامه مع مزودين آخرين، سنقوم ببناء الدعم اللازم.

17 إعجابًا

هذه ملاحظة عادلة، وكما قال @sam، ركزنا أولاً على Gmail لأننا نستخدمه، لذا فهو الأكثر صلة بنا. ومع ذلك، أعتقد أن مزودنا الأساسي “العام”، رغم أنه بالتأكيد ليس متوافقًا بنسبة 100% مع RFC وليس مكتمل الميزات، يتبع بروتوكول IMAP بدقة كبيرة… انظر https://github.com/discourse/discourse/blob/master/lib/imap/providers/generic.rb. أعتقد أن الإضافات الوحيدة التي سيحتاجها هي معالجة خاصة للأرشفة والحذف. بالنسبة للحذف، نقوم حاليًا فقط بوضع علامة \Deleted وإرسال أمر EXPUNGE، لكنني أعرف أن بعض عملاء البريد الإلكتروني يسمحون لك باختيار القيام بذلك أو إرسال العناصر إلى مجلد المهملات أولاً ثم EXPUNGE وما إلى ذلك. لست متأكدًا من المعيار الخاص بالأرشفة في IMAP. لدينا فئة مزود محددة لـ Gmail تتجاوز بعض هذه الطرق العامة.

إذا كان لديك أي اقتراحات حول خوادم أو مزودي IMAP “عامة” أخرى يمكنني الاختبار عليها، فسيكون ذلك مساعدًا عظيمًا، حيث إن لـ Gmail معالجتها الخاصة الفريدة للأشياء وامتدادات IMAP الخاصة بـ Gmail.

أيضًا، وكما قال سام، فإن أي طلبات سحب (PRs) للتحسينات هي موضع ترحيب، وإلا فإننا سنستجيب للطلب، وأتوقع أن يكون Outlook هو التالي كحالة استخدام رئيسية أخرى للمنظمات التي ترغب في هذا النوع من الميزات (لدى Outlook قواعد فريدة خاصة به… مثل كون الأرشفة مجلدًا/صندوق بريد وعدم دعم الملصقات).

12 إعجابًا

يبدو الأمر مثيرًا جدًا! لقد انتقلت شركتنا مؤخرًا من خادم البريد الخاص بنا إلى G-Suite، وستجعل هذه التكاملية من السهل علينا الرد على استفسارات العملاء وإدارة متتبعات التقدم لدينا. لدي استفسار واحد فقط موجه إلى @martin. لم يتضح لي ما إذا كان سيستخدم بروتوكول SMTP الخاص بـ Gmail للرد على الرسائل الواردة في صندوق الوارد الجماعي، أم أنه سيستخدم بروتوكول SMTP الجماعي المهيأ لإرسال رسائل البريد الإلكتروني باسم Discourse؟ أرى أن الإضافة تذكر بروتوكول SMTP الخاص بـ Gmail أيضًا، لكنني ما زلت أحتاج إلى توضيح بشأن هذا الأمر.

6 إعجابات

يتم استخدام خادم SMTP الخاص بـ Gmail لإرسال الردود، لأنك ترسل الردود باسم حساب البريد الإلكتروني المستخدم لمزامنة IMAP! سأضيف ملاحظة بهذا المعنى في المنشور الأصلي للتوضيح.

7 إعجابات

هذا في الواقع فكرة عبقرية. أستطيع التفكير في العديد من حالات الاستخدام لهذا. أطيب التهاني @martin @dan @j.jaffeux :raising_hands:

9 إعجابات

تحديث سريع هنا. قمت بدمج هذين طلبي السحب (PRs) الأسبوع الماضي. أولاً، الإصلاح بحيث لا يلزم تمكين وضع العلامات لأغراض الأرشفة والحذف:

ثانياً، سأقوم الآن بتسجيل جميع سجلات IMAP في قاعدة البيانات لتسهيل الفحص. سيتم تشغيل مهمة يومياً لحذف السجلات الأقدم من 5 أيام:

11 إعجابًا

هذا لطيف جدًا! شكرًا لك.

يجب أن أقول، لقد اضطررت إلى إنشاء كلمة مرور تطبيق في حساب بريد Google الخاص بي حتى يقبل discourse اسم المستخدم وكلمة المرور الخاصين بي.

5 إعجابات

هل قمت بتفعيل المصادقة الثنائية من جانب Google؟ إذا كان الأمر كذلك، فهذا إجراء قياسي.

إعجابَين (2)

نعم. أعتقد أنه كان مطلوبًا لكي أتمكن من إنشاء كلمة مرور التطبيق (على الرغم من أنني لا أتذكر ذلك على وجه اليقين)

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

هذا مذكور في المنشور الأصلي :wink: وإلا ستضطر إلى خوض تعقيدات غريبة لجعل حساب Gmail الخاص بك يقبل “التطبيقات الأقل أمانًا”. في مرحلة ما، سنحتاج إلى دعم OAuth من جوجل، حيث يبدو أن هذا هو الاتجاه العام.

4 إعجابات

آه! هل ذكرتُ أن مهارات فهمي للقراءة ضعيفة؟ :woozy_face:

5 إعجابات

لا بأس! هذه نقطة مهمة، لذا قمت بنقلها إلى أعلى قائمة Gmail وأضفت بعض مؤشرات التحذير. شكرًا لك على محاولة إخبار الآخرين بهذا الأمر لتوفير عليهم المتاعب :slight_smile:

6 إعجابات

أحاول فهم سبب فشلي في مزامنة رسائل البريد مع خادم Dovecot IMAP (للأسف دون خبرة في Ruby أو Rails).

عند قراءة imap_sync_logs، يتعطل برنامج الاستيراد في حلقة تكرارية:

UIDVALIDITY = 1612565899 لا يطابق المتوقع 0، يتم إبطال ذاكرة التخزين المؤقت لـ IMAP وإعادة مزامنة رسائل البريد لصندوق الوارد INBOX

لذلك أتساءل، ألا ينبغي تحديث @group.imap_uid_validity في هذه الحالة:

بعد التحديث اليدوي لهذه القيمة، يتعطل برنامج الاستيراد في حلقة تكرارية أخرى.

لا يدعم Dovecot 'LABELS' في:

مما يؤدي إلى خطأ Net::IMAP::BadResponseError، والذي للأسف لا يظهر في السجلات.

والآن أتساءل:

  • ما إذا كان دعم Dovecot للعلامات المخصصة كافياً للمزامنة ثنائية الاتجاه مع Discourse
  • كيفية اكتشاف Dovecot في lib/imap/providers/detector.rb
  • كيفية محاكاة ميزة الملصقات في مورد Dovecot

5 إعجابات

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

7 إعجابات

حسب فهمي، فإن 'LABELS' هي ميزة غير قياسية في Gmail.
أود فهم الفرق بين IMAP الخاص بـ Google و IMAP القياسي.

هذا ملخصي حتى الآن:

IMAP القياسي IMAP الخاص بـ Google
توجد الرسائل المؤرشفة في مجلدات فرعية توجد جميع الرسائل في مجلد واحد
الرسائل المؤرشفة تفتقد إلى التسمية “\INBOX”
تُخزن العلامات المخصصة مع العلامات النظامية تُخزن العلامات المخصصة كتسميات

هل سيكون كافياً:

  • محاكاة التسميات في IMAP القياسي عن طريق تقسيم العلامات إلى علامات نظامية وعلامات مخصصة
  • معالجة email_is_archived من قبل المزود (على سبيل المثال، إضافة واختبار علامة “archived”)

لجعل مزامنة IMAP القياسية تعمل؟

سيؤثر هذا على الأسطر التالية:

يبدو لي أن هذا السطر غريب:

ستُستبدل جميع العلامات النظامية بوسوم discourse.
هل يتعامل هذا بشكل جيد مع جميع علامات IMAP (\Answered, \Deleted, \Draft, \Flagged, \Recent و \Seen / $Forwarded, $MDNSent, $SubmitPending و $Submitted)?

إعجابَين (2)

أعدت النظر في هذا الأمر بعد انقطاعٍ عن الموضوع.

لم أستطع معرفة كيفية جعل رأسية reply-to تعمل بشكل صحيح. يمكنني إعداد مجموعة للمزامنة مع حساب Gmail معين، لكن عند محاولة الرد عبر البريد الإلكتروني، تُضبط عنوان reply-to على عنوان الإشعار المهيأ في Discourse وليس عنوان IMAP.

هل هناك شيء قد فاتني؟

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

لقد جربت ذلك مع مزود البريد الإلكتروني GoDaddy لكن دون نجاح. مع Gmail يعمل بشكل ممتاز، ولكن للأسف نرغب في استخدام نطاقنا الخاص. هل هناك أي تحديثات جاهزة للاستخدام الفعلي؟

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

يمكنك استخدام نطاقك الخاص مع Gmail (مقابل رسوم)، على سبيل المثال.

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