أنا لا أسأل عن التحقق الكامل من البريد الإلكتروني.
أريد فقط معرفة الأحرف المسموح بها في أجزاء user-name
و server
من عنوان البريد الإلكتروني. قد يكون هذا الأمر مبالغًا فيه ، فقد تأخذ عناوين البريد الإلكتروني أشكالًا أخرى ، لكنني لا أهتم. أنا أسأل فقط عن هذا النموذج البسيط: [email protected]
(مثل [email protected]) والأحرف المسموح بها في كلا الجزأين.
تنسيق عنوان البريد الإلكتروني هو: [email protected]
(بحد أقصى 64 @ 255 حرفًا ، لا يزيد إجماليه عن 256 حرفًا).
يمكن أن يحتوي كل من local-part
و domain-part
على مجموعة مختلفة من الأحرف المسموح بها ، لكن هذا ليس كل شيء ، حيث توجد قواعد أكثر لذلك.
بشكل عام ، يمكن أن يحتوي الجزء المحلي على هذه ASCII] _ الأحرف:
abcdefghijklmnopqrstuvwxyz
،ABCDEFGHIJKLMNOPQRSTUVWXYZ
،0123456789
،!#$%&'*+-/=?^_`{|}~
،.
(ليس الحرف الأول أو الأخير أو يتكرر ما لم يتم اقتباسه) ،"(),:;<>@[\]
(مع بعض القيود) ،()
(مسموح به داخل الأقواس ، على سبيل المثال (comment)[email protected]
).جزء المجال:
abcdefghijklmnopqrstuvwxyz
،ABCDEFGHIJKLMNOPQRSTUVWXYZ
،0123456789
،-
(ليس الحرف الأول أو الأخير) ،[email protected][192.168.2.1]
أو [email protected][IPv6:2001:db8::1]
.عناوين البريد الإلكتروني هذه صالحة:
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]
(جزء محلي بحرف واحد)"much.more unusual"@example.com
"[email protected]"@example.com
"very.(),:;<>[]\".VERY.\"[email protected]\ \"very\".unusual"@strange.example.com
[email protected]
[email protected]
(اسم المجال المحلي مع عدم وجود مجال المستوى الأعلى)#!$%&'*+-/=?^_`{}|[email protected]
"()<>[]:,;@\\"!#$%&'-/=?^_`{}| ~.a"@example.org
" "@example.org
(المسافة بين علامات الاقتباس)[email protected]
(تم إرسالها من المضيف المحلي)[email protected]
(انظر قائمة نطاقات المستوى الأعلى على الإنترنت )[email protected]
[email protected]
[email protected][IPv6:2001:db8::1]
وهذه الأمثلة غير صالحة:
Abc.example.com
(بدون حرف @
)[email protected]@[email protected]
(يُسمح @
واحد فقط خارج علامتي الاقتباس)a"b(c)d,e:f;gi[j\k][email protected]
(لا يُسمح بأي من الأحرف الخاصة في هذا الجزء المحلي خارج علامات اقتباس)just"not"[email protected]
(يجب فصل السلاسل المقتبسة بنقطة أو العنصر الوحيد الذي يتكون من الجزء المحلي)this is"not\[email protected]
(قد لا توجد مسافات أو علامات اقتباس أو خطوط مائلة للخلف إلا عندما تكون ضمن سلاسل مذكورة وتسبقها شرطة مائلة للخلف)this\ still\"not\[email protected]
(حتى إذا نجا (مسبوقة بخط مائل عكسي) ، يجب أن تظل المساحات وعروض الأسعار وخطوط مائلة عكسية مذكورة في علامات اقتباس)[email protected]
(نقطة مزدوجة قبل @
) ؛ (مع تحذير: يتيح Gmail ذلك من خلال)[email protected]
(نقطة مزدوجة بعد @
)المصدر: عنوان البريد الإلكتروني في ويكيبيديا
RFC2822 Perl's للتحقق من صحة رسائل البريد الإلكتروني:
(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:
\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(
?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[
\t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\0
31]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\
](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+
(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:
(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)
?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\
r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[
\t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)
?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t]
)*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[
\t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*
)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t]
)+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)
*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+
|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r
\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:
\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t
]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031
]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](
?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?
:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?
:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)|(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?
:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?
[ \t]))*"(?:(?:\r\n)?[ \t])*)*:(?:(?:\r\n)?[ \t])*(?:(?:(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|
\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>
@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"
(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?
:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[
\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:[^()<>@,;:\\".\[\] \000-
\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(
?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)?[ \t])*(?:@(?:[^()<>@,;
:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([
^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\"
.\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\
]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\
[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\
r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\]
\000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]
|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?(?:[^()<>@,;:\\".\[\] \0
00-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\
.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,
;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|"(?
:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*))*@(?:(?:\r\n)?[ \t])*
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t])*(?:[
^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\]
]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(?:\r\n)?[ \t])*)(?:,\s*(
?:(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(
?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[
\["()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t
])*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t
])+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?
:\.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|
\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*|(?:
[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".\[\
]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)*\<(?:(?:\r\n)
?[ \t])*(?:@(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["
()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)
?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>
@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*(?:,@(?:(?:\r\n)?[
\t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,
;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\.(?:(?:\r\n)?[ \t]
)*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\
".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*)*:(?:(?:\r\n)?[ \t])*)?
(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\["()<>@,;:\\".
\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])*)(?:\.(?:(?:
\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z|(?=[\[
"()<>@,;:\\".\[\]]))|"(?:[^\"\r\\]|\\.|(?:(?:\r\n)?[ \t]))*"(?:(?:\r\n)?[ \t])
*))*@(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])
+|\Z|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*)(?:\
.(?:(?:\r\n)?[ \t])*(?:[^()<>@,;:\\".\[\] \000-\031]+(?:(?:(?:\r\n)?[ \t])+|\Z
|(?=[\["()<>@,;:\\".\[\]]))|\[([^\[\]\r\\]|\\.)*\](?:(?:\r\n)?[ \t])*))*\>(?:(
?:\r\n)?[ \t])*))*)?;\s*)
كان regexp الكامل لعناوين RFC2822 مجرد 3.7 كيلو.
راجع أيضًا: RFC 822 محلل عنوان البريد الإلكتروني في PHP .
التعريفات الرسمية لعناوين البريد الإلكتروني موجودة في:
ذات صلة:
ويكيبيديا لديها مقال جيد حول هذا ، و المواصفات الرسمية هنا . من ويكيبيديا:
قد يستخدم الجزء المحلي من عنوان البريد الإلكتروني أيًا من هذه الأحرف ASCII:
- الأحرف الإنجليزية الكبيرة والصغيرة (a-z، A-Z)
- الأرقام من 0 إلى 9
- الشخصيات ! # $٪ & '* + -/=؟ ^ _ `{| } ~
- حرف . (نقطة ، فترة ، نقطة توقف كاملة) بشرط ألا تكون الشخصية الأولى أو الأخيرة ، وكذلك بشرط ألا تظهر مرتين أو أكثر على التوالي.
بالإضافة إلى ذلك ، يُسمح بالسلاسل المقتبسة (على سبيل المثال: "John Doe" @ example.com) ، مما يسمح بالشخصيات التي سيتم حظرها على خلاف ذلك ، ومع ذلك لا تظهر في الممارسات الشائعة. يحذر RFC 5321 أيضًا من أن "المضيف الذي يتوقع تلقي البريد يجب أن يتجنب تعريف صناديق البريد حيث يتطلب الجزء المحلي (أو يستخدم) نموذج السلسلة المقتبسة".
يمكنك أن تبدأ من مقالة ويكيبيديا :
جوجل تفعل شيئا مثيرا للاهتمام مع عناوين gmail.com الخاصة بهم. تسمح عناوين gmail.com فقط بالأحرف (a-z) والأرقام والفترات (التي يتم تجاهلها).
على سبيل المثال ، [email protected] هو نفسه [email protected] ، وسيتم إرسال كلا عنوانَي البريد الإلكتروني إلى صندوق البريد نفسه. يتم تسليم [email protected] أيضًا إلى صندوق البريد نفسه.
للإجابة على السؤال ، يعتمد الأمر في بعض الأحيان على الجهة المنفذة على مقدار معايير RFC التي يريدون اتباعها. يتوافق نمط عنوان gmail.com من Google مع المعايير. يفعلون ذلك بهذه الطريقة لتجنب الارتباك حيث يأخذ أشخاص مختلفون عناوين بريد إلكتروني مشابهة ، على سبيل المثال.
*** gmail.com accepting rules ***
[email protected] (accepted)
[email protected] (bounce and account can never be created)
[email protected] (accepted)
D.Oy'[email protected] (bounce and account can never be created)
يعد رابط ويكيبيديا مرجعًا جيدًا لما تسمح به عناوين البريد الإلكتروني عمومًا. http://en.wikipedia.org/wiki/Email_address
اسم:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!#$%&'*+-/=?^_`{|}~.
الخادم:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-.
التحقق من وجود @ و. ثم إرسال بريد إلكتروني لهم للتحقق.
ما زلت لا أستطيع استخدام عنوان البريد الإلكتروني .name الخاص بي على 20٪ من المواقع على الإنترنت لأن شخصًا ما قام بتفكيك التحقق من صحة بريده الإلكتروني أو لأنه يسبق أن تكون العناوين الجديدة صالحة.
تشير الإجابة المقبولة إلى مقالة ويكيبيديا عند مناقشة الجزء المحلي الصحيح لعنوان البريد الإلكتروني ، لكن ويكيبيديا ليست سلطة في هذا الصدد.
IETF RFC 3696هي سلطة في هذا الشأن ، ويجب الرجوع إليها في القسم 3. القيود على عناوين البريد الإلكتروني في الصفحة 5:
تتكون عناوين البريد الإلكتروني المعاصرة من "جزء محلي" مفصول عن "جزء المجال" (اسم مجال مؤهل بالكامل) من خلال علامة تسجيل ("@"). يتوافق بناء جملة المجال مع ذلك الموجود في القسم السابق. تنطبق المخاوف المحددة في هذا القسم حول التصفية وقوائم الأسماء على أسماء النطاق المستخدمة في سياق البريد الإلكتروني أيضًا. يمكن أيضًا استبدال اسم المجال بعنوان IP بين قوسين معقوفين ، لكن هذا النموذج لا يشجعه بشدة إلا لأغراض الاختبار واستكشاف الأخطاء وإصلاحها.
قد يظهر الجزء المحلي باستخدام اصطلاحات الاقتباس الموضحة أدناه. نادراً ما يتم استخدام النماذج المقتبسة في الممارسة ، ولكنها مطلوبة لبعض الأغراض المشروعة. وبالتالي ، لا ينبغي رفضها في تصفية الإجراءات ولكن ، بدلاً من ذلك يجب أن يتم تمريرها إلى نظام البريد الإلكتروني للتقييم بواسطة المضيف الوجهة.
القاعدة الدقيقة هي أن أي ASCII حرف ، بما في ذلك أحرف التحكم ، قد تظهر مقتبسة ، أو في سلسلة مقتبسة. عند الحاجة إلى الاقتباس ، يتم استخدام حرف الخط المائل العكسي لاقتباس الحرف التالي. فمثلا
Abc\@[email protected]
هو شكل صحيح من عنوان البريد الإلكتروني. قد تظهر مسافات فارغة ، كما هو الحال في
Fred\ [email protected]
يمكن أيضًا استخدام حرف الخط المائل العكسي للاقتباس من نفسه ، على سبيل المثال ،
Joe.\\[email protected]
بالإضافة إلى الاقتباس باستخدام حرف الخط المائل العكسي ، قد يتم استخدام أحرف الاقتباس المزدوج التقليدية لتطويق الجمل. فمثلا
"[email protected]"@example.com "Fred Bloggs"@example.com
هي أشكال بديلة من المثالين الأولين أعلاه. نادراً ما يوصى بهذه النماذج المقتبسة ، وهي غير شائعة في الممارسة العملية ، ولكن ، كما تمت مناقشته أعلاه ، يجب أن تدعمها التطبيقات التي تعالج عناوين البريد الإلكتروني. على وجه الخصوص ، غالبًا ما تظهر النماذج المقتبسة في سياق العناوين المرتبطة بالتحولات من الأنظمة والسياقات الأخرى ؛ لا تزال تنشأ هذه المتطلبات الانتقالية ، ولأن النظام الذي يقبل عنوان البريد الإلكتروني المقدم من المستخدم لا يمكنه "معرفة" ما إذا كان هذا العنوان مرتبطًا بنظام قديم ، فيجب قبول نماذج العناوين وتوجيهها إلى بيئة البريد الإلكتروني.
بدون علامات اقتباس ، قد تتكون الأجزاء المحلية من أي مجموعة من
أحرف أبجدية أو أرقام أو أي من الأحرف الخاصة! # $ % & ' * + - / = ? ^ _ ` . { | } ~
قد تظهر الفترة (".") أيضًا ، ولكن لا يجوز استخدامها لبدء الجزء المحلي أو إنهائه ، كما قد لا تظهر فترتان أو أكثر من فترات متتالية. إذا تم ذكره بشكل مختلف ، فقد يظهر أي حرفASCII حرف (طباعة) بخلاف علامة ("@") أو الخط المائل العكسي أو علامة اقتباس مزدوجة أو فاصلة أو أقواس مربعة دون اقتباس. إذا كان يجب أن يظهر أي من قائمة الأحرف المستبعدة ، فيجب أن يتم اقتباسها. أشكال مثل
[email protected] customer/[email protected] [email protected] !def!xyz%[email protected] [email protected]
صالحة ويتم عرضها بانتظام إلى حد ما ، ولكن يُسمح بأي من الأحرف المذكورة أعلاه.
كما فعل الآخرون ، أقوم بتقديم regex الذي يعمل لكل من PHP وجافا سكريبت للتحقق من صحة عناوين البريد الإلكتروني:
/^[a-z0-9!'#$%&*+\/=?^_`{|}~-]+(?:\.[a-z0-9!'#$%&*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-zA-Z]{2,}$/i
قراءة جيدة على المسألة .
مقتطفات:
These are all valid email addresses!
"Abc\@def"@example.com
"Fred Bloggs"@example.com
"Joe\\Blow"@example.com
"[email protected]"@example.com
customer/[email protected]
\[email protected]
!def!xyz%[email protected]
[email protected]
الجواب القصير هو أن هناك 2 إجابات. هناك معيار واحد لما يجب عليك فعله. أي سلوك حكيم وسيُبعدك عن المشاكل. هناك معيار آخر (أوسع بكثير) للسلوك الذي يجب عليك قبوله دون إثارة المتاعب. تعمل هذه الثنائية لإرسال واستقبال البريد الإلكتروني ولكن لديها تطبيق واسع في الحياة.
للحصول على دليل جيد للعناوين التي تنشئها ؛ راجع: http://www.remote.org/jochen/mail/info/chars.html
لتصفية رسائل البريد الإلكتروني الصالحة ، ما عليك سوى تمرير أي شيء مفهوم بما يكفي لرؤية الخطوة التالية. أو ابدأ في قراءة مجموعة من RFCs ، والحذر ، وهنا يكون التنين.
كما يمكن العثور عليه في رابط ويكيبيديا هذا
قد يستخدم الجزء المحلي من عنوان البريد الإلكتروني أيًا من هذه الأحرف ASCII:
الأحرف اللاتينية الكبيرة والصغيرة
A
إلىZ
وa
إلىz
؛الأرقام
0
إلى9
؛أحرف خاصة
!#$%&'*+-/=?^_`{|}~
؛dot
.
، بشرط ألا يكون الحرف الأول أو الأخير ما لم يتم الاستشهاد به ، ونص أيضًا على أنه لا يظهر على التوالي ما لم يتم اقتباسه (على سبيل المثال ،[email protected]
غير مسموح به ولكن"John..Doe"@example.com
مسموح به) ؛يُسمح بوجود مسافات و
"(),:;<>@[\]
مع قيود (يُسمح بها فقط داخل سلسلة مُقتبسة ، كما هو موصوف في الفقرة أدناه ، وبالإضافة إلى ذلك ، يجب أن تسبق الخط المائل العكسي أو الاقتباس المزدوج بخط مائل عكسي) ؛يُسمح بالتعليقات مع أقواس في كلا طرفي الجزء المحلي ؛ مثلا
john.smith(comment)@example.com
و(comment)[email protected]
كلاهما يعادل[email protected]
.بالإضافة إلى ما ورد أعلاه ASCII أحرف ، يُسمح باستخدام الأحرف الدولية أعلى من U + 007F ، المشفرة كـ UTF-8 ، بواسطة RFC 6531 ، على الرغم من أن أنظمة البريد قد تقيد الأحرف التي يجب استخدامها عند تعيين محلي - أجزاء.
قد توجد سلسلة مقتبسة ككيان مفصول بنقطة داخل الجزء المحلي ، أو قد توجد عندما تكون علامات الاقتباس الخارجية هي الأحرف الأبعد للجزء المحلي (على سبيل المثال ،
abc."defghi"[email protected]
أو"abcdefghixyz"@example.com
غير مسموح بها ؛ على العكس ،abc"defghi"[email protected]
غير مسموح بها ؛abc\"def\"[email protected]
). السلاسل والأحرف المقتبسة مع ذلك ، غير شائعة الاستخدام. RFC 5321 يحذر أيضًا من أن "المضيف الذي يتوقع تلقي البريد يجب أن يتفادى تعريف صناديق البريد حيث يتطلب الجزء المحلي (أو يستخدم) نموذج السلسلة المقتبسة".يتم التعامل مع الجزء المحلي
postmaster
بشكل خاص — فهو غير حساس لحالة الأحرف ، ويجب إعادة توجيهه إلى مسؤول البريد الإلكتروني للنطاق. من الناحية الفنية ، تكون جميع الأجزاء المحلية الأخرى حساسة لحالة الأحرف ، وبالتالي[email protected]
و[email protected]
تحدد صناديق بريد مختلفة ؛ ومع ذلك ، تعامل العديد من المؤسسات الأحرف الكبيرة والصغيرة كـ مكافئ.على الرغم من المجموعة الواسعة من الشخصيات الخاصة الصالحة تقنياً ؛ المنظمات وخدمات البريد وخوادم البريد وعملاء البريد في الممارسة العملية في كثير من الأحيان لا تقبل كل منهم. على سبيل المثال ، لا يسمح Windows Live Hotmail إلا بإنشاء عناوين البريد الإلكتروني باستخدام الأحرف الهجائية والنقطة (
.
) وتسطير أسفل السطر (_
) والوصل (-
). النصيحة الشائعة هي تجنب استخدام بعض الأحرف الخاصة لتجنب خطر رسائل البريد الإلكتروني المرفوضة.
من أجل البساطة ، أقوم بتعقيم التقديم عن طريق إزالة جميع النصوص ضمن علامات تنصيص مزدوجة وتلك المرتبطة بعلامات اقتباس مزدوجة قبل التحقق من الصحة ، ووضع kibosh على عمليات إرسال عنوان البريد الإلكتروني بناءً على ما هو مسموح به. فقط لأن شخصًا ما يمكنه الحصول على John .. "The * $ hizzle * Bizzle" .. عنوان [email protected] لا يعني أنني يجب أن أسمح بذلك في نظامي. نحن نعيش في المستقبل حيث قد يستغرق وقتًا أقل للحصول على عنوان بريد إلكتروني مجاني بدلاً من القيام بعمل جيد في محو مؤخرتك. ولا يبدو الأمر كما لو أن معايير البريد الإلكتروني لا يتم لصقها بجوار المدخلات التي توضح ما هو مسموح وما هو غير مسموح به.
أقوم أيضًا بتعقيم ما لا يسمح به على وجه التحديد العديد من طلبات RFC بعد إزالة المواد المقتبسة. يبدو أن قائمة الشخصيات والأنماط غير المسموح بها على وجه التحديد قائمة أقصر بكثير للاختبار من أجلها.
غير مسموح بها:
local part starts with a period ( [email protected] )
local part ends with a period ( [email protected] )
two or more periods in series ( [email protected] )
&’`*|/ ( some&thing`[email protected] )
more than one @ ( [email protected]@Host.com )
:% ( mo:characters%mo:[email protected] )
في المثال المعطى:
John.."The*$hizzle*Bizzle"[email protected] --> [email protected]
[email protected] --> [email protected]
يعد إرسال رسالة تأكيد عبر البريد الإلكتروني إلى النتيجة المتبقية عند محاولة إضافة أو تغيير عنوان البريد الإلكتروني طريقة جيدة لمعرفة ما إذا كان الرمز الخاص بك يمكنه التعامل مع عنوان البريد الإلكتروني المقدم. إذا نجحت رسالة البريد الإلكتروني في التحقق من الصحة بعد عدة جولات من التعقيم حسب الحاجة ، فافتح هذا التأكيد. إذا تم إرجاع طلب من رابط التأكيد ، فيمكن نقل البريد الإلكتروني الجديد من الحالة أو التخزين المطهر || المؤقت ليصبح بريدًا إلكترونيًا حقيقيًا ومخزنًا من الدرجة الأولى.
يمكن إرسال إشعار بفشل أو نجاح تغيير عنوان البريد الإلكتروني إلى عنوان البريد الإلكتروني القديم إذا كنت تريد أن تكون موضع تقدير. قد تسقط إعدادات الحساب غير المؤكدة خارج النظام كمحاولات فاشلة بالكامل بعد فترة زمنية معقولة.
لا أسمح برسائل البريد الإلكتروني ذات الرائحة الكريهة على نظامي ، وربما هذا هو مجرد إهدار الأموال. لكن ، 99.9٪ من الوقت يفعلون فقط الشيء الصحيح ولديهم بريد إلكتروني لا يدفع حدود المطابقة إلى الحافة باستخدام سيناريوهات توافق حالة الحافة. كن حذرًا من regex DDoS ، فهذا مكان يمكن أن تتعرض فيه للمشاكل. وهذا يتعلق بالشيء الثالث الذي أقوم به ، لقد وضعت حدًا لطول المدة التي أرغب فيها في معالجة أي بريد إلكتروني واحد. إذا احتاج الأمر إلى إبطاء أجهزتي للتحقق من صحتها - فلن يتجاوز منطق نقطة نهاية واجهة برمجة التطبيقات للبيانات الواردة.
تحرير: استمرت هذه الإجابة في التورط في كونها "سيئة" ، وربما كانت تستحقها. ربما لا تزال سيئة ، وربما لا.
الإجابة هي (تقريبًا) ALL
(7 بت ASCII).
إذا كانت قواعد التضمين "... مسموح بها بموجب بعض/أي/لا شيء ..."
فقط بالنظر إلى إحدى قواعد التضمين المحتملة العديدة للنص المسموح به في الجزء "نص المجال" في RFC 5322 في الجزء العلوي من الصفحة 17 نجد:
dtext = %d33-90 / ; Printable US-ASCII
%d94-126 / ; characters not including
obs-dtext ; "[", "]", or "\"
تُستخدم الأحرف الثلاثة المفقودة فقط في هذا الوصف في []
حرفيًا للمجال ، لتكوين زوج مقتبس \
، وحرف المسافة البيضاء (٪ d32). مع ذلك ، يتم استخدام النطاق بأكمله 32-126 (عشري). يظهر شرط مماثل كـ "qtext" و "ctext". ويسمح أيضا العديد من الشخصيات السيطرة/المستخدمة. تظهر قائمة بأحرف التحكم هذه في الصفحة 31 القسم 4.1 من RFC 5322 كـ obs-NO-WS-CTL.
obs-NO-WS-CTL = %d1-8 / ; US-ASCII control
%d11 / ; characters that do not
%d12 / ; include the carriage
%d14-31 / ; return, line feed, and
%d127 ; white space characters
يُسمح بكل رموز التحكم هذه كما هو مذكور في بداية القسم 3.5:
.... MAY be used, the use of US-ASCII control characters (values
1 through 8, 11, 12, and 14 through 31) is discouraged ....
وبالتالي فإن قاعدة التضمين هذه "واسعة للغاية". أو ، بمعنى آخر ، القاعدة المتوقعة "تبسيط للغاية".