مهارات الحياة

رد SMTP 250: قبول العنوان يختلف عن قبول بيانات الرسالة

جدول مؤلف لثلاث محاولات تتفق في المقدمة وتختلف عند إتمام البيانات
نحتفظ بمرحلة كل رد؛ غير معلوم وصف للمقتطف، وليس رمز SMTP.

رد 250 بعد RCPT وبعد نهاية DATA يظهر في مرحلتين مختلفتين من نقل البريد. نقرأ ثلاثة مقتطفات مؤلفة، ونربط الرد بمرحلته بدل تحويل الرقم وحده إلى دليل وصول.

الخلاصة السريعة

اسأل أي مرحلة اكتملت؛ رد قبول المستلم وحده لا يحسم قبول بيانات الرسالة.

  1. يفصل RFC 5321 قبول المستلم عن إتمام البيانات: 354 تمهيدي، و250 عند إتمام البيانات قبول لمسؤولية التسليم أو الترحيل. [1]
  2. نعطي ثلاث محاولات مستقلة، لكل منها مستلم واحد: MAIL يليه 250، وRCPT يليه 250، وDATA يليه 354. هذه مقتطفات تعليمية، دون رسائل أو اتصال فعلي.
  3. بعد إتمام البيانات، تنتهي الأولى برد 250، والثانية برد 550، والثالثة بخانة رد غير معلومة. لا ننقل قبول المستلم السابق ليملأ الخانة الأخيرة في المحاولتين الثانية والثالثة.
  4. في المقتطفات سبعة ردود برقم 250، لكنها ليست سبع رسائل مقبولة: ثلاثة منها لمرحلة MAIL وثلاثة لـRCPT وواحد فقط لإتمام البيانات. التصنيف المعطى واحد مقبول وواحد مرفوض وواحد مجهول في هذه المرحلة.
  5. إخفاء الحالة المجهولة يغير المقام: المقبول واحد من نتيجتين معلومتين، وليس حكمًا على المحاولات الثلاث كلها. قبول البيانات لدى الخادم لا يقدم من سجلنا دليلًا على مجلد الوصول أو القراءة.
  6. احفظ هوية المحاولة والخادم والمرحلة والرد ومصدره. مقتطف ناقص لا يشخّص سببًا أو يبرر إعادة إرسال تلقائية؛ أمثلتنا ليست تنفيذًا للبروتوكول أو اختبار تسليم حملة.

اربط كل رد بالفعل الذي سبقه

يفصل RFC 5321 بين تحديد المستلم عبر RCPT، و354 تمهيدًا لبيانات DATA، ورد إتمام البيانات؛ عند الأخير، يعني 250 قبول الخادم مسؤولية التسليم أو الترحيل، ويعبّر رد 5xx عن رفض دائم. [1]

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

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

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

اقرأ المقدمة المشتركة دون القفز إلى النهاية

تعطي المحاولات الثلاث المقدمة نفسها في مثالنا: مرحلة MAIL وردها 250، ثم مرحلة RCPT وردها 250، ثم أمر DATA وردّه 354. نعرف أن هذه ثلاثة صفوف مختلفة الغرض داخل كل محاولة، لا ثلاث رسائل مستقلة. ولا نجعل تعدد الأعداد سببًا لزيادة عدد المحاولات؛ عددها معطى بثلاث هويات، ويتكرر داخل كل هوية أكثر من سطر في الجدول.

في بطاقة ألف، ظهور 250 بعد RCPT يملأ خانة قبول المستلم فقط. تبقى خانة الرد عند إتمام البيانات فارغة إلى أن نصل إلى سطرها المعطى. وفي باء وجيم نتبع المبدأ نفسه، فلا نبدأ بتصنيفهما ناجحتين ثم نبحث عما يؤكد قرارنا. ترتيب القراءة مهم لأنه يمنع اختزال المقتطف منذ السطر الذي يبدو مطمئنًا، قبل أن نرى هل توجد نهاية معلومة أصلًا.

وكذلك لا نضع 354 في خانة الرد الختامي بدل الخانة التي تخصه. أعطينا هذا الرقم بجوار أمر DATA، بينما خصصنا سطرًا آخر لما بعد إتمام البيانات. إذا حذفت أسماء المراحل واحتفظت بقائمة 250 و250 و354، فلن تقول القائمة وحدها ما الذي بقي ناقصًا. ترجع المعلومة عندما نستعيد الأعمدة والهوية، لا عندما نلون جميع الأعداد غير السالبة بلون النجاح في رسم واحد.

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

افصل النهايات الثلاث المعطاة

نضيف إلى ألف سطرًا عند إتمام البيانات وردّه 250. هنا لدينا المعلومة التي كانت غائبة عن المقدمة، فنصف ألف بأنها مقبولة لدى الخادم س في هذه المرحلة. أما باء فنعطي سطر نهايتها ردًا 550، فنسجل رفض البيانات في هذه المحاولة. لا يمحو وجود ردَي 250 سابقين ذلك السطر؛ قبولهما السابق تعلق بمرحلتين مختلفتين كما أوضحنا.

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

ولإظهار حدود الاستنتاج، ننسخ مقدمة جيم إلى بطاقتين افتراضيتين مستقلتين: نضيف للأولى نهاية 250، وللثانية نهاية 550. تتفق البطاقتان في كل ما ظهر أصلًا من جيم، وتختلفان في السطر الإضافي. لا نقول إن إحداهما حدثت بالفعل؛ نستخدمهما لإثبات أن المقدمة المعطاة لا تختار وحدها نهاية واحدة. البيانات الجديدة هي التي ستحسم، لا تكرار قراءة الأرقام القديمة.

كذلك لا نسمي 550 في باء حظرًا بسبب نص إعلاني أو عنوانًا غير موجود ما لم نعط تفاصيل تدعم ذلك. رمز الرفض في هذه الخانة لا يتيح لنا اختراع تشخيص محدد لسبب قرار الخادم. إذا انتقل السؤال إلى معالجة حالة فعلية، نحتاج سجلها الأصلي وسياق الخدمة والرد الكامل، بينما يبقى هدف المقال فصل مراحل القبول وحدود ما يثبته مقتطف صغير.

عدّ المحاولات بدل عدّ ظهور الرقم

لنعد الآن جميع ردود 250 الظاهرة في بطاقاتنا. لكل محاولة رد في MAIL ورد في RCPT، أي ستة ردود من المقدمة المشتركة للمحاولات الثلاث. ثم تضيف نهاية ألف ردًا سابعًا. لا تضيف نهاية باء 250 لأنها 550، وخانة جيم الأخيرة مجهولة. إذن سبعة هو عدد مرات ظهور هذا الرقم في المقتطفات، لا عدد الرسائل التي قبلت بياناتها في النهاية.

وإذا كان سؤالنا عن قبول المستلم داخل المقتطفات، فلدينا ثلاث خانات RCPT معطاة برد 250 من ثلاث محاولات. أما سؤال إتمام البيانات، فله جدول آخر: حالة واحدة برد 250، وحالة برد 550، وحالة لم نعرف ردها. لا ننقل مجموع الثلاثة من عمود المستلم إلى عمود النهاية كي يتطابق الرقمان. اختلافهما هو معلومة عن مراحل مختلفة، وليس خطأ جمع نحتاج إخفاءه.

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

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

سبع مرات ظهور للعدد 250 موزعة على مراحل في ثلاثة مقتطفات مؤلفة
ردود متعددة داخل المحاولة لا تصبح محاولات مستقلة أو دليل قراءة.

احتفظ بالمجهول ولا تحوّل القبول إلى قراءة

إذا حصرنا النظر في النهايتين المعلومتين، كان المقبول واحدة من اثنتين. يمكن وصف ذلك بأنه نصف النهايات المعلومة في بطاقتنا، لكنه لا يعني أن نصف المحاولات الثلاث قبلت بياناتها. حذف جيم من المقام يغير السؤال. ولا يصح أيضًا عدها مرفوضة لمجرد نقص الرد أو مقبولة لأن المقدمة تحمل 250؛ نحفظ فئة المجهول إلى جانب الفئتين المعلومتين.

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

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

احفظ مقتطفًا قابلًا للمراجعة

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

وإذا أضفنا لاحقًا بطاقة تحمل 250، فلا نعدها استكمالًا لجيم قبل مطابقة هويتها وخادمها ومرحلتها. يمكن أن نعطي في فرع آخر بطاقة تخص MAIL في محاولة رابعة، ولن تغير هذه البطاقة المعلومة الناقصة عن نهاية جيم. أما إذا أعطينا رد النهاية لجيم نفسها، فنحفظ النسخة السابقة من الملخص ونوضح أي معلومة جديدة غيّرت التصنيف. بذلك نفصل اكتشاف السطر المطلوب من العثور على رقم يشبهه في سجل آخر.

احتفظ بالأصل إذا وجدت سطرًا ناقصًا، ودوّن المعلومة التي تحتاجها لاستكمال تفسيره. لا يحول هذا المقال مقتطف جيم إلى تعليمات إعادة إرسال تلقائية، ولا يقدم اختبارًا لخادم أو ضمان وصول حملة. النتيجة التي يمكن فحصها من البطاقات واضحة: قد يتكرر 250 في أكثر من مرحلة، فلا يحدد عدد مرات ظهوره وحده كم محاولة قبل الخادم بياناتها عند النهاية.

المصادر ومتابعة القراءة

  1. RFC 5321: مراحل قبول البريد وردودها (يفتح في نافذة جديدة)rfc-editor.org

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.