عدم اكتشاف رسائل البريد المرتد

أحاول معرفة كيفية قيام discourse بتنظيف قوائم البريد الإلكتروني، وتحديداً رسائل البريد الإلكتروني المرتدة. يستخدم الموقع خادم smtp خاصًا لإرسال رسائل البريد الإلكتروني ولكن الاستجابة تم تعيينها للعودة إلى عنوان بريد إلكتروني في gmail للوصول عبر POP بواسطة discourse.

لذلك أرى رسائل البريد الإلكتروني المرتدة في لوحة تحكم رسائل البريد الإلكتروني المستلمة.

ولكن تحت لوحة تحكم رسائل البريد الإلكتروني المرتدة، لا يوجد شيء.

عندما أنظر إلى سجلات أخطاء Discourse، أرى أنها تكتشف رسالة بريد إلكتروني مرتدة.

لا يمكن معالجة البريد الإلكتروني: Email::Receiver::BouncedEmailError

Delivered-To: xxx.yyy@gmail.com
Received: by 2002:xxx:7022:911:xx:73:xxx:f96 with SMTP id xxx7csp1115046dlb;
Thu, 25 Jan 2024 12:03:33 -0800 (PST)
X-Google-Smtp-Source: AGHT+IEagzW8QOUgAyfOxU9wYaox/wuiL/wNqWhvftUB4uO/85r9H/55+FnfT6NrSTkLI5kfj+Vy
X-Received: by 2002:xxx:620a:4xxx:b0:xxxx:9265 with SMTP id br34-xxx8ba09265mr280168qkb.77.17062130xxx;
Thu, 25 Jan 2024 12:03:33 -0800 (PST)
Return-Path: <>
Received: from xxx.com (xxx.com. [207.xxx.xxx.xxx])
by mx.google.com with ESMTPS id bi4-xxx0b00783c84e9ef8si590747qkb.206.xxx.01.xx.12.03xxx
for xxx.yyy@gmail.com
(version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);
Thu, 25 Jan 2024 12:03:33 -0800 (PST)
Received-SPF: none (google.com: xxx.com does not designate permitted sender hosts) client-ip=207.xxx.xxx.xxx;
Authentication-Results: mx.google.com;
dkim=pass header.i=@xxx.co.nz header.s=alpha header.b=biFVvXep;
arc=fail (signature failed);
spf=none (google.com: xxx.com does not designate permitted sender hosts) smtp.helo=xxx.com;
dmarc=pass (p=NONE sp=REJECT dis=NONE) header.from=xxx.co.nz
Received: from xxx.co.nz (xxx.co.nz [210.xxx.xxx.5x])
by xxx.com (Postfix) with ESMTP id 4DD66xxx8E3
for xxx@zzz.com; Thu, 25 Jan 2024 20:03:28 +0000 (UTC)
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zzz.com;
s=dkim; t=1706213008;
h=from:from:reply-to:subject:subject:date:date:message-id:message-id:
to:to:cc:mime-version:mime-version:content-type:content-type:
dkim-signature;

إذن السؤال هو:

  1. لماذا لا يقوم discourse بتمييز رسائل البريد الإلكتروني المرتدة على أنها مرتجعة وكيف يمكنني تصحيح ذلك؟

يستخدم Discourse reply_key لربط الارتدادات بالرسائل المرسلة. عندما يرسل Discourse بريدًا، فإنه يستخدم قيمة reply_by_email_address كمرسل مظروف SMTP.
تحتاج إلى التأكد من أن reply_by_email_address الخاص بك يتضمن {reply_key} حتى يتمكن مثيلك من ربط الارتدادات بالبريد المرسل الصحيح.
على سبيل المثال، هنا في meta تم تعيينه على incoming+%{reply_key}@meta.discoursemail.com ويتم تسليم أي شيء تم تعيينه إلى هذا العنوان إلى هذا المثيل.

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

شكراً على الرد. للأسف اضطررت إلى إيقاف تشغيل reply_key من الرد على البريد الإلكتروني لأن خادم البريد المرحل لدينا لا يتعرف على العنوان +. هل هناك أي خيار آخر؟

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

لا ينبغي أن يكون خادم ترحيل البريد الإلكتروني الخاص بك مهمًا، فقط الخادم النهائي حيث يوجد صندوق البريد. أجزاء محلية من البريد الإلكتروني غير شفافة لأي خوادم وسيطة.

أليس هو Gmail وفقًا لـ:


لست متأكدًا مما إذا كان لدينا آلية أخرى للكشف الموثوق عن الارتدادات.

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

حسنًا للتوضيح، خادم نطاق SMTP الوجهة الذي يستقبل البريد المرتد لا يتعرف على + في العنوان، لذلك يقوم فقط بإعادة توجيه رسائل البريد الإلكتروني بناءً على حقل To إلى عنوان Gmail الذي تلتقطه Discourse عبر POP. هذا يعني إذا كان حقل To يتضمن reply_key فلن يقوم بإعادة توجيه هذا البريد الإلكتروني إلى حساب Gmail الذي تستخدمه Discourse.

إذن لا يمكنني وضع reply_key في عنوان البريد الإلكتروني، هل يمكن وضعه في مكان آخر؟ في حقل الموضوع أو نص الرسالة أو في مكان ما يمكن لـ Discourse تحليله؟

سيساعد كثيرًا إذا كتبت ما كنت تستخدمه بالفعل للإعدادات، حتى لو تم إخفاء هويته قليلاً.

قد ترغب أيضًا في البحث في تعيين alternative_reply_by_email_addresses.

لا أعتقد ذلك.

إذا أمكن، بالنسبة لإعدادك، أوصي بشيء مثل:

  • تعيين reply_by_email_address إلى inbound+%{reply_key}@forum.hostname
  • تكوين خادم بريد لاستقبال البريد لـ forum.hostname وتسليمه كله إلى the.gmail.account@gmail.com

هنا لا يحتاج خادم البريد الوسيط إلى فهم معالجة الزائد، بل يحتاج فقط إلى إعادة توجيه كل شيء للنطاق.

بالتأكيد

إعداد تحليل البريد الإلكتروني:

إعداد إرسال البريد الإلكتروني:

  • البريد الإلكتروني المرسل بواسطة Discourse يأتي من discourse@xxx.com عبر خادم SMTP مخصص تم إعداده لـ Discourse (باستخدام عنوان نطاق Discourse).
  • أي ردود أو عند ارتداد البريد الإلكتروني، يقوم خادم SMTP الخاص بالنطاق بإعادة توجيه البريد الإلكتروني إلى discourse.xxxx@gmail.com. لا يمكن لخادم SMTP الخاص بالنطاق هذا التعرف على معالجة +، لذلك إذا قمت بتضمين reply_key في عنوان البريد الإلكتروني للرد، فسيتم إسقاطه بواسطة خادم SMTP الخاص بالنطاق. يمكنني فقط تعيين قواعد لإعادة توجيه عناوين البريد الإلكتروني الواردة المنفصلة/الفريدة.
  • يواصل منتدى Discourse بعد ذلك استخدام POP عبر GMail للوصول إلى تلك الردود المعاد توجيهها/رسائل الارتداد وتحليلها.

هل هذا يساعد؟

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

ومع ذلك، لدي توضيح هنا - أشبه بتناقض في كيفية عمل Discourse:

  1. عندما يرد مستخدم على منشور بريد إلكتروني، فإنه يصل بشكل صحيح - تبدو الردود تعمل بشكل مثالي حتى بدون أي {reply_key} تم تكوينه صراحة في أي مكان (انظر لقطات الشاشة أعلاه).
  2. ومع ذلك، عندما يرتد بريد إلكتروني، يصنفه Discourse تحت تم الاستلام بدلاً من تم الارتداد.
  3. تظهر سجلات الأخطاء أن شيئًا ما في Discourse يتعرف على أنه بريد إلكتروني مرتد (انظر سجل خطأ مشاركتي الأولى). لذا، إذا كان شيء ما في Discourse يتعرف على أنه بريد إلكتروني مرتد، فلماذا لا يظهر تحت تم الارتداد بدلاً من تم الاستلام؟

إذًا، لماذا عندما يرد مستخدم على منشور تتم معالجته بشكل صحيح بواسطة Discourse ولكن ليس البريد الإلكتروني المرتد (ويبدو أيضًا أن هناك انفصالًا بين سجلات الأخطاء ولوحة المعلومات للبريد الإلكتروني المرتد). هل فاتني شيء في التكوين؟

لقد حاولت أيضًا تعيين إعدادات عنوان البريد الإلكتروني للرد في discourse إلى discourse.xxx+%{reply_to}@gmail.com ولكن عندما يتم تسليم البريد الإلكتروني، يبدو أن Gmail يعتقد أن النطاق yyy.com (نطاق SMTP الخاص بـ discourse) يحاول انتحال نطاق Gmail وينتهي به الأمر بتمييزه كرسائل غير مرغوب فيها. يبدو أن تعيين نطاق رد مختلف عن نطاق المرسل يؤدي إلى فشل DMARC و SPF.

ARC-Authentication-Results: i=1; mx.google.com;
       spf=softfail (google.com: domain of transitioning discussion.xxx+verp-b9c40db917ca04993dd3433cc9748518@gmail.com does not designate y.y.y.y as permitted sender) smtp.mailfrom=discussion.xxx+verp-b9c40db917ca04993dd3433cc9748518@gmail.com;
       dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=yyy.com
Return-Path: <discussion.xxx+verp-b9c40db917ca04993dd3433cc9748518@gmail.com>

لقد قمت بتعطيل find related posts with key (آمل أن تكون قد قرأت التحذير) وبالتالي يستخدم Discourse رأس البريد الإلكتروني in-reply-to لتحديد الموضوع/المنشور الذي يجب أن يشير إليه الرد.

لا يمكنه فعل ذلك للبريد المرتد - يحتاج Discourse إلى معرفة الرسالة المحددة التي ارتدت وهذه المعلومات مضمونة فقط في مكان واحد - العنوان To: (الذي يأتي من عنوان envelope-from للرسالة الأصلية).

لكي يعمل هذا، عندما يرسل Discourse رسالة، يحتاج إلى تلقي الرد من العنوان الذي جاء منه. يبحث Discourse في رأس To: عن هذا (وليس envelope-to).

يقوم بانتحال نطاق gmail

إذا كنت تريد إرسال بريد إلكتروني من عنوان gmail، فأنت بحاجة إلى إرساله عبر خوادمهم. لكنهم لا يحبون ذلك (https://meta.discourse.org/t/setting-up-discourse-using-gmail-smtp-settings/291749/2?u=supermathie).

لا يبدو أنك قمت بتكوين DKIM لـ yyy.com؛ يجب عليك القيام بذلك. إذا قمت بذلك بشكل صحيح، يجب أن ينجح DMARC.

إعجابَين (2)

نعم، تم تكوينه، والبريد الإلكتروني “المرسل” بواسطة Discourse عبر خادم SMTP الخاص بـ yyy.com يمر عبر SPF و DKIM و DMARC دون مشاكل (على الأقل من صفحة “إرسال بريد إلكتروني تجريبي” في لوحة تحكم المسؤول).

تحدث هذه المشكلة إذا قمت بتعيين عنوان Gmail كـ reply_by_email_address إلى عنوان gmail.com بدلاً من عنوان yyy.com. هل هناك شيء يمكنني فعله لهذا الإعداد بحيث لا يفشل DMARC عند تعيينه كـ reply_by_email_address إلى عنوان Gmail مع الاحتفاظ بالخادم الصادر كـ yyy.com؟

ألا يمكنه تحليل بقية المحتوى/المرفقات في البريد الإلكتروني المرتد لاستخراج تلك المعلومات إذا لم يتمكن من العثور على ما يحتاجه في المكان “الواضح” (أو على الأقل توفير خيار في الإعدادات للقيام بذلك مع التحذيرات اللازمة حول انتحال الشخصية)؟

فشل محاذاة DMARC نظرًا لاستخدام reply_by_email_address كعنوان المرسل في هذا الموقف.

تقريبًا الشيء الوحيد المضمون أنه سليم عند الارتداد هو العنوان.

ربما الموضوع، لكن لن يكون من العملي وضع هذه المعلومات هناك.

أرى أن بعض الأنظمة تتضمن الرسالة الأصلية كمرفق… من الممكن نظريًا أن نتحقق من الارتدادات بحثًا عن مرفق للحصول على مزيد من المعلومات إذا كانت موجودة.

إذا كنت أفهم هذا بشكل صحيح، فيجب تعيين reply_by_email_address في حقل reply-to الخاص بالبريد المرسل بواسطة Discourse (من yyy.com). لذلك عندما يرد المستخدم، فإنه يرد على البريد الإلكتروني reply-to (gmail.com) بدلاً من العنوان الأصلي (yyy.com). لذلك في البريد الإلكتروني للرد، يجب أن يكون عنوان from هو عنوان البريد الإلكتروني للمستخدم و to هو عنوان gmail.com.

لماذا يتم استخدام reply_by_email_address كعنوان from؟

لا يتم استخدام reply_by_email_address كعنوان المرسل ولكن كعنوان الظرف (envelope-from)، وتحديداً حتى تعمل عمليات الارتداد (bounces).

إليك صورة توضح كيفية استخدام كل عنوان. العناوين نفسها خاصة بالاستضافة لدينا، ولكن يجب أن تكون كافية كمثال.

notification_email: notifications@hs1.discoursemail.com
reply_by_email_address: incoming+%{reply_key}@hs1.discoursemail.com

إشعار:

رسالة قابلة للرد:

إعجابَين (2)

شكراً لك. هذا مفيد للغاية.

إذًا، بشكل أساسي، يتم استخدام reply_by_email_address في رأس المرسل (from header) بحيث يعود إلى عنوان البريد الإلكتروني هذا إذا تم الارتداد. ويتم تعيين نفس عنوان البريد الإلكتروني أيضًا في رأس الرد (reply-to header) إذا تم تمكين الردود عبر البريد الإلكتروني.

لذلك، إذا كان فهمي أعلاه صحيحًا، فعندئذٍ إذا كان بإمكان discourse الحصول على إعداد منفصل (reply_to_email) لرأس الرد (reply-to)، فسيؤدي ذلك إلى حل مشكلة فشل DMARC. عند استخدام النطاق yyy.com (المأخوذ من reply_by_email_address) للمرسل (from) أثناء الإرسال و gmail.com للرد (reply-to) (المأخوذ من إعداد reply_to_email جديد). إذا تم ارتداد البريد الإلكتروني، فسيظل يعود إلى reply_by_email_address ولكن إذا رد المستخدم، فسوف يذهب إلى reply_to_email.

هذا هو envelope-from الخاص بـ SMTP، وليس ترويسة From. لا تُستخدم ترويسة From للرفض.

أي، ① وليس ②:

لجتياز DMARC، يجب أن يكون إما SPF (الذي يتحقق من صحة envelope-from بالاقتران مع عنوان IP المرسل) أو DKIM (الذي يتحقق من صحة حقول From والمجموع الاختباري للرسالة) متوافقًا.

يبدو أن الهدف الأساسي من هذه العملية هو الحصول على عنوان “جميل” للرد (reply-to)، والذي يرد عليه المستخدمون؟

هل تريد شيئًا كهذا؟

envelope-from: outgoing+12309847801923840923502389423@yyy.com
…
From: notifications@yyy.com
To: user@contoso.com
Reply-to: my_sweet_forum+12309847801923840923502389423@gmail.com

يجب أن يكون لديك envelope-from بهذا الشكل، وإلا فلن تعمل عمليات الرفض.

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

نعم، هذا صحيح. الفكرة هي أن يكون envelope-from مختلفًا عن reply-to.

نظرًا لأن نطاق envelope-from وعنوان IP المرسل يتطابقان، يجب أن ينجح SPF ولكن في نفس الوقت يمكن أن يذهب الرد إلى GMail للمعالجة، وإذا ارتد البريد الإلكتروني، فسيعود إلى خادم النطاق الأصلي الذي يمكنه بعد ذلك إعادة توجيه الارتداد مرة أخرى إلى صندوق الوارد الخاص بـ GMail أيضًا.

سيبدو الأمر في الواقع كالتالي:

envelope-from: outgoing@yyy.com
…
From: notifications@yyy.com
To: user@contoso.com
Reply-to: my_sweet_forum+12309847801923840923502389423@gmail.com

في إعداداتي، لن يحتوي البريد الصادر على VERP لأن خادم SMTP الوارد الخاص بي لا يدعم VERP (أي أن الارتداد لن يحتوي على عنوان VERP)، وهذا هو سبب إرسال reply-to إلى GMail لأنه يدعم VERP. لا ينبغي أن يتسبب هذا في فشل DMARC كما يحدث الآن.