Summary

  • قدم RFC 1845 سنة 1995 امتداداً تجريبياً لـ SMTP: يعلن الخادم CHECKPOINT، ويضع المرسل TRANSID للعملية، ويحفظ الخادم تقدمها في وسيط غير متطاير.
  • تعني 355 6135 في مثال الوثيقة أن 6135 بايت من بيانات الرسالة حُفظت. لا تُحسب أوامر الظرف ولا البايتات التي يضيفها SMTP لحماية الأسطر التي تبدأ بنقطة.

تتكاثر كلفة الرسالة الكبيرة كلما انقطع اتصال ضعيف قرب نهايتها. لم يمنح SMTP الأصلي المرسل وسيلة للعودة إلى منتصف عملية توقفت بانهيار اتصال TCP؛ فكان المحتوى يعبر الطريق كله من جديد. اقترح D. Crocker وN. Freed وA. Cargille في سبتمبر 1995 حساباً أدق ضمن بروتوكول تجريبي: يحفظ المستقبل ما وصل بالفعل، ثم يخبر المرسل من أين يكمل. رقم 6135 مأخوذ من الحوار النموذجي في RFC، لا من واقعة إنتاج موثقة.

بدأت الخطة قبل أن تنقطع أي وصلة. يسأل العميل بأمر EHLO، ولا يستخدم الاستئناف إلا إذا أظهر رد الخادم كلمة CHECKPOINT. ثم يضيف TRANSID إلى MAIL FROM. هذا المعرف حساس لحالة الأحرف، ويخص نسخة بعينها تنتقل عبر وصلة SMTP. أما Message-ID داخل رأس البريد فقد يشترك فيه أكثر من نسخة من الرسالة نفسها وهي تسلك طرقاً مختلفة. لو استُخدم معياراً للتقدم، قد تستعير نسخة ما البايتات المحفوظة لنسخة أخرى. لذلك يتعامل الخادم مع TRANSID كسلسلة معتمة مهمتها إعادة العثور على العملية نفسها.

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

عند العودة، يعيد المرسل أمر MAIL FROM نفسه ومعه TRANSID نفسه. يرد الخادم 355 يتلوه موضع البايت التالي الذي يتوقعه، محسوباً من الصفر داخل بيانات الرسالة. في المثال، حفظ 6135 بايت بنجاح. لا يدخل MAIL FROM وRCPT TO في هذا العدد. ولا تدخل البايتات الإضافية التي يضعها SMTP عند حشو النقطة في أول السطر. وإذا كان النقل بأمر DATA، يجب أن يقع موضع العودة عند بداية سطر. القفز إلى الموضع 6135 في ملف محلي عشوائي لن يطابق بالضرورة تدفق SMTP المعياري.

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

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