______________.rarالسلام عليكم ورحمة الله وبركاته
هذه مشاركة لي في المنتدى الراحل www.vb4arab.com ، أحببت أن أنقلها مع بعض التعديلات .
هل سألت نفسك مرة ، كيف تعمل برامج البريد الإلكتروني كـ الأوت لوك ؟
سنحاول في هذه العجالة أن نتعرف على كيفية عمل برامج البريد الإلكتروني .
و الأهم أننا سنتعرف بإذن الله على البروتوكول SMTP و البروتوكول POP (البروتوكول هو : ميعار يعرف كيفية تفاهم الحواسيب مع بعضها البعض )
المعايير التي تؤلف البروتوكول كثيرة كـ(حجم الإطار و طول المعطيات و بتات الفحص و .... إلخ )
وبين هذه المعايير (في طبقة التطبيقات) توجد الأوامر والردود بين الحواسيب ، وهذا ما يهم المبرمجين .
إن الأوامر و الردود (التراسل) بين الأجهزة التي تعمل على أي بروتوكول لا بد و أن تكون معرّفة مسبقاً .
فعلى سبيل المثال ، لا يمكن أن تنشأ من عندك أمر جديد في احد الاجهزة و تتنتظر من الأخر أن يفهم رسالتك فضلاً عن أن يتفاعل معها !
ولهذا ،،،
نريد أن نسلط الضوء في هذا الدرس على الأوامر و الردود (المراسلات)التي تتم بين جهازي حاسب (سيرفر و عميل) عبر البروتوكول SMTP لارسال البريد الإلكتروني و البروتوكول POP لاستقبال البريد الإلكتروني .
** ملاحظة : نحن نتحدث في هذه المشاركة عن أوامر و ردود البروتوكول ، وهذا يعني أن الفائدة من هذا الدرس ليست محصورة على مبرمجي الـ VB فقط **
في البداية يفترض أنه سبق أن تعاملت مع أداة Winsock و تعرفت على خصائصها و طرقها و أحداثها ، إن لم تكن عندك خلفية عن استخدام هذه الأداة فأنصحك بدرس الأستاذ رغيد الطيب / درس : في استخدام Winsock للربط بين الاجهزة ( للمبتدئين ) "هذا الدرس كان كالمرجع في منتدى VB4Arab و أرجو من الأستاذ رغيد الطيب أن يضعه في هذا المنتدى من جديد"
الآن عودة لموضوعنا ، كيفية التخاطب مع السيرفر عبر البروتوكول SMTP و البروتوكول POP .
إن ميكروسوفت أوت لوك ( أو أي برنامج بريد أخر) يقدم لك خدمة إستقبال الإيميل من سيرفر مقدم الخدمة إلى جهازك ، و كذلك العكس فهو يقدم لك خدمة إرسال الإيميلات من جهازك إلى سيرفر مقدم الخدمة ليصدر الإيميل و كأنه من الموقع .
هذا يتم دون أن تفتح صفحة موقع مقدمة الخدمة (الياهو مثلاً).
والسؤال هنا ،،،،،،، كيف يتم هذا ؟
كيف يتراسل Micrsofit OutLook مع موقع مقدمة الخدمة ، وما هي الحوارات التي تتم بينهم ؟؟
** البريد الصادر (SIMPLE MAIL TRANSFER PROTOCOL) ويختصر بـSMTP
عندما تقوم بتصميم رسالة إلكترونية جديدة لترسلها لصديقك عبر برنامج بريدي ، فإن البرنامج يتخاطب مع سيرفر مقدم الخدمة على المنفذ 25 ، طبعاً فتح المنفذ بواسطة الأداة WinSock "وهذا ما سنشرحه بإذن الله" أو دوال API WinSock
هذا المنفذ (25) متفق على أنه محجوز لبروتوكول البريد الصادر SMTP .
لنفرض أن لديك العنوان البريدي التالي MyEmail@gawab.com عند مقدم الخدمة www.gawab.com
و تريد أن ترسل رسالة إلكترونية من جهازك عبر الأوت لوك لصديقك الذي عنوانه A123456789@islamway.net
إن أول ما يفعله برنامج البريد هو :
الإتصال مع السيرفر عبر المنفذ 25 (منفذ البريد الصادر)
إن ملقم خدمة البريد الصادر في موقع www.gawab.com هو SMTP.gawab.com
(من المفترض)إننا نعلم كيف يتم الاتصال مع السيرفر عبر منفذ باستخدام winsock إنه في الأمر التالي :
Winsocl.Connect "SMTP.gawab.com" , 25
نحن الآن طلبنا الاتصال بالسيرفر SMTP.gawab.com عبر المنفذ 25 .
الذي سيحدث الآن أن السيرفر سيرد علينا برسالة . ولكن كيف نقرأ الرسالة ؟
إن كانت قد اطلعت على درس الأستاذ رغيد الطيب أو عندك خلفية عن هذه الآداة فستعرف أنك تقرأ الرسائل القادمة من الطرف الأخر تحت الحدث DataArrival التابع للأداة Winsock باستخدام الأمر winsock.GetData
إذاً سيكون ملخص هذه الفقرة أن تكتب ما يلي
Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) Dim strRespone As String Winsock.GetData strRespone ' المتغير سيحمل قيمة الرسالة القادمة من السيرفر End Sub
إن المتغير strRespone سيحمل قيمة نصية تمثل الرسالة القادمة من السيرفر .
و عبر تحليل هذه الرسالة سنرسل للسيرفر و نستقبل الرسائل الإلكترونية و نعرف عدد الرسائل في صندوق الوارد و نحذف أي رسالة لا نريدها .... إلخ .
المهم هذه الرسالة القادمة من السيرفر تختلف من سيرفر لآخر ولكن ....
الخانات الثلاث الأول منضبطة وهي تمثل الحالة . أما الخانات التي بعدها فتتغير من سيرفر لأخر ولذلك سنهملها.
إن أول رسالة سنستقبلها بعد طلب الاتصال مع السيرفر SMTP.gawab.com ستكون :
220 gawab.com ESMTP
الرقم 220 يعني أنها عملية ناجحة أما بقية الخانات فإنها لا تعنينا هنا .
إذا علمنا أن عملية الإتصال تمت بناجاح نقوم بالخطوة التالية .
نرسل للسيرفر رسالة "Helo gawab" كالتالي :
Winsock.SendData "HELO gawab" & vbCrLf
إن vbCrLf بمثابة زرEnter أو سطر جديد .
سيرد علينا السيرفر برسالة :
250 gawab.com
ما يهمنا هنا الرقم 250 أي أن العمية ناجحة . أما ما بعده فيختلف من سيرفر لآخر .
عندها نرسل للسيرفر أمر "MAIL FROM:" و نوضح فيه الإيميل الصادر(المرسل) الذي هو MyEmail@gawab.com كالتالي :
Winsock.SendData "MAIL FROM: MyEmail@gawab.com" & vbCrLf
سيرد علينا السيرفر بـ :
250 Ok
لاحظ أن الرقم 250 يعني أن العملية ناجحة
عندها نرسل للسيرفر أمر "RCPT TO:" بأن الإيميل سيذهب للعنوان A123456789@islamway.net كتالي :
Winsock.SendData "RCPT TO: A123456789@islamway.net" & vbCrLf
و سيرد علينا السيرفر بـ :
250 ok
وكما قلنا أن الرقم 250 يعني أن العملية ناجحة
بعد ذلك نخبره بأننا سندخل البيانات (موضوع الإيميل و الإيميل)عن طريق ارسال الأمر DATA كالتالي :
Winsock.SendData "DATA" & vbCrLf
سيرد علينا السيرفر بـ :
354 go ahead
المهم هو الرقم 354 أما ما بعده فقد يتغير من سيرفر لاخر ، على سبيل المثال بعض السيرفرات تقول لك اكتب و اقفل الرسالة بنقطة "."
الآن نقوم بإرسال الرسالة كالتالي :
Winsock.SendData "Subject: الحمد لله رب العالمين"& vbCrLf Winsock.SendData "هذا بفضل الله وحده فله الحمد و له الشكر" & vbCrLf
أكتب ما بدا لك و لن يرد عليك السيرفر إلا بعد أن تخبره بأنك قد انتهيت من كتابة الرسالة بإرسال نقطة فقط "." كالتالي :
Winsock.SendData "." & vbCrLf
عندها يعلم السيرفر أنك انتهيت من كتابة الرسالة . فيرسل لك رسالة كالتالي :
250 ok 1046078031 qp 92328
الرقم 250 يعني أن العملية ناجحة .
إذا أردت أن تخرج من السيرفر (تنهي تعاملك معه) تكتب الأمر QUIT كالتالي :
Winsock.SendData "QUIT" & vbCrLf
و سيرد عليك السيرفر بالرسالة :
221 gawab.com
الرقم 221 يعني إنهاء الاتصال مع السيرفر .
في الملف المرفق تستطيع تطبيق الشرح السابق .
آمل أن يكون الدرس واضحاً :rolleyes:
و السلام عليكم ورحمة الله
أبو عابد



