عندما يقول نموذج الاتصال «شكرا» لكن لا يصل أي بريد
قد يتعطل نموذج الاتصال دون أن يرى أحد خطأ: يتلقى الزائر تأكيدا لطيفا، ولا تتلقون شيئا. لماذا يحدث ذلك، وكيف تلاحظونه في الوقت المناسب.
تخيلوا عيادة علاج طبيعي صغيرة. لموقعها نموذج اتصال، والنموذج يعمل، أو يبدو كذلك على الأقل. يملؤه الزوار وينقرون «إرسال» ويرون عبارة لطيفة: «شكرا، سنتواصل معكم قريبا». وما لا يراه أحد أن الرسائل توقفت عن الوصول إلى صندوق بريد العيادة منذ فترة. لا خطأ، ولا رسالة مرتدة في صندوق بريد أحد، ولا ضوء أحمر في أي مكان. يتعطل النموذج بصمت.
لماذا لا يلاحظ أحد
تعني صفحة «شكرا» في النموذج عادة شيئا واحدا فقط: أن الموقع مرر الرسالة. أما قبول خادم بريد لها أو تصنيفها بريدا مزعجا أو رفضها في الطريق، فيحدث لاحقا بعيدا عن نظر النموذج. فالدالة mail() في PHP مثلا تبلغ عن النجاح بمجرد قبول النظام المحلي الرسالة للتسليم، وليس عند وصولها إلى أحد. لذا يتلقى الزائر تأكيدا ويمضي. وفي المقابل، يرى المالك صندوق بريد فارغا ويفترض أنه مجرد شهر هادئ. ونادرا ما تثير قلة الاستفسارات القلق وحدها: العطل أو الطقس أو الاقتصاد، فهناك دائما تفسير يبدو أرجح من «النموذج معطل».
- اليوم 0يجري تحديث روتيني لإضافة ليلا. ويبدو الموقع كما كان تماما.
- اليوم 1تصل آخر رسالة. ولا يعلم أحد أنها الأخيرة.
- الأيام 2–13يواصل الزوار إرسال النموذج ورؤية «شكرا». ولا يصل شيء إلى صندوق البريد.
- اليوم 14يتصل شخص ويسأل بانزعاج طفيف لماذا لم يرد أحد على استفساره قط.
- اليوم 15يعثر على السبب خلال ساعة. وتكون رسائل هذين الأسبوعين قد ضاعت، ما لم يكن النموذج يحتفظ بنسخة أيضا.
الأسباب المعتادة
- تغيرت كلمة مرور SMTP أو مزود البريد. يواصل النموذج تسجيل الدخول ببيانات الاعتماد القديمة ويرفض خادم البريد ذلك، بصمت من وجهة نظر الزائر.
- الدالة mail() في PHP دون مصادقة. يرسل خادم الويب البريد مباشرة، دون تسجيل الدخول إلى خادم بريد مناسب. وتعد خوادم استقبال كثيرة هذا البريد مشبوها: يصل إلى البريد المزعج أو يرفض تماما.
- عدم توافق SPF وDKIM وDMARC. تضع نماذج كثيرة عنوان الزائر في حقل From. فتدعي الرسالة أنها من عنوان gmail.com مثلا، لكنها مرسلة من خادم الويب لديكم؛ وهذا بالضبط ما صمم DMARC لمنعه.
- يعطل تحديث إضافة أو تغيير قالب النموذج أو CAPTCHA الخاصة به. يسقط قالب معدل حقلا، أو يتوقف تحميل نص برمجي، أو يظهر عنصر CAPTCHA دون نصه البرمجي، فيفشل التحقق من كل إرسال.
- صندوق البريد المستلم ممتلئ. يرفض خادم البريد الرسائل الجديدة، وتذهب الرسالة المرتدة إلى عنوان لا يقرأه أحد.
- يحجب شريط ملفات تعريف الارتباط النص البرمجي للنموذج. إذا صنفت أداة الموافقة CAPTCHA أو نص النموذج البرمجي بوصفه «تسويقا»، فقد يحصل الزوار الذين يرفضون ملفات تعريف الارتباط على نموذج يتعذر إرساله، أو ترفض إرسالاته بسبب غياب رمز.
- انتهاء صلاحية شهادة TLS أو النطاق. يرى الزوار تحذير متصفح ويغادرون، أو يتعذر الوصول الآمن إلى خادم البريد. وإذا انتهت صلاحية نطاق صندوق البريد المستلم، يتوقف البريد إليه ببساطة.
- تقدم طبقة التخزين المؤقت صفحات قديمة. فقد تقدم ذاكرة تخزين مؤقت للصفحة كاملة نموذجا برمز أمان منتهي الصلاحية (nonce أو رمز CSRF). يرفض الخادم الإرسال، وقد لا يرى الزائر خطأ واضحا بحسب الإعداد.
فخ عنوان From
يستحق السبب الثالث نظرة أقرب، لأن إعدادات نماذج كثيرة تتضمنه افتراضيا. يتحقق DMARC من تطابق النطاق في عنوان From الظاهر مع نطاق يضمنه SPF أو DKIM. وإذا أرسل النموذج رسالة «من» عنوان الزائر، فخادمكم غير مخول بالإرسال لذلك النطاق، ولذلك يفشل الفحص. وبحسب سياسة DMARC لنطاق الزائر ومزود بريدكم، تصل الرسالة إلى البريد المزعج أو ترفض. والإصلاح بسيط: أرسلوا من عنوان في نطاقكم، وضعوا عنوان الزائر في Reply-To. وسيظل النقر على «رد» يصل إلى الزائر.
- From: عنوان الزائر
- دون Reply-To
- mail() في PHP مباشرة من خادم الويب
- لا SPF أو DKIM أو DMARC للنطاق المرسل
- لا توجد الرسالة إلا كبريد إلكتروني
- From: عنوان في نطاقكم، مثلا form@yourdomain
- Reply-To: عنوان الزائر
- SMTP مع مصادقة أو خدمة إرسال
- إعداد SPF وDKIM وDMARC وتوافقها
- تخزن نسخة أيضا في قاعدة البيانات
ما ينبغي فعله
- 1أرسلوا رسالة اختبار عبر نموذجكم بانتظام، شهريا على الأقل، ودائما بعد التحديثات أو تغييرات القالب أو إعدادات البريد. وضعوا عليها علامة اختبار واضحة حتى لا يرد عليها أحد.
- 2اعرفوا وتيرتكم المعتادة. إذا كان النموذج يجلب عادة بضع رسائل أسبوعيا، فإن صمت أسبوعين سبب للفحص، وليس شهرا هادئا.
- 3أرسلوا عبر SMTP مع مصادقة، من خلال مزود بريدكم أو خدمة إرسال مخصصة، بدلا من الاعتماد على mail() في PHP.
- 4استخدموا نطاقكم في From وعنوان الزائر في Reply-To. ثم أعدوا SPF وDKIM وDMARC لذلك النطاق حتى تجتاز الرسائل الفحوصات.
- 5احتفظوا بنسخة من كل إرسال في قاعدة البيانات. توفر إضافات نماذج كثيرة ذلك، أحيانا كملحق. وإذا فشل البريد، تبقى الاستفسارات موجودة.
- 6افحصوا النموذج بعد كل تحديث لإضافة، بما في ذلك CAPTCHA، وكذلك مع رفض ملفات تعريف الارتباط.
يسهل نسيان هذه الفحوصات، لذا تستحق الأتمتة. فمع حساب ونطاق تم التحقق منه، يستطيع formexposed إرسال إرسال اختباري معلم بوضوح والتحقق من وصوله فعليا (فحص التسليم، بتفعيل اختياري فقط). ويكشف أيضا الصمت، أي توقف نموذج يتلقى الرسائل عادة عن تلقيها فجأة، ويفحص SPF وDKIM وDMARC لرسائل الإشعار، وكذلك شهادة TLS وانتهاء صلاحية النطاق. ولا ينبهكم إلا عندما يتغير شيء.
إذا أردتم مجرد نظرة أولى: لا يحتاج فحص مجاني على formexposed.com إلى حساب ولا يرسل شيئا. ويبين، من بين أمور أخرى، وجود CAPTCHA معطلة: عنصر واجهة دون نصه البرمجي، أو مفتاح اختبار عام، أو أخطاء في المتصفح؛ وهي إحدى الطرق الصامتة لتعطل النموذج. ولا يمكن تأكيد وصول الرسائل فعلا إلا برسالة اختبار حقيقية، فأرسلوا واحدة اليوم.