MSVS

تعلم : بروتوكول البريد الصادر SMTP

22 ردود في هذا الموضوع

______________.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 .

لنفرض أن لديك العنوان البريدي التالي [email protected] عند مقدم الخدمة www.gawab.com

و تريد أن ترسل رسالة إلكترونية من جهازك عبر الأوت لوك لصديقك الذي عنوانه [email protected]

إن أول ما يفعله برنامج البريد هو :

الإتصال مع السيرفر عبر المنفذ 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:" و نوضح فيه الإيميل الصادر(المرسل) الذي هو [email protected] كالتالي :

Winsock.SendData "MAIL FROM: [email protected]"  & vbCrLf

سيرد علينا السيرفر بـ :

250 Ok

لاحظ أن الرقم 250 يعني أن العملية ناجحة

عندها نرسل للسيرفر أمر "RCPT TO:" بأن الإيميل سيذهب للعنوان [email protected] كتالي :

Winsock.SendData "RCPT TO: [email protected]"  & 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:

و السلام عليكم ورحمة الله

أبو عابد

تم تعديل بواسطه MSVS
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

الملف المرفق (في أعلى الموضوع) يوجد به الكود اللازم للتخاطب مع السيرفر .

للاستفادة من الملف المرفق اتبع الآتي :

1- ضع عنوان الملقم :

SMTP.gawab.com للبريد الصادر

2- ادخل المنفذ :

25 للبريد الصادر

3- انقر على إتصال . و انتظر حتى يرد عليك السيرفر .

4- أكتب HELO gawab في خانة كتابة الأوامر للسيرفر ثم زر تنفيذ و سيتم ارسال الأمر بإذن الله .

سيرد عليك السيرفر كما سبق و أن شرحنا في الأعلى

تعرفنا في درسنا السابق على كيفية أرسال الأوامر للسيرفر و قراءة الرسائل منه عبر ملقم البريد الصادر SMTP و المنفذ 25.

و استكمالاً لهذا فإننا نجمل الأوامر التي ذكرنها في الدرس السابق على النحو التالي :

Helo 
Mail From:
Rcpt To:
Data
.
Quit

وكذلك نجمل الرسائل المستقبله من السيرفر على النحو التالي :

220
250
354
221

وقبل أن أنسى ،،

إن أوامر البرتوكول SMTP و الرسائل المرتده أكثر من ذلك ، فقد تظهر لك رسالة رقم 520 ، فما هو معنى هذه الرسالة ؟

هذا الجدول يشرح أنواع الرسائل مع ذكر أرقامها :

500 Syntax error, command unrecognized

[This may include errors such as command line too long]
501 Syntax error in parameters or arguments
502 Command not implemented
503 Bad sequence of commands
504 Command parameter not implemented
211 System status, or system help reply
214 Help message
[Information on how to use the receiver or the meaning
of a particular non-standard command;
this reply is useful only to the human user]

220 <domain> Service ready
221 <domain> Service closing transmission channel
421 <domain> Service not available, closing transmission channel
[This may be a reply to any command if the service knows it must shut down]
250 Requested mail action okay, completed
251 User not local; will forward to <forward-path>
450 Requested mail action not taken: mailbox unavailable [E.g., mailbox busy]
550 Requested action not taken: mailbox unavailable
[E.g., mailbox not found, no access]
451 Requested action aborted: error in processing
551 User not local; please try <forward-path>
452 Requested action not taken: insufficient system storage
552 Requested mail action aborted: exceeded storage allocation
553 Requested action not taken: mailbox name not allowed
[E.g., mailbox syntax incorrect]
354 Start mail input; end with <CRLF>.<CRLF>
554 Transaction failed

المرجع :

http://www.faqs.org/rfcs/rfc821.html

والسلام عليكم ورحمة الله وبركاته

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

درس ممتاز أخي MSVS ..

جزاك الله خيراً على إعادة كتابته ..

أتمنى لك التوفيق ..

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ...

بارك الله فيك اخي MSVS و جعل عملك هذا خالصاً لوجه الكريم ، فعلاً موضوع جميل و عندي فقط ستفسار حول نقطة ارسل البريد ..

حيث ان ارسال الرسائل الى السيرفر يتطلب الاتصال معه عبر المنفذ 25 .. فهل اذا تم غلق هذا المنفذ معناه اني لا استطيع ان ارسل اي رسالة من جهازي سواء اكان بريدي على الهوتميل او غير ه.. ؟

و ايضاً ارفق كتاب الأخ رغيد حول الـ Winsock لمن يريد الاطلاع عليه ،،

بنت اليمن ،،

_______________________________.pdf

تم تعديل بواسطه بنت اليمن
0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مشكووور

لكن عندي سؤال لو سمحت ,,

ماذا عن خادم البريد نفسه

كيف يمكن معرفة خادم البريدsmtp لمزود الخدمه

اللى اعرفه انها تستخدم dns أو .....

برمجيا كيف؟؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله

الأخ / عبد الله فتحي

جزاك الله خير ، وأتمنى لك التوفيق بالدارين .

الأخت / بنت اليمن

بارك الله فيك ، نعم عند غلق المنفذ 25 لن يتم إرسال بريد إلكتروني صادر من الجهاز (وهذه فكرة ناجحة بنسبة 99% في ظني) ، ولكن ،،،

ماذا لو كان السيرفر (ولنفرض mail.MySite.com) يقدم خدمة البريد الصادر عبر منفذ أخر غير 25 ؟ (المنفذ 50142 مثلاً ) ،وهذا ممكن حدوثه .

في هذه الحالة و لكي تكون عملية غلق منفذ بروتوكول البريد الصادر ناجحة 100% ، أقترح مراقبة البتات المرسلة لكل المنافذ المفتوحة ،

فإذا كانت بتات أحد هذه المنافذ تحتوي على (أوامر وردود) بروتوكول البريد الصادر SMTP فإن المنفذ يقوم بإرسال بريد صادر .

وعلى هذا يتم غلق المنفذ .

هذه مجرد أفكار ، والله أعلم

الأخ / vb-delphi

لا أعرف ما هي الطريقة البرمجية لمعرفة ملقم البريد الصادر ، ولكن في الغالب أنه :

STMP.Site.com

أو

MAIL.Site.com

والسلام عليكم ورحمة الله

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

بارك الله فيك اخي MSVS على الرد .. سأجاول ان اعمل تجربة عملية و سأرى (إن شاء الله) كيف من الممكن تطوير الفكرة :) ،،

بنت اليمن ،،

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

درس رائع و ممتاز

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

شكراً للجميع ،

و احب أن أنبه على ملاحظة ربما قد رأها البعض و هي :

أن بروتوكول SMTP لا يطلب كلمة مرور ، وهذه عجيبة إذ يمكن أن تنتحل شخصية أخرى بكل بساطة .

أرجو للجميع التوفيق و السلام عليكم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاتة

مشكوووور الف الف شكر اخي MSVS

بصراحة موضوع راااائع جدا, وشرح أروع.

كنت ابحث عن مثله من فترة.

جزاك الله خير.

ارجوا فقط التأكد من الملف المرفق.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم أخي MSVS

انا اريد عمل برنامج يقوم بإرسال رسالة الى البريد, وقد طبقت الشرح كاملا ,لكن يرد علي السيرفر رسالة علامات استفهام ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

لو تكرمت اخي MSVS او احد من الاخوة بتوضيح السبب,

و

اريد التأكد من رابط مثال لكي اجرب عن طريقه.

ولك جزيل الشكر.

=========

=VB-LOVE=

=========

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
أن بروتوكول SMTP لا يطلب كلمة مرور ، وهذه عجيبة إذ يمكن أن تنتحل شخصية أخرى بكل بساطة

معذره هل يمكن ان توضح لى هذه النقطه بمزيد من التفصيل

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته

:( يا اخوه الرجااااااااء الرد :(

قمت بتجربة المثال الموجود اعلى الموضوع

فتظهر لي هذه الرسالة عندما اقوم بتنفيذ الامر HELO gawab" & vbCrLf"

502 unimplemented (#5.5.1)

333.gif

ارجوا الرد :( :(

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

لا تكتب في البرنامج :

 HELO gawab" & vbCrLf"

ولكن اكتب فقط

HELO gawab

لأن علامات التنصيص "" و & vbCrLf كلها مدرجة داخل البرنامج ، يفضل أن تنظر لشفيرة البرنامج

علماً بأن الملقم هو smtp.gawab.com

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا لك اخي MSVS على التوضيح

لكن تظهر هذه الرساله عند تنفيذ هذا الامر RCPT TO: [email protected]

er.gif

لدي تساؤلات ارجوا التوضيح :

- هل يمكن الارسال الى اي بريد آخر, مثل hotmail أو yahoo .

- بالنسبة للآمر HELO gawab :

عند الارسال الى بريد غير gawab مثلا الى ياهو هل نكتب HELO yahoo.

- بالنسبة للامر MAIL FROM: [email protected]

هل يجب ان يكون الايميل صحيح و موجود

المعذرة اخي MSVS اتعبتك معي , اسأل الله ان يجزيك الخير والتوفيق.

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
شكرا لك اخي MSVS  على التوضيح

لكن تظهر هذه الرساله عند تنفيذ هذا الامر RCPT TO: [email protected]

er.gif

هذا يعني أنك يجب أن تدخل بطريقة موثوقة .

اقترح عليك أن تغير الموقع مقدم الخدمة

لدي تساؤلات ارجوا التوضيح :

- هل يمكن الارسال الى اي بريد آخر, مثل hotmail  أو yahoo .

لا أعلم ، جرب و اخبرنا بالنتيجة

- بالنسبة للآمر HELO gawab :

عند الارسال الى بريد غير gawab  مثلا الى ياهو هل نكتب  HELO yahoo.

نعم

- بالنسبة للامر MAIL FROM: [email protected]

هل يجب ان يكون الايميل صحيح و موجود

المعذرة اخي MSVS  اتعبتك معي , اسأل الله ان يجزيك الخير والتوفيق.

نعم

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

شكرا لك اخي ,,

ولكن يدي بعض النقاط في الموضوع :

* لا يجب عليك استخدام سيرفر FTP معين لكل بريد : أقصد يظن البعض انه اذا اردت ان ترسل لاحد بريده [email protected] يجب عليك استخدام smtp.gawab.com , وهذا خطأ .. بامكانك اخذ اي سيرفر smtp وتثق فيه وتراه جيدا ان تستخدمه دائما في برنامجك

اي انه بامكانك استخدام اي smtp server حتى ولو كان بريدك او بريد من تريد ان ترسل اليه ليس تابعا لهم

* أن بروتوكول SMTP لا يطلب كلمة مرور ، وهذه عجيبة إذ يمكن أن تنتحل شخصية أخرى بكل بساطة : أي بمكاني ارسل لصديقك رسالة باسمك وانتحل شخصيتك ,, واصلا بروتوكول smtp لا يمكنه ان يطلب منك كلمة سر والسبب موضح في النقطة الاولى

QUOTE(VB-LOVE @ Apr 11 2005, 03:33 AM)

لدي تساؤلات ارجوا التوضيح :

- هل يمكن الارسال الى اي بريد آخر, مثل hotmail أو yahoo .

لا أعلم ، جرب و اخبرنا بالنتيجة

اكيد نعم , تقدر ترسل لاي بريد

- بالنسبة للآمر HELO gawab :

عند الارسال الى بريد غير gawab مثلا الى ياهو هل نكتب HELO yahoo.

نعم

بالنسة لرسالة الترحيب لا يجب ان تكون hello والدليل ان اخينا كاتب HELO وهذه الكلمة ليست في اللغة الانجليزية اصلا

اي بامكانك ارسل Marhaba أو Hola بالاسباني أو Merhaba بالتركي ,, اي شيء

- بالنسبة للامر MAIL FROM: [email protected]

هل يجب ان يكون الايميل صحيح و موجود

المعذرة اخي MSVS اتعبتك معي , اسأل الله ان يجزيك الخير والتوفيق.

*

نعم

الاجابة الصحيحة لا .. بامكانك ارسالة رسالة ببريد مزيف او فارغ

* اخيرا : smtp.gawab.com لا يعمل جيدا في هذه الفترات ويرفض ان يرسل لي حتى بالاوتلوك

جربوا smtp.servage.net , smtp1.servage.net

اخيرا اتمنى منكم ان تتقوا الله ولا تنتحلوا الشخصيات ولا ترسلوا رسائل مزعجة مجهولة , اللهم اني بريء

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم ورحمة الله وبركاته

شكراً اخي استفد جدا من الدروس والشرح وجزاك الله خيرا

بس حبيت أسال عند وضع ايميل المستقبل الرسالة ,ويأتي من السيرفر الموافقة 250 OK

لكن تظهر بعدها مباشرة فتح برنامج الحماية بتاع جهازي (مكافي) علامة خطاء في البروتوكول

وهذا صورة من الرسالة :

وعند الضغط على الينك الخطاء تظهر علامة تحذير

ولم يتم ارسالة الرسالة إلى إيميل المرسل؟

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

مجهود رائع <_<

ارجو منك ان تقو م بشرح التعامل مع بروتوكول نقل الملفات ftp

وشكرا لك مرة اخرى اخى msvs ;)

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

السلام عليكم

عندما حاولت ان استخدم الملف المرفق تظهر الرسالة

كما في المرفقات

post-84808-1201642423_thumb.jpg

0

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .