إرسال E-mail
كيف تخاطب السيرفر لتقرأ أو ترسل بريد إلكتروني
بسم الله الرحمن الرحيم
السلام عليكم ورحمة الله وبركاته
نتعرف على طريقة إستخدام أداة Winsock في إرسال و استقبال الرسائل الإلكترونية .
و سنتعرف في هذه العجالة على طريقة التخاطب مع السيرفر عبر المنفذ 25 (ملقم البريد الصادر) و المنفذ 110 (ملقم البريد الوارد) .
في البداية يفترض أنه سبق أن تعاملت مع أداة Winsock و تعرفت على خصائصها و طرقها و أحداثها
الآن عودة لموضوعنا ،
إن ميكروسوفت أوت لوك ( أو أي برنامج بريد أخر) يقدم لك خدمة إستقبال الإيميل من سيرفر مقدم الخدمة إلى جهازك و كذلك العكس ، فهو يقدم لك خدمة إرسال الإيميلات من جهازك إلى سيرفر مقدم الخدمة ليصدر الإيميل و كأنه من الموقع ، هذا يتم دون أن تفتح صفحة موقع مقدمة الخدمة .
والسؤال هنا ،،،،،،، كيف يتم هذا ؟
كيف يتراسل Microzfit OutLook مع موقع مقدمة الخدمة ، وما هي الحوارات التي تتم بينهم .
عندما تقوم بتصميم رسالة إلكترونية جديدة لترسلها لصديقك عبر برنامج بريدي ، فإن البرنامج يتخاطب مع سيرفر مقدم الخدمة على المنفذ 25
لنفرض أن لديك العنوان البريدي التالي MyEmail@gawab.com عند مقدم الخدمة gawab.com و تريد أن ترسل رسالة إلكترونية من جهازك عبر الأوت لوك لصديقك الذي عنوانه A123456789@islamway.net
إن أول ما سيفعله برنامج البريد هو :
الإتصال مع السيرفر عبر المنفذ 25 (منفذ الصادر)
إن ملقم خدمة البريد الصادر في موقع gawab.com هو SMTP.gawab.com
(من المفترض)إننا نعلم كيف يتم الاتصال مع السيرفر عبر منفذ باستخدام winsock إنه في الأمر التالي :
code: Winsocl.Connect "SMTP.gawab.com" , 25
نحن الآن طلبنا الاتصال بالسيرفر SMTP.gawab.com عبر المنفذ 25 .
الذي سيحدث الآن أن السيرفر سيرد علينا برسالة . ولكن كيف نقرأ الرسالة ؟
إن كانت قد اطلعت على درس الأستاذ رغيد الطيب أو عندك خلفية عن هذه الآداة فستعرف أنك تقرأ الرسائل القادمة من الطرف الأخر تحت الحدث DataArrival التابع للأداة Winsock باستخدام الأمر winsock.GetData
إذاً سيكون ملخص هذه الفقرة أن تكتب ما يلي
code: Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) Dim strRespone As String Winsock.GetData strRespone ' المتغير سيحمل قيمة الرسالة القادمة من السيرفر End Sub
إن المتغير strRespone سيحمل قيمة نصية تمثل الرسالة القادمة من السيرفر .
و عبر تحليل هذه الرسالة سنرسل للسيرفر و نستقبل الرسائل الإلكترونية و نعرف عدد الرسائل في صندوق الوارد و نحذف أي رسالة لا نريدها .... إلخ .
المهم هذه الرسالة القادمة من السيرفر تختلف من سيرفر لآخر ولكن ....
الخانات الثلاث الأولى منضبطة وهي تمثل الحالة . أما الخانات التي بعدها فتتغير من سيرفر لأخر .
إن أول رسالة سنستقبلها بعد طلب الاتصال مع السيرفر SMTP.gawab.com ستكون :
code: 220 gawab.com ESMTP
إن الرقم 220 يعني أنها عملية ناجحة أما بقية الخانات فإنها لا تعنينا هنا .
إذا علمنا أن عملية الإتصال تمت بناجاح فنقوم بالخطوة التالية .
نرسل للسيرفر رسالة "Helo gawab" كالتالي :
code: Winsock.SendData "HELO gawab" & vbCrLf
إن vbCrLf بمثابة زرEnter أو سطر جديد .
سيرد علينا السيرفر برسالة :
code: 250 gawab.com
ما يهمنا هنا الرقم 250 أي أن العمية ناجحة . أما ما بعده فيختلف من سيرفر لآخر .
عندها نرسل للسيرفر أمر إرسال إيميل "MAIL FROM:" و نعطيه الإيميل الصادر الذي هو MyEmail@gawab.com كالتالي :
code: Winsock.SendData "MAIL FROM: MyEmail@gawab.com" & vbCrLf
سيرد علينا السيرفر بـ :
code: 250 Ok
لاحظ أن الرقم 250 يعني أن العملية ناجحة
عندها نرسل للسيرفر أمر "RCPT TO:" بأن الإيميل سيذهب للعنوان A123456789@islamway.net كتالي :
code: Winsock.SendData "RCPT TO: A123456789@islamway.net" & vbCrLf
و سيرد علينا السيرفر بـ :
code: 250 ok
وكما قلنا أن الرقم 250 يعني أن العملية ناجحة
بعد ذلك نخبره بأننا سندخل البيانات عن طريق ارسال الأمر DATA كالتالي :
code: Winsock.SendData "DATA" & vbCrLf
سيرد علينا السيرفر بـ :
code: 354 go ahead
المهم هو الرقم 354 أما ما بعده فقد يتغير من سيرفر لاخر
الآن نقوم بإرسال الرسالة كالتالي :
code: Winsock.SendData "Subject: الحمد لله رب العالمين"& vbCrLf Winsock.SendData "هذا بفضل الله وحده فله الحمد و له الشكر" & vbCrLf
أكتب ما بدا لك و لن يرد عليك السيرفر إلا بعد أن تخبره بأنك قد انتهيت من كتابة الرسالة بإرسال نقطة فقط "." كالتالي :
code: Winsock.SendData "." & vbCrLf
عندها يعلم السيرفر أنك انتهيت من كتابة الرسالة . فيرسل لك رسالة كالتالي :
code: 250 ok 1046078031 qp 92328
الرقم 250 يعني أن العملية ناجحة .
إذا أردت أن تخرج من السيرفر تكتب الأمر QUIT كالتالي :
code: Winsock.SendData "QUIT" & vbCrLf
و سيرد عليك السيرفر بالرسالة :
code: 221 gawab.com
الرقم 221 يعني إنهاء الاتصال مع السيرفر .
هذا فيما يخص البريد الصادر ، أما البريد الوارد فسنتطرق له في الدرس القادم بإذن الله .
يمكنك عبر الملف المرفق إرسال أوامر للسيرفر و استقبال رسائل السيرفر الذي تحدده مع كتابة المنفذ المناسب .
فقط أكتب الأمر ، مثلاً :
أكتب HELO gawab في خانة كتابة الأوامر للسيرفر ثم زر إنتر و سيتم ارسال الأمر بإذن الله .
هذا و الله أعلم
وصلى الله و سلم على نبينا محمد ، والسلام عليكم ورحمة الله وبركاته
منقول عن أخوكم في الله
السلام عليكم ورحمة الله وبركاته
نكمل بحمد الله الجزء الثاني من الدرس وهو : كيف تقرأ بريدك الإلكتروني .
إن البرتوكول Post Office Protocol المعروف إختصاراً بـ POP يعمل على المنفذ 110 .
معني ذلك أن إن أردت أن تعمل اتصال مع الملقم تضع الأمر التالي :
Winsocl.Connect "POP.gawab.com" , 110
على افتراض أننا نريد الاتصال مع ملقم سيرفر جواب دوت كوم .
إن أول رد من السيرفر سيكون كالتالي :
<OK <91132.1046951485@gawab.com+
و كما قلنا في الـ SMTP أننا نهتم بالخانات الثلاث الأولى (مثل 220 و 250 و 221 و 254 ) لتحليل رد السيرفر ، كذلك في الـ POP فإن الخانات الثلاث أو الأربع الأولى تعبر عن جواب السيرفر بالقبول أو الرفض .
أي أن :
OK+
تعني موافق أو صحيح
بينما
ERR-
تعنى خطأ أو رفض .
و على هذا نستطيع تحليل رسائل السيرفر .
أما أوامر السيرفر فهي على النحو التالي :
USER name valid in the AUTHORIZATION state PASS string QUIT STAT valid in the TRANSACTION state LIST [msg] RETR msg DELE msg NOOP RSET QUIT
والآن لنأخذ عليها مثال (باستخدام البرنامج المرفق في المشاركة الأولى):
لنعمل اتصال على الملقم POP.gawab.com و اجعل المنفذ = 110
اضغط على زر Connection أي اتصال .
سيرد عليك السيرفر برسالة كهذه :
<OK <91132.1046951485@gawab.com+
جيد السيرفر الآن يقبل الاتصال .
الآن لنضع له البريد الذي نريد أن نفتحه ، أكتب في خانة الأوامر النص التالي (على افتراض أن عنوانك البريدي هو mr_zahar@gawab.com):
USER mr_zahar@gawab.com
ستجد أن السيرفر رد عليك بـ :
OK+
أي عملية مقبولة .
الآن يجب أن نرسل كلمة السر كالتالي (على افتراض أن كلمة السر هي aaaa1111):
PASS aaaa1111
إن كانت كلمة السر صحيحة فسيرد عليك السيرفر بـ +OK و إن كانت خاطئة سيرد عليك بـ -ERR .
ملاحظة :
قد تكون كلمة السر صحيحة و لكن السيرفر لا يقبل الدخول عبر المنفذ 110 ، و مثال على ذلك موقع Yahoo فإنه لا يقبل العملية إلا إن كنت مشترك عندهم بالخدمة (بمقابل مادي) أو الخيار الآخر أن تدخل على بريدك عبر المتصفح .
نكمل ...........
الآن نريد أن نتعرف على حالة البريد و عدد الرسائل فيه ، إن الأمر Stat يوفر لك ذلك :
Stat
سيرد عليك السيرفر بـ
OK 6 7536
حيث أن الخانة الخامسة (الرقم 6) تعنى عدد الرسائل في البريد .
لتتعرف على حجم كل رسالة بالبايت ، الأمر List يوفر لك ذلك :
List
و سيرد عليك السيرفر بالنتيجة :
1 3032 2 1068 3 1399 4 1399 5 267 6 371 .
جيد ، لنفرض أننا نريد أن نقرأ الرسالة الأولي ، الأمر retr يخدمنا :
retr 1
سيرد علينا السيرفر بالرسالة :
Received: (qmail 28741 invoked by uid 1004); 24 Feb 2003 10:18:53 -0000 Received: from unknown (HELO gawab) (212.93.217.222) by gawab.com with SMTP; 24 Feb 2003 10:18:37 -0000 الحمد لله رب العالمين ، والصلاة والسلام على محمد و أله و صحبه أجمعين . Status: RO X-UIDL: 1046081936.28764_0.,S=220 .
ممتاز لنفرض أننا نريد أن نحذف رسالة معينة ؟
الأمر Dele سيخدمنا في هذا :
Dele 1
و سيرد السيرفر بـ:
OK+
أما إن أردت قطع الاتصال مع السيرفر فالأمر Quit سيفيدك في هذا :
Quit
طبعاً سيرد عليك السيرفر بـ :
OK+
هذا بشكل عام ، و من أراد الإستزادة في موضوع البرتوكول POP أو SMTP فانصحه بـ :
http://www.faqs.org/rfcs/rfc1939.html
http://www.faqs.org/rfcs/rfc821.html
والله الموفق , ولا تنسونا من دعوة صالحة
و صلى الله على نبينا محمد و على آله و صحبه أجمعين .
والسلام عليكم ورحمة الله وبركاته
أخوكم في الله ، أبو عابد
هذا الموضوع مغلق.