أربعة أسئلة تتقاسم كلمة واحدة
«هل هذا عنوان بريد إلكتروني صالح؟» ليس سؤالاً واحدًا. إنه أربعة أسئلة، تزداد صعوبة بالترتيب، والأخير هو الوحيد الذي أراد أي أحد إجابته فعلاً — ولهذا يكون كود التحقق مفصّلاً جدًا في الأول وصامتًا عن البقية.
وها هي، بالترتيب الذي يقابلها به نموذج التسجيل.
- هل هو على شكل عنوان؟
- فحص صياغي. يعمل في المتصفح، ولا يكلّف شيئًا، ويضبط الفاصلة المكتوبة خطأً والـ
@المفقودة. وهو الطبقة الوحيدة التي يمكنها أن ترفض شيئًا بصدق من تلقاء نفسها — وحتى هي ينبغي أن ترفض أقل بكثير مما ترفضه معظم الأنماط. - هل يستطيع ذلك النطاق استقبال بريد أصلاً؟
- فحص DNS. استعلام واحد يقول إن كان أي شيء، في أي مكان، مستعدًا لقبول بريد للجزء الذي بعد
@. يضبط اسم نطاق ناقص حرف، ونطاقًا انتهت صلاحيته العام الماضي، ولا يستطيع أن يخبرك بشيء إطلاقًا عن صندوق البريد. - هل صندوق البريد ذاك موجود؟
- فحص SMTP — وهو الفحص الذي سيقضي هذا الدليل أطول وقت يخبرك فيه ألا تثق به. يمكنك أن تسأل. والإجابة غالبًا نعم مهذبة من خادم يقبل كل اسم، أو فشل مؤقت متعمَّد، أو قبول يتبعه ارتداد بعد دقائق.
- هل هو عنوان ذلك الشخص؟
- لا شيء في الجانب التقني يستطيع الإجابة عن هذا. يمكن أن يكون العنوان سليمًا تمامًا وقابلاً للتسليم وملكًا لشخص آخر — أُخطئ في رقم واحد منه، أو كُتب عمدًا لتجاوزك. ولا يحسم الأمر سوى رسالة تصل ويُستخدَم ما فيها.
فالثلاث الأولى رخيصة ولا تثبت كثيرًا. والرابعة هي الوحيدة التي تستحق الاسم، وهي التي تكلّف رسالة. وكل ما يلي يدور حول إنفاق الثلاث الرخيصة بحكمة حتى لا تُهدر الغالية.
الطبقة الأولى: النمط، والأشياء الأربعة التي لا يستطيع معرفتها
لا يوجد تعبير نمطي رسمي لعنوان بريد إلكتروني، ولا يمكن أن يوجد. فـRFC 5322 يُعرّف قواعد نحوية لا نمطًا، وتلك القواعد تسمح بتعليقات بين قوسين، وفراغات مطوية، ونصوص بين علامتي اقتباس تحتوي كل حرف تقريبًا — لا شيء من هذا ينبغي لأي نموذج تسجيل حقيقي أن يقبله، وكله يجب أن يقبله أي نمط أمين للمعيار.
ما هو موجود فعلاً تعريف أضيق عمدًا تنفذه المتصفحات فعلاً: التعريف الذي تعطيه مواصفة HTML لحقل <input type="email">. إنه حل توفيقي مقصود لا نسخًا عن المعيار، وهو ما يخضع له نموذجك بالفعل قبل أن يعمل أي سطر من كودك، وهو قصير بما يكفي لقراءته دفعة واحدة:
/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/استخدم ذلك، أو استخدم ما تشحنه منصتك أصلاً. الأربعة أدناه كلها الطبقة نفسها، واختيار واحد منها قرار أصغر مما تفعله بعد ذلك:
| أين أنت | الفحص الذي لديك أصلاً | ما يفعله وقد لا تتوقعه |
|---|---|---|
| في المتصفح، بلا أي كود إطلاقًا | <input type="email" required> | يطبّق النمط أعلاه قبل أن تراه جافاسكريبت الخاصة بك على الإطلاق، ويعرض الرسالة بلغة الزائر نفسها. |
| في PHP، بلا أي تثبيت | filter_var($a, FILTER_VALIDATE_EMAIL) | أشد صرامة من نمط HTML: فهو يصرّ على وجود نقطة في النطاق، فيرفض عنوانًا لا يعمل إلا داخل جهاز واحد. |
| في Python، بحزمة صغيرة واحدة | email_validator.validate_email(a) | يؤدي فحص الصياغة، وإن سمحت له، بحث النطاق الخاص بالطبقة الثانية أيضًا — الطبقتان الرخيصتان خلف استدعاء واحد. |
| في Java أو Kotlin، عبر bean validation | @Email | متساهل جدًا عن قصد. إنه توصيف (annotation) قصد به ضبط الخطأ الواضح فقط، ويقبل بارتياح نطاقًا لم يوجد قط. |
أيًّا كان ما تستخدمه، المهم هو ما يصمت عنه. النمط الذي يعيد true أخبرك بشيء واحد وبأربعة أشياء غير موجودة.
- ليس أن النطاق موجود
- عنوان على نطاق لم يسجله أحد قط يجتاز كل نمط في هذا القسم. لم يُبحث عن شيء ولم يُتصل بشيء؛ فما كتب تعبير نمطي طلب شبكة قط.
- ليس أن صندوق البريد موجود
- حتى على نطاق حقيقي، لا رأي للنمط في الجزء الذي قبل
@. ذلك الجزء ملك للخادم المستقبِل وحده، وهو بالضبط ما لن يخبرك به DNS أبدًا. - ليس أنه قابل للتسليم
- يمكن لنطاق أن يملك سجلاً سليمًا تمامًا وخادم بريد مطفأ منذ شهر. الصياغة خاصية للنص؛ وقابلية التسليم خاصية للعالم لحظة ضغطك على الإرسال.
- ليس أنه ملك للشخص الذي يكتبه
- أشيع عنوان سيئ في أي قاعدة بيانات هو عنوان حقيقي وقابل للتسليم يملكه شخص لم يسجّل قط — إما لأن حرفًا أُخطئ في كتابته، أو لأن النموذج مُلئ بكذبة تبدو معقولة.
ما هو صالح، وما يُطرح خطأً
معظم أخطاء التحقق ليست عناوين سيئة تسللت. إنها أشخاص لم يستطيعوا التسجيل، ولا يظهرون أبدًا في أي سجل يقرؤه أحد — فالنموذج قال لا، فذهبوا إلى مكان آخر. وهذه الستة هي الأكثر تسببًا في ذلك.
| ما ترفضه النماذج | هل هو صالح؟ | ما هو فعلاً |
|---|---|---|
علامة +، كما في name+shop@example.com | صالحة، وشائعة الاستخدام | العنونة بعلامة +: صندوق بريد واحد، بوسم اختاره صاحبه ليرى من سرّب عنوانه. ورفضها يخبر الزائر الحذر بالضبط بأي نوع من النماذج هذا. |
فاصلة عليا، كما في o'brien@example.com | صالحة، ولقب عائلة شخص ما | واحدة من دزينة علامات ترقيم يسمح بها الجزء المحلي. وحين يرفضها نموذج، فالسبب لا يكاد يكون العنوان أبدًا — بل خلل في الإفلات (escaping) في مكان أبعد لم يرد أحد إيجاده. |
نهاية لم يسمع بها أحد، كما في .dev أو .photography | صالحة، ويوجد أكثر من ألف منها بكثير | النمط الذي يحمل قائمة نهايات مكتوبة بداخله كان قديمًا منذ يوم كتابته، ويزداد سوءًا كل عام دون أن ينتبه أحد. |
| نطاق بلا نقطة فيه | صالح، وعديم الفائدة لك | عنوان مثل root@localhost صالح داخل جهاز واحد ولا معنى له في نموذج عام. وهذه هي الحالة الوحيدة التي يكون فيها فاحص المنصة الصارم محقًا في الرفض. |
حروف غير لاتينية، كما في 用户@例子.广告 | صالحة، مع تحفظ | العناوين المُدوَّلة موجودة وتنتشر ببطء. وقدرة حزمة بريدك أنت على الإرسال إلى واحد منها سؤال منفصل — لكن حقلاً يرفض قبول تلك الحروف يكون قد أجاب عنه للجميع، وبشكل دائم. |
حروف كبيرة قبل @ | صالحة، وليس لك أن تغيّرها | يترك المعيار حالة الأحرف في الجزء المحلي لتقدير الخادم المستقبِل. وتكاد كل الخوادم تتجاهلها؛ والتي لا تتجاهلها هي التي لن تسمع عنها أبدًا. |
وثلاثة أرقام، تستحق أن تُكتب في كودك لأنها لا تتغيّر:
- 64 حرفًا
- أقصى ما يمكن أن يكون عليه الجزء الذي قبل
@. وأي شيء أطول ليس عنوانًا طويلاً، بل ليس عنوانًا على الإطلاق. - 255 حرفًا
- أقصى ما يمكن أن يكون عليه النطاق، بما في ذلك النقاط. لم يقترب أي عنوان مشروع من هذا الحد يومًا، ووجوده هنا أساسًا كي يكون لديك حد أصلاً.
- 254 حرفًا
- أقصى ما يمكن أن يكون عليه العنوان كاملاً حين يحمله خادم — وهو أقل من مجموع الرقمين أعلاه. وهذا هو الرقم الذي تضعه في عمود قاعدة البيانات وفي
maxlengthالخاص بالحقل.
الطبقة الثانية: بحث واحد، وما يحسمه
الجزء الذي بعد @ نطاق، والنطاق إما أن يكون له مكان يضع فيه البريد أو لا يكون. استعلام DNS واحد يجيب عن ذلك في أجزاء من الثانية، وهو أعلى الفحوص قيمة في هذا الدليل كله — لأن الخطأ الذي يضبطه، اسم نطاق كُتب بخطأ بسيط، هو بفارق كبير أشيع إخفاق حقيقي موجود.
$ dig +short MX example.comالإجابة تعني أن مضيفًا قد سُمّي. وغياب الإجابة لا يعني غياب البريد: فنطاق بلا سجل MX لكن معه سجل A لا يزال يستقبل، لأن المرسِلين يلجؤون إليه احتياطيًا. وهناك أربع نتائج، اثنتان منها فقط إخفاق.
| ما يعيده البحث | هل يستطيع الاستقبال؟ | ما ينبغي للنموذج فعله |
|---|---|---|
| سجل MX واحد أو أكثر | نعم | اقبله. هذه الغالبية الساحقة من العناوين، ولا يستحق أي شيء آخر أن يُفعل قبل الإرسال. |
بلا MX، لكن مع سجل A أو AAAA | نعم، بالاحتياط | اقبله. هذا غير معتاد وصالح تمامًا، وسيُسلِّم المرسِلون إليه. ورفضه يحوّل عنوانًا يعمل إلى زبون ضائع. |
سجل واحد قيمته بالكامل 0 . | لا، وعن قصد | ارفضه، وقل السبب. هذا MX فارغ: نشر صاحب النطاق، بالطريقة الوحيدة المتاحة لنشر ذلك، أن لا شيء هنا يستقبل بريدًا. |
| النطاق لا يُحلّ إطلاقًا | لا | ارفضه، واعرض أقرب شيء له. فـNXDOMAIN على اسم كتبه إنسان قبل ثلاثين ثانية يكاد يكون دائمًا حرفًا واحدًا خاطئًا. |
حين يفشل هذا الفحص، فالمشكلة ليست في البحث نفسه أبدًا. بل في أين وُضع ذلك البحث — على المسار الحرج، مع كل ضغطة مفتاح، بفشل يمنع الإرسال. وست قواعد تُبقيه مفيدًا:
- شغّله حين ينتهي الحقل، لا أثناء الكتابة فيه. استعلام واحد عند مغادرة التركيز، أو واحد عند الإرسال. فاستعلام مع كل ضغطة مفتاح هو استعلام مع كل ضغطة مفتاح.
- حوّل النطاق إلى أحرف صغيرة أولاً. فـDNS لا يهتم وذاكرتك المؤقتة تهتم: إملاءان للنطاق نفسه استعلام واحد، لا اثنان.
- اطلب MX، والجأ احتياطيًا إلى
A. استعلامان، ثانيهما فقط مشروط. والمكتبة التي تفحص MX وحده سترفض نطاقات تعمل فعلاً. - خزّن الإجابة مؤقتًا لبضع دقائق. حفنة من النطاقات مسؤولة عن معظم التسجيلات في أي مكان، فتصبح معظم عمليات البحث بلا بحث على الإطلاق.
- افشل بالقبول. فإن انتهت مهلة المحلِّل، اقبل العنوان. ودقيقة سيئة عند مزوّد DNS الخاص بك يجب ألا تتحول أبدًا إلى نموذج يرد الجميع.
- اقترح تصحيحًا؛ ولا تطبّقه أبدًا من تلقاء نفسك. حين يكون النطاق حرفًا واحدًا عن نطاق شائع، اعرض التصحيح كشيء يُنقر عليه. فإعادة كتابة ما كتبه أحدهم بصمت هي كيف يذهب رابط التأكيد إلى شخص غريب.
للبحث تكلفة واحدة تستحق المعرفة: إنه أول لحظة يتحدث فيها نموذجك إلى العالم الخارجي عن شيء كتبه زائر. وحين يهم ذلك، البديل هو تخطي هذه الطبقة كليًا وترك الرسالة نفسها تكون الفحص بأكمله.
الطبقة الثالثة: سؤال الخادم، ولماذا لا تُعد الإجابة إجابة
توجد طريقة لسؤال خادم بريد إن كان سيقبل عنوانًا معينًا دون إرسال أي شيء إليه. افتح المحادثة، اذكر مرسِلاً، اذكر المستلِم، اقرأ الرد على ذلك الأمر الواحد، وأغلق قبل الرسالة:
220 mx1.example.com ESMTP ready
EHLO checker.example.net
250 mx1.example.com
MAIL FROM:<probe@example.net>
250 2.1.0 Ok
RCPT TO:<someone@example.com>
250 2.1.5 Ok
QUIT
221 2.0.0 Byeالـ250 بعد RCPT TO هو ما تبيعه في النهاية كل خدمة تحقق من العناوين في العالم. ويستحق الأمر الدقة بشأن مدى قلة قيمته.
- نطاق catch-all يقول نعم لكل شيء
- النطاق المُعَد ليقبل كل اسم — وهو ما تفعله هذه الخدمة، وما تفعله نطاقات شركات كثيرة جدًا — يجيب بـ
250على عنوان لم يستخدمه أحد قط. الإجابة صحيحة، وهي ليست معلومة. - خادم حذر يقول
450عن قصد - يرفض التصنيف الرمادي (Greylisting) أول محاولة من مرسِل غير معروف ويطلب منه العودة بعد قليل. المرسِل الحقيقي يعود؛ أما المتحسس فلا يعود أبدًا. وهذا الفشل المؤقت لا-إجابة متعمَّدة، وقراءتها على أنها «لا صندوق بريد كهذا» هي بالضبط الخطأ الذي صُمم لإنتاجه.
- بعض الخوادم يقبل أولاً ويرفض لاحقًا
- يأخذ كبار المزوّدين الرسالة روتينيًا أثناء المحادثة ويقررون أمرها لاحقًا، مما يحوّل الرفض إلى ارتداد يصل بعد دقائق من عودة مسبارك نظيفًا.
- بعض الخوادم يقول لا لكل من لا يعرفه
- الخادم الذي قرر أن عنوانك غريب عنه قد يرفض المستلِم لأسباب لا علاقة لها بالمستلِم على الإطلاق. وما قسته أنت كان سمعتك أنت، لا صندوق بريدهم.
- وهو ينفق السمعة التي كنت تحميها
- الاتصال الذي يذكر مستلِمين ولا يرسل أي شيء قط هو بالضبط شكل حصاد الدليل (directory harvest)، لأنه هو نفسه. وفعل ذلك بكثافة من عنوانك أنت أسرع طريق إلى قائمة حظر — والمرسِل المدرج في قائمة حظر مرسِل تتوقف رسائله الحقيقية عن الوصول.
توجد حالة واحدة ضيقة يكون فيها المسبار مفيدًا فعلاً: عنوان واحد، يُفحص يدويًا، على نطاق تديره أنت أو لديك إذن بمسّه. أما كخطوة داخل نموذج تسجيل فهو بطيء، وكثيرًا ما يكون خاطئًا، ومؤذٍ أحيانًا للشيء نفسه الذي أُضيف لحمايته.
عناوين الأدوار، والنطاقات المؤقتة، والقائمة التي توشك أن تشتريها
بين البحث عن النطاق والرسالة الحقيقية تقع مجموعة فحوص لا علاقة لها بالصحة إطلاقًا. إنها تتعلق بما إذا كنت تريد هذا العنوان، وهو قرار تجاري يرتدي زيًا تقنيًا — ويستحق الفصل عن الطبقات الثلاث المحيطة به لهذا السبب وحده.
- عناوين الأدوار
- أسماء مثل
info@وsupport@وadmin@. وهي حقيقية، وعادة ما تكون صندوق بريد مشتركًا لا شخصًا، مما يجعلها موطنًا رديئًا لأي شيء خلفه كلمة مرور. تستحق أن تُعلَّم. ونادرًا ما تستحق الرفض. - النطاقات المؤقتة
- عناوين مثل تلك التي يوزعها هذا الموقع، على نطاقات وُجدت لكي تُرمى. والفحص مقابل قائمة عامة بها أمر معقول تمامًا، طالما كنت صادقًا مع نفسك بأن كل قائمة كهذه ناقصة وقديمة بعض الشيء في يوم تنزيلها.
- عناوين مزوّدي البريد المجاني
- ترفض بعض نماذج الشركات أي شيء ليس نطاق شركة. وهذه سياسة، وهي أحيانًا الصحيحة، وتستحق أن تُكتب بصفتها سياسة — جملة يستطيع الزائر قراءتها — بدل أن تُخفى داخل شيء يُسمى التحقق.
- الأخطاء القريبة من النطاقات الشائعة
- اسم مزوّد معروف بحرف واحد خاطئ. وهذا يختلف عن الثلاثة الأخرى: فهو ليس سياسة، بل يضبط خطأً حقيقيًا، والشخص سعيد به دائمًا. وهو المدخل الوحيد هنا الذي يستحق أن يُبنى.
تتشارك الثلاثة الأولى خاصية تجعل الحكم عليها صعبًا: يمكنك قياس ما تسمح بمروره ولا يمكنك قياس ما تكلّفه.
لنا هنا مصلحة واضحة، فإليك النسخة الصادقة. إن كان خلف نموذجك تجربة مجانية مرتبط بها شيء مكلف، فرفض النطاقات المؤقتة سيوفر لك مالاً وينبغي أن تفعله. وإن كان نشرة بريدية، أو تنزيلاً، أو حسابًا يدفع أحدهم ثمنه، فأنت غالبًا تُرهق الحذرين — والحذرون هم من يقرؤون ما ترسله.
الطبقة الرابعة: الرسالة التي هي الفحص
كل ما سبق يضيّق المجال. لا شيء منه يثبت الحقيقة الوحيدة المهمة — أن هذا العنوان يصل إلى الشخص الذي أمامك — وشيء واحد بالضبط يثبت ذلك: أرسل شيئًا إليه، وراقب استخدام ما فيه.
هذه هي الحلقة التي يملكها كل تسجيل تقريبًا أصلاً، ويعاملها نصفهم على أنها مجرد إجراء شكلي:
- اقبل العنوان بفحص متساهل واحد. النمط في المتصفح، ولا شيء آخر يقف بين الزائر والزر.
- أنشئ الحساب دون تحقق. لا تعليق على النموذج، ولا شاشة «قيد الانتظار»: فالشخص دخل، وما لا يستطيع فعله بعد هو تلك الأشياء القليلة التي يُحتاج للعنوان من أجلها فعلاً.
- أرسل رسالة واحدة تحمل رابطًا أو رمزًا يُستخدم مرة واحدة. واحدة، لها انتهاء صلاحية، مربوطة بذلك الحساب وذلك العنوان دون سواهما.
- دع الرابط يكون الدليل. نقرة واحدة، أو رمز يُكتب مجددًا، هما التحقق بأكمله. لا شيء آخر في هذا الدليل ينتج إجابة قريبة من هذه المتانة.
- امنحهم طريق عودة. زر «إعادة إرسال» ظاهر، وطريقة لتغيير العنوان دون خسارة الحساب — لأن أشيع سبب لعدم النقر على رابط قط هو خطأ مطبعي يستطيع الشخص أخيرًا رؤيته الآن.
- أنهِ صلاحية ما لم يؤكده أحد. تنظيف هادئ بعد مدة ثابتة يمنع الأخطاء المطبعية والعناوين المؤقتة من التراكم في قائمة لا يثق بها أحد.
وهذا يخلق مشكلة عملية، وهي سبب وجود هذا الموقع. فتلك الحلقة أصبحت الآن أهم مسار في المنتج، واختبارها يعني استقبال بريد حقيقي على عنوان تتحكم فيه — مرارًا وتكرارًا، داخل خط أنابيب، دون أن يفتح إنسان صندوق وارد.
عنوان على أحد النطاقات العامة لا يحتاج تسجيلاً ولا مفتاحًا، وأي شيء يصل إليه يصبح قابلاً للقراءة عبر HTTP بعد ثانية واحدة:
$ curl -sG https://grabmail.io/api/v1/mailbox \
--data-urlencode "address=signup-42@grabmail.io"ومن هناك يمكن لمجموعة اختبارات أن تُشغّل تدفق تحقق كاملاً من طرف إلى طرف، أو يمكن توجيه نطاق تملكه إلى هنا كي يحصل كل تشغيل على عنوان لم يوجد من قبل قط. وتُحفظ الرسائل لمدة 5 يومًا ثم تُحذف، وهذا العمر المناسب تمامًا لعنصر اختبار والخاطئ تمامًا لصندوق بريد.
ما الذي تضعه في النموذج فعلاً
مُختصرًا، بالترتيب الذي يعمل به الكود:
- احذف الفراغات الطرفية، ولا تفعل غير ذلك. الفراغ في أي من الطرفين أثر لصق ولم يُقصد أبدًا. ولا شيء آخر في النص لك أن تغيّره.
- طابق نمطًا متساهلاً واحدًا. نمط المتصفح، أو نمط منصتك. ارفض الـ
@المفقودة والفاصلة المكتوبة خطأً، ولا ترفض شيئًا آخر. - احصر الطول بـ254. رقم واحد، في العمود وفي الحقل، وفئة كاملة من المُدخلات يمكنك التوقف عن التفكير فيها.
- ابحث عن النطاق، بعيدًا عن المسار الحرج، بفشل يقبل. MX ثم
A، مخزَّن مؤقتًا، ولا يكون أبدًا سببًا لمنع إرسال كان سيعمل لولا ذلك. - اعرض تصحيحًا؛ ولا تجرِه أنت. فحرف واحد عن نطاق شائع سؤال يُطرح، لا نتيجة يُتصرف بموجبها.
- أرسل الرسالة. هذا هو التحقق. وكل ما قبله كان فرزًا أوليًا.
- قل ما هو الخطأ، بكلمات. وهذا هو الجزء الذي يقرر ما إذا كان أي أحد سيُكمل:
| ماذا حدث | ما تقوله النماذج عادة | ما تقوله بدلاً من ذلك |
|---|---|---|
النص لا يحتوي @ | «يرجى إدخال بريد إلكتروني صالح» | «يحتاج عنوان البريد الإلكتروني إلى @ — أكنت تقصد name@example.com؟» |
| النطاق لا يُحلّ | «يرجى إدخال بريد إلكتروني صالح» | «تعذر علينا إيجاد ذلك النطاق. هل التهجئة صحيحة؟» |
| النطاق حرف واحد عن نطاق شائع | لا شيء إطلاقًا؛ يُرسَل النموذج | «أكنت تقصد …؟»، مع العنوان المصحَّح كزر يُضغط |
| هو مدرج في قائمة حظر اخترت استخدامها | «يرجى إدخال بريد إلكتروني صالح» | «لهذا نحتاج عنوانًا ستظل قادرًا على قراءته الشهر القادم.» |
| خرجت الرسالة ولم تُؤكَّد أبدًا | لا شيء إطلاقًا؛ الحساب موجود هناك فحسب | «أرسلنا رابطًا إلى ذلك العنوان. لم يصل؟ أعد إرساله، أو غيّر العنوان.» |
لاحظ كم صفًا يقول الشيء الخاطئ نفسه. فـ«يرجى إدخال بريد إلكتروني صالح» هي العبارة الافتراضية في كل مكان لأنها صحيحة في كل حالة ومفيدة في لا حالة منها: ففي ثلاثة صفوف من خمسة كان العنوان صالحًا فعلاً، ولا طريقة للشخص الذي كتبه ليكتشف في أي صف هو.
النسخة المختصرة
- احذف الفراغات الطرفية من النص. ولا تغيّر شيئًا آخر فيه.
- طابق نمطًا متساهلاً واحدًا — نمط المتصفح أو نمط منصتك — وقف عند هذا الحد. لا تكتب نمطك الخاص.
- ارفض أي شيء أطول من 254 حرفًا، وخزّن عمودًا بهذا الحجم.
- ابحث عن MX للنطاق، والجأ احتياطيًا إلى
A، وخزّنه مؤقتًا، وافعل ذلك بعيدًا عن المسار الحرج، واقبل العنوان حين يفشل البحث. - ارفض نطاقًا لا يُحلّ ونطاقًا ينشر MX فارغًا. واقبل كل ما عدا ذلك مما يعطيك إياه DNS.
- اعرض اقتراح تهجئة حين يكون النطاق قريبًا جدًا من نطاق شائع. ولا تطبّقه أنت أبدًا.
- قرّر بشكل منفصل، وكتابةً، ما إذا كنت تحظر العناوين المؤقتة أو عناوين الأدوار — ولماذا.
- أرسل رسالة برابط يُستخدم مرة واحدة، وعامل النقرة على أنها التحقق، واجعل إعادة الإرسال وتصحيح العنوان أمرًا سهلاً.
- اختبر تلك الحلقة مقابل صندوق وارد حقيقي، بما في ذلك المسارات التي تفشل فيها، واحذف الحسابات غير المؤكَّدة وفق جدول زمني.
تسعة أسطر، والأخيران فقط هما ما يثبتان أي شيء. والسبعة الأخرى موجودة كي تستحق الرسالة في نهايتها الإرسال.
أسئلة
هل يوجد تعبير نمطي رسمي لعناوين البريد الإلكتروني؟
لا، ولا يمكن أن يوجد. فـRFC 5322 يعطي قواعد نحوية لا نمطًا، والنمط الأمين لها سيقبل مسافات بين علامتي اقتباس وتعليقات بين قوسين لا يصدرها أي مزوّد. استخدم النمط الذي تُعرّفه مواصفة HTML لحقل البريد الإلكتروني، أو أي فاحص تشحنه منصتك أصلاً، وأنفق الجهد الذي وفّرته على رسالة التأكيد.
هل يمكنني التحقق من وجود عنوان بريد إلكتروني دون إرسال أي شيء؟
يمكنك أن تسأل؛ ولا يمكنك أن تعرف. نطاق catch-all يقبل كل اسم، والتصنيف الرمادي يجيب بفشل مؤقت متعمَّد، وكبار المزوّدين يقبلون أثناء المحادثة ثم يرتدّون لاحقًا، والخادم الذي لا يعرفك قد يرفض لأسباب تخصك أنت لا المستلِم. والتحسس بالجملة أيضًا يضع عنوان إرسالك في قوائم حظر.
هل name+tag@example.com عنوان صالح؟
نعم. علامة + حرف عادي مسموح به في الجزء المحلي، وعند معظم كبار المزوّدين تُوجِّه أيضًا إلى صندوق البريد الذي قبلها، وهذا ما يجعل العنونة بعلامة + مفيدة. والنموذج الذي يرفضها يرفض عناوين صالحة ويعلن شيئًا عن نفسه وهو يفعل ذلك.
هل عناوين البريد الإلكتروني حساسة لحالة الأحرف؟
النطاق ليس كذلك أبدًا. أما الجزء الذي قبل @ فمتروك، بحسب المعيار، لتقدير الخادم المستقبِل — وفي الواقع تتجاهل كل الشركات الكبرى حالة الأحرف. احتفظ بنسخة بأحرف صغيرة لاكتشاف التكرار، وأرسل إلى النص كما كُتب بالضبط.
كم يمكن أن يطول عنوان البريد الإلكتروني؟
64 حرفًا قبل @، و255 للنطاق، و254 للعنوان كاملاً كما يحمله خادم. وآخر هذه الأرقام الثلاثة هو الرقم الذي تستخدمه: ضعه في عمود قاعدة البيانات وفي الحقل، وتتوقف فئة كاملة من المُدخلات عن كونها مشكلتك.
هل ينبغي أن أحظر عناوين البريد الإلكتروني المؤقتة؟
إن كان خلف التجربة المجانية شيء مكلف، فنعم — وتقبّل أن أي قائمة تستخدمها ناقصة. أما للنشرة البريدية، أو التنزيل، أو الحساب المدفوع، فمن ترفضهم هم غالبًا الحذرون، ولن تراهم أبدًا في أي سجل. المقايضة الكاملة تستحق القراءة قبل تثبيت حزمة تتخذ القرار نيابة عنك.
كيف أختبر تدفق تحقق تسجيل دون صندوق بريد حقيقي؟
أرسل إلى عنوان على نطاق مؤقت عام واقرأه عبر API — بلا تسجيل، وبلا مفتاح، وعنوان جديد لكل تشغيل. ولمجموعة اختبارات تحتاج المئات، وجّه نطاقًا تملكه إلى صندوق وارد catch-all واخترع عنوانًا لكل اختبار. والشرح الكامل موجود في اختبار تدفق تحقق بريد إلكتروني من طرف إلى طرف.


