إرسال رسائل البريد الإلكتروني في بيئة الدوت نت

استعرض الموضوع السابق استعرض الموضوع التالي اذهب الى الأسفل

إرسال رسائل البريد الإلكتروني في بيئة الدوت نت

مُساهمة من طرف أبوسجود في الإثنين أغسطس 05, 2013 10:25 am

 بسم الله الرحمن الرحيم
نقوم في هذا الدرس بإذن الله تعالى بشرح كيفية إرسال رسائل البريد الإلكتروني من خلال بيئة الدوت نت. ويتم ذلك عن طريق بروتوكول SMTP......بداية، سوف نقوم بشرح بروتوكول SMTP ثم سوف نقوم بشرح الأنواع Types التي توفرها لنا بيئة الدوت نت للتعامل مع SMTP. بعد ذلك سوف نقوم بسرد بعض أشهر سيرفرات SMTP ثم سوف نقوم بتطبيق ما تعلمناه من خلال كود مبسط وسهل.


أولا : شرح بروتوكول SMTP
بروتوكول نقل البريد Simple Mail Transfer Protocol أو كما يختصر إلى SMTP هو أحد الطرق المميزة والسهلة التي توفر خدمة إرسال رسائل البريد الإلكتروني عن طريق خادم (سيرفر) Server معين يسمح لهذا البروتوكول بالعمل.
منذ ظهور بيئة الدوت نت وهي تسمح للمبرمج بإرسال رسائل البريد الإلكتروني عن طريق الأصناف Classes الموجودة في الـ Namespace المسمى System.Web.Mail وهو موجود في المكتبة System.Web.dll.

مع ذلك، وبظهور بيئة الدوت نت 2.0، ظهرت Namespace جديدة توفر للمبرمج ميزات أعلى وأكثر وأكبر تمكنه من استغلال كافة إمكانات بروتوكول SMTP لإرسال الإيميلات، وهذه الـ Namespace هي System.Net.Mail وهي موجودة في المكتبة System.dll لذلك سوف تجدها دائما في كل برامجك لأنه وكما تعلم ليس هناك استغناء عن المكتبة System.dll.
لهذا، فإنه يمكنك استخدام إما الأصناف الموجودة في System.Web.Mail أو الأصناف الموجودة في System.Net.Mail. مع ذلك الثانية أفضل وأقوى. حتى أنه عند استخدامك لـ System.Web.Mail سوف يقوم الـ Compiler بتحذيرك.
في القسم التالي نتكلم عن أشهر الأصناف Classes والأنواع Types التي ستحتاجها عند تعاملك مع بروتوكول SMTP. لاحظ تشابه الأصناف إلى حد كبير في System.Net.Mail إلى System.Web.Mail. في الكود سوف تلاحظ أيضا أن الفرق بسيط في التعامل لذلك إذا كنت تتعامل مع الدوت نت 1.0 أو حتى أي إصدار تستطيع قراءة هذا الدرس.

ثانيا : نظرة على الأصناف

1_الأصناف في  System.Net.Mail

توفر لك الـ Namespace المسمى System.Net.Mail عدد، ليس بالعدد الكبير، بل عدد مناسب من الأصناف والأنواع التي توفر لك التحكم الكامل في رسالتك وفي طريقة إرسالها باستخدام بروتوكول SMTP بل وتوفر لك خيارات مُفصَّلة جدا في رسالتك.
بالطبع لن تحتاج إلى معرفة جميع الأصناف في هذه الـ Namespace ولكن يجب عليك معرفة ما توفره لك بيئة الدوت نت عند التعامل مع بروتوكول SMTP وهذا يجعلك قادر على تطوير برنامجك في جميع الأبعاد.

التالي هو قائمة بأشهر الأنواع -ربما جميعها- الموجودة في هذه الـ Namespace:

  • SmtpClient:
    واحدة من الأصناف الهامة جدا والأساسية وهي التي توفر لك الإمكانيات لإرسال الرسال. بداية، يجب عليك توفير البيانات المناسبة لهذه الكلاس من خلال الخصائص Host، Port، و EnableSsl والتي تمكنك من خلالها تحديد إعدادات السيرفر Server والذي سوف تقوم بإرسال الرسائل من خلاله. فعلى سبيل المثال إذا كنت تريد إرسال رسائل من بريد إلكتروني Hotmail مثلا سوف تقوم بتحديد إعداداته من خلال هذه الخصائص. سوف نشرح كيفية تحديد الإعدادات لاحقا. بجانب هذا، توفر لك هذه الكلاس الدالة Send() لإرسال الرسائل والدالة SendAsync() لإرسال الرسائل بشكل غير متزامن Asynchronously أي باستخدام الـ Threading. سوف نشرح هذا لاحقا.
  • MailMessage:
    الرسالة التي سوف يتم إرسالها. تحتوي هذه الكلاس على الحقول الخاصة بالرسالة مثل To، CC، Bcc، Subject (عنوان الرسالة)، و Body (نص الرسالة).
  • MailAddress:
    عبارة عن عنوان بريد إلكتروني. تستخدم هذه الكلاس في حقول الرسالة مثل حقل To لتحديد البريد الإلكتروني الخاص بمستلم الرسالة. تحتوي هذه الكلاس على حقلين الأول هو اسم صاحب البريد والثاني هو البريد نفسه.
  • MailAddressCollection:
    عبارة عن مجموعة Collection من عنواين البريد الإلكتروني أي عبارة عن مجموعة من عناصر MailAddress. تستخدم هذه الكلاس في حقول البريد الإلكتروني للرسالة مثل To، CC، Bcc. وهذا إذا كنت تريد إرسال الرسال لأكثر من شخص.
  • Attachment:
    عبارة عن ملف مرفق مع الرسالة.
  • AttachmentCollection:
    عبارة عن مجموعة Collection من الملفات المرفقة أي من الكلاس Attachment. تستخدم هذه الكلاس في الحقل Attachments الخاص بالرسالة.
  • SmtpException:
    عند حدوث خطأ أثناء إرسال الرسالة يقوم SmtpClient بإصدار هذا الخطأ. يحتوي هذا الكلاس على الخاصية StatusCode والتي توفر لك طريقة معرفة ما هو الخطأ الذي حدث.
  • SmtpFailedRecipientException و SmtpFailedRecipientsException:
    الاثنان هما أيضا عناصر خطأ Exception ينحدرا Inherit من العنصر SmtpException. إذا لم يستطع SmtpClient إرسال الرسالة إلى شخص معين سوف يقوم بإصدار الخطأ SmtpFailedRecipientException والذي يحتوي على عنوان بريد إلكتروني هذا الشخص. أما إذا فشل SmtpClient في إرسال الرسالة لعدة أشخاص سوف يقوم بإصدار الخطأ SmtpFailedRecipientsException والذي بدوره يحتوي على عناوين الأشخاص الذين لم ترسل إليهم الرسالة.


بالإضافة إلى هذه التصنيفات تحتوي هذه الـ Namespace وهي System.Net.Mail على العديد من الـ Enumerations لأغراض معينة مثل MailPriority وتمثل أهمية الرسالة إما Low أ، Normal أ، High. وتستخدم هذه الـ Enumeration في الحقل Priority الخاص بالرسالة أي في الكلاس MailMessage.

2_الأصناف في  System.Web.Mail

إذا كنت مهتما بالأصناف Classes الموجودة في System.Web.Mail ستجد أنها شبيهة جدا -إن لم تكن مماثلة- للأصناف في System.Net.Mail. ستجد أيضا أنها عبارة عن ثلاثة أصناف Classes وثلاثة Enumerations فقط!

التالي هو قائمة بالأصناف في System.Web.Mail:


  • SmtpMail:
    هذا العنصر شبيها جدا -بل مماثل- للعنصر System.Net.Mail.SmtpClient ويعمل نفس العمل وله نفس الحقول Fields.
  • MailMessage:
    هو عنصر مماثل للعنصر System.Net.Mail.MailMessage ويمثل الرسالة التي سوف ترسل باستخدام SmtpMail.
  • MailAttachment:
    عبارة عن ملف مرفق مع الرسالة. مماثل للعنصر System.Net.Mail.Attachment.


أما الـ Enumerations الموجودة في هذه الـ Namespace فهي MailEncoding، MailFormat و MailPriority. تمثل الأولى نظام الـ Encoding الخاص بالرسالة وهو في الغالب لن تحتاج إلى تغييره. وتمثل الثانية MailFormat نوع الرسالة هل هي رسالة HTML أم رسالة نصية عادية. سوف نقوم بشرح كيفية إرسال الرسائل HTML لاحقا. والثالثة MailPriority تمثل أهمية الرسالة Low أ، Normal أ، High.


نتكلم اليوم عن الطريقة الأفضل والأقوى وهي باستخدام العناصر من System.Net.Mail. إذا كنت تفضل System.Web.Mail فالكود سوف يكون شبيها جدا. فقط قم بتغيير أسماء العناصر وعمل اللازم.



ثالثا :سيرفرات  SMTP

تعرف بالطبع أنه لكي يمكنك إرسال رسالة بريد إلكتروني باستخدام بروتوكول SMTP يجب عليك أن تقوم بتحديد السيرفر Server المناسب لإرسال هذه الرسالة. ويجب أيضا أن يكون هذا السيرفر يوفر لك خدمة SMTP وإلا لن تستطيع التعامل معه.

بالطبع يمكنك إنشاء السيرفر الخاص بك والذي يوفر خدمة SMTP. وبالطبع أيضا يمكنك شراء سيرفر أو على الأقل الاشتراك في سيرفر يوفر لك هذه الخدمة. فتستطيع مثلا من خلال خدمة الاستضافة Hosting الخاصة بموقعك أن تقوم بإنشاء بريد إلكتروني مثلا yourname@yoursite.com وتقوم بإرسال الرسائل من خلاله. ولكن يشترط في هذه الاستضافة أن يكون السيرفر يوفر لك كما قلنا خدمة SMTP.

ولكي تستطيع التعامل مع أي سيرفر SMTP يجب عليك أن تعرف عن هذه السيرفر أربعة أشياء:


  • العنوان Address:
    عنوان السيرفر مثلا smtp.example.com.
  • المخرج Port:
    بالطبع يوفر لك السيرفر الخدمة SMTP عن طريق مخرج معين وهو في الغالب 25 وأحيانا يكون 465 وأحيانا يختلف.
  • هل هذا السيرفر يدعم تأمين SSL؟
    معظم السيرفرات تدعم تأمين SSL وهو Secure Socket Layer. تأمين SSL يقوم بتشفير البيانات أثناء نقلها وبالتالي يمنح الرسالة حماية ضد أن يقوم شخص Hacker بالحصول عليها وفهمها أو تغييرها قبل وصولها إلى المستخدم.
  • الاعتمادات Credentials:
    أي اسم المستخدم وكلمة المرور.


بالطبع تعرف أن هذه الإعدادات الخاصة بالسيرفر سوف تقوم بتحديدها عن طريق حقول System.Net.Mail.SmtpClient أو System.Web.Mail.SmtpMail.

التالي هي قائمة بأشهر أربعة موفروا لخدمة البريد الإلكتروني E-Mail Service Providers والإعدادات الخاصة بهم:
1_ بريد Live
العنوان  smtp.live.com
المخرج  25
يدعم SSL؟ نعم

GMail_2
العنوان  smtp.gmail.com
المخرج Port 465 أ، 25 أ، 587
يدعم SSL؟ نعم

Yahoo _3!
العنوان smtp.mail.yahoo.com
المخرج Port 465 أ، 25 أ، 587
يدعم SSL؟ نعم/لا
هذه الخدمة متاحة فقط لمشتركي Yahoo Plus! أي غير المشتركين المجانيين.

GMX_4_
العنوان  mail.gmx.com
المخرج Port 25
يدعم SSL؟ لا

   كما تعلم أن Live يمثل جميع خدمات البريد الإلكتروني لـ Live مثل Live، Hotmail، MSN، … وغيرها. وأيضا Gmail يمثل Gmail و GoogleMail فهي مجرد أسماء فقط.... أي سيرفر أو موفر للبريد الإلكتروني في الغالب يوفر SMTP. فقط قم بزيارة صفحات الدعم Support الخاصة بهذا السيرفر أو الموفر وعمل بحث عن خدمة SMTP.

   بعض السيرفرات مثل Gmail و Yahoo! توفر لك أكثر من مخرج Port. فقط قم باختيار أي منها ليس هناك فرق. وبعض السيرفرات مثل Yahoo! لا تضع شروطا لدعم SSL فلهذا يمكنك اختياره أو تركه ولكن يفضل اختيار SSL.

   بعض السيرفرات تجعل لك حدا يوميا لإرسال الرسائل باستخدام SMTP. فعلى سبيل المثال Gmail يضع حدا أعلى للرسائل من على SMTP وهو 100 رسالة يوميا. أما من خلال الموقع أو البرنامج الخاص بـ Gmail الحد الأعلى له هو 400 رسالة يوميا.

رابعا : إنشاء التطبيق


الكود التالي يقوم بإرسال رسالة من حساب Gmail إلى حساب آخر باستخدام العناصر من System.Net.Mail. لاحظ الكود جيدا. لاحظ أن الرسالة هي عبارة عن رسالة HTML. ولاحظ أن المثال يقوم بإضافة ملف مرفق إلى الرسالة وبالطبع سوف يحدث خطأ إن لم يكن هذا الملف موجود على جهازك. ولاحظ أيضا كيفية تحديد إعدادات السيرفر.


الرمز:
Dim msg As New MailMessage()
msg.From = New MailAddress("example@gmail.com", "Example")

msg.To.Add("friend_a@example.com")
msg.To.Add(New MailAddress("friend_b@example.com", "Friend B"))


msg.Priority = MailPriority.High
msg.Subject = "Hey, a fabulous site!"

msg.Body = _
    "Hello everybody,<br /><br />" &amp;amp; _
    "I found an interesting site called " &amp;amp; _
    "<a href=""http://withdotnet.net"">" &amp;amp; _
    "مع الدوت نت</a>. Be sure to visit it soon."
msg.IsBodyHtml = True
msg.Attachments.Add(New Attachment("D:\Site.lnk"))
Dim client As New SmtpClient()
client.Host = "mail.gmail.com"
client.Port = 578
client.EnableSsl = True
client.UseDefaultCredentials = False
client.Credentials = New System.Net.NetworkCredential("example@gmail.com", "buzzwrd")
client.DeliveryMethod = SmtpDeliveryMethod.Network

client.Send(msg)

أبوسجود
.....
.....

تاريخ التسجيل : 18/02/2011
المساهمات : 87
النقاط : 162
التقيم : 7
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

رد: إرسال رسائل البريد الإلكتروني في بيئة الدوت نت

مُساهمة من طرف المبرمج الطموح في الثلاثاء أغسطس 06, 2013 10:14 am

مشكور ابوسجود على هذا الشرح الاكثر من رائع

المبرمج الطموح
الاشراف
الاشراف

تاريخ التسجيل : 18/02/2011
المساهمات : 117
النقاط : 213
التقيم : 6
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

استعرض الموضوع السابق استعرض الموضوع التالي الرجوع الى أعلى الصفحة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى