في هذه الصفحة
المقدمة
حياتنا اليومية تكاد لا تخلوا من الـ Emails , سواء كان في الشغل أو برا الشغل ، طب اي حكاية الـ Mail Server وازاي لسه لغاية دلوقتي ما بنعرفش نحذف الـ Emails بعد اما بنبعتها ؟!
ده اللي هنعرفه من خلال المقال ده ، فهنتعرف علي الـ SMTP وازاي بيشتغل ووقتها هنفهم ليه مش بنقدر نحذف الـ Emails اللي بنبعتها.
Sending Emails Workflow
لما بنيجي نبعت أي Email لحد ، الـ Email بيلف ف رحلة لذيذة متوضحة ف الرسمه اللي تحت دي:
الـ MUA هو الـ Client App اللي انت بتبعت منه أو بتشوف عليه الـ Email ومش لازم يكون موجود ف الـ Flow علشان نقدر نبعت Email ، ولكن نقدر نعتبره هو الواجهة اللي بنتعامل من خلالها زي Outlook أو الـ Gmail على سبيل المثال.
فعادي جدًا ممكن نتكلم مع الـ Mail Server باستعمال الـ SDKs وده على سبيل المثال عشان نقدر نبعت Transactional Emails او Marketing Emails.
SMTP - Simple Mail Transfer Protocol
الـ SMTP ببساطة هو الـ Protocol اللي بيخلينا نتكلم مع الـ Mail Server عشان نبعت الـ Emails. ومعندوش أي طريقه نقدر بيها نـ List الـ Emails، في حين الـ MUA بيستخدم Protocols تانية ممكن تكون HTTP عادي عشان يكلم الـ Mail Server ويشوف الـ Emails اللي اتبعتت.
الـ SMTP Server بيتكون من اكتر من Program:
- الـ MTA ( Mail Transfer Agent )
- الـ MDA ( Mail Delivery Agent )
- الـ MSA ( Mail Submission Agent )
كل واحد في دول بيكون عنده مهمة معينة بيعملها عشان ال Mail Server يقدر يبعت او يستقبل الـ Emails.
طب هو ازاي الـ SMTP بيشتغل ؟
الـ SMTP بيعتمد علي TCP كـ Network Layer ودا نقدر نلاحظه من طريقة الكلام معاها.
عشان نفتح Connection معاه بنبعتله HELO
بيرد عليك ب EHELO
الـ OAUTH - Optional
وده عشان لو ال Server بيحتاج نوع من الـ Authentication
MAIL FROM: <test@example.com>
RCPT TO: <me@example.com>
DATA:
Hello this is an email to test SMTP.
.
ولازم يبقا في (.) Period في اخر الـ Email وده لانها بتعرف الـ Server انه كده خلاص انا خلصت فتقدر تستخدم RSET
عشان تبعت Email تاني و QUIT
عشان تقفل ال Connection مع الـ Server.
Example
HELO smtp.example.com 250 EHLO smtp.example.com
MAIL FROM: <sender@example.com> 250 Sender <sender@example.com> OK
RCPT TO: <recipient@domain.com> 250 Recipient <recipient@domain.com> OK
DATA 354 Start mail input; end with . on a line by itself
Subject: This is a test email
Hello,
This is the body of the test email.
Best regards,
The Sender
. 250 OK message accepted for delivery
QUIT 221 closing connection
SMTP Envelope
طب ماذا لو انا عاوز ابعت أو اشيل معلومات تانية من الـ Client للـ SMTP Servers ؟
هنا بيجي باه دور الـ SMTP Envelope
دي بتبقا فيها شوية معلومات من الـ Client Email عشان تشيل شوية معلومات ممكن ال Mail Server يتصرف بناءا عليها بشكل مختلف مع ال Email.
زي ان يكون في شوية Headers بتتبعت مع الـ Email بردو علشان تخلي الـ Mail Client يتصرف بناء عليهم سواء لما بيستلم ال Email او يبعت الـ Email.
فعلي سبيل المثال من ال Headers اللي بنستخدمها ف ال Transactional Emails لما بيبقا عندنا Magic Link Auth زي الزرار اللي بيكون في الـ Email وتقدر من خلاله تعمل Authenticate على الموقع بشكل Passwordless أو حاجة محتاجنها تظهر في Email لوحدها علشان احنا بنستخدم نفس ال Email.
الـ Header ده بيكون اسمه X-Entity-Ref-ID وده بنديله Random Id علشان نمنع انه يحصل Threading للـ Email.
وفيه Headers تانية برضو زي :
- الـ Reply-to: وده بنستعمله لتحديد عنوان Email مختلف للردود.
- الـ CC، BCC
- الـ SUBJECT، Content-Type.
- الـ Return-Path: عنوان الإيميل اللي أُرسل منه الـ Email، بيستخدم لو لم يصل الـ Email (ارتد Bounced).
- الـ Message-ID: بيمنع تكرار الرسائل ويتم توليده تلقائيًا بواسطة سيرفر الـSMTP.
وبالتأكيد الـ Headers اللي موجودة في الـ Email بتكون مهمة جدًا لضمان تحقيق التسليم والأمان!
في الختام
طب ليه مش بنعرف نـ Delete الـ Email؟ دا الـ هنعرفه في باقي الـ Episodes الجاية
و بكده نكون بدأنا مع بعض رحلتنا في اننا نفهم ايه حكاية الـ Mail Servers