تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
إرسال بريد إلكتروني بتنسيق html + إضافة ملفات مرفقة للرسالة (شرح بالصور)
#1
بسم الله الرحمن الرحيم

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

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


أحب أن أقدم لكم موضوع إرسال رسالة بريد إلكتروني
طريقة عرض الرسالة ستكون على شكل HTML ( يعني إمكانية إضافة صور في محتوى الرسالة مع إمكانية تنسيق الرسالة )
أيضاً بالإضافة إلى إمكانية عرضها بالطريقة العادية (القياسية) ( محتوى الرسالة نص فقط بدون أي تنسيق )
مع إمكانية إضافة ملفات مرفقة للرسالة (Attachment)


طريقة إرسال الرسال هي من خلال
ٍSMTP

وهي تعني
بروتوكول نقل البريد البسيط

Simple Mail Transfer Protocol
البروتوكول : هو نظام أو سلوك أو لغة تفاهم متفق عليها .


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

3 الأشياء مهمة والتي يجب عليك معرفتها لإستخدام هذة الطريقة
هي
1 - الـ Port الخاص بخادم البريد الخاص بحساب بريدك الإلكتروني
2 - الـ Host وهو اسم خادم البريد ,,
على سبيل المثال
أسم خادم البريد الخاص بـالـ Hotmail هو : smtp.live.com
3 - معرفة ما إذا كان خادم البريد يطلب الميزة SSL في الإتصال
ماهو الـ SSL ؟
هو عبارة عن اختصار لكلمة Secure Socket Layer
Secure Socket Layer تعني تجويف طبقة الأمان
وهو بروتوكول يقوم بتشفير البيانات المنتقلة من وإلى متصفح الانترنت و الخادم “server”

لقد قمت بوضع هذة البيانات لأشهر موفرين خدمة البريد ,, داخل ملف المشروع
ومنهم Hotmail , Gmail , Yahoo , Aol
وإذا كنت تستخدم بريد لا تعرف البيانات الخاصة بالإتصال به ,, أرجوا أن تبحث في الإنترنت
أو أن تبحث في موقع موفر خدمة البريد نفسة
عن هذة البيانات: SSL Enabled ,, Port Number ,, Host Name



احب أن اذكر أنه إذا أردت أن ترسل رسالة ,, يجب أن يكون لديك حساب بريد إلكتروني
وأن تكتب كلمة المرور الخاصة بهذا الحساب ,, بالإضافة إلى بيانات الإتصال التي ذكرتها في الأعلى SSL Enabled ,, Port Number ,, Host Name


في الحقيقة أنه قبل عدة سنوات كان المجال مفتوح لإرسال البريد ,, حيث أن خادم البريد كان لا يسأل ما إذا كان لديك حساب بريد إلكتروني أم لا
كنا نضع البيانات Host Name و Port Number فقط
حتى أن بريد المرسل وإسمة أنت تكتبة ,, بغض النظر ما إذا كان هذا البريد موجود أصلاً أو لا
يعني لو كتبت في خانة بريد المرسل
"hotmail@hotmail.hotmai"l
فسوف يقراءة مستقبل البريد بنفس الطريقة ولا يعرف من أين جائت
أما الآن فتغيرت الأمور لكثرة الإستعمالات الغير قانونية للبريد فأصبح يجب عليك أن تمتلك بريد مسجل وأن تدخل كلمة المرور الخاصة بك ..
هناك طرق لإرسال البريد عن طريق خادم يتم تركيبة في جهازك فتصبح أنت موفر الخدمة
ولا أريد أن أتطرق إلى هذا الموضوع ,,,,



الآن ننتقل إلى شرح الطريقة

-----------------------------------------------------------------------------
في هذا المثال قمت بإستخدام بريد Gmail أنشأتة خصيصاً لهذا الشرح
"abdulla.aldosari.tester@gmail.com"
كلمة المرور www.vb4arab.com
وهو موجود في المشروع بشكل إفتراضي
---------------------------------------------------------------------

سأبداء بطريقة عرض الرسالة على شكل HTML


بسم الله


أولا سأضع الصورتين لترى طريقة العرض بالـ HTML وطريقة العرض العادية


طريقة العرض العادية



طريقة العرض بالـ HTML














بسم الله نبدأ بطريقة عرض الـ HTML


شكل نافذة البرنامج (المثال) للإرسال بطريقة عرض الـ HTML


أثناء وبعد إتمام عملية الإرسال



زر لمشاهدة الرسالة بنفس التنسيق التي ستظهر علية عند القارئ



------------------------------------------------------------------------------------------



سأبدأ الآن في شرح الكود


أولاً تم إضافة مجال الأسماء
System.Net.Mail
رمز برمجي:

Imports System.Net.Mail
ثم بالإعلان عن المتغيرات في أول سطور الكود في الفورم

رمز برمجي:

' عنوان مسار ملف صورة الشعار الذي سيظهر في أعلى الرسالة Dim CompanyLogoPath As String

رمز برمجي:

'الكائن الذي يحمل الرسالة بالكامل Dim Mail As New MailMessage()

رمز برمجي:

' في هذا المتغير سيتم إدخال الملفات المرفقة فية ' وقبل إرسال الرسالة سيتم تفريغها في الكائن الذي يحمل الرسالة Dim AttachmentCollection As New Collection


رمز برمجي:

'- موجود في الريسورس HTML هو ملف HTMLBodyText '- قمت بتصميمة كمثال ويمكنك تصميم ما تريد Dim MessageContaint As String = My.Resources.HTMLBodyText




رمز برمجي:

'- هذا متغير سيحمل صورة الشعار لتظهر في الرسالة عند عرظها للقرائة '- سيتم شرحة لاحقاً Dim logo As LinkedResource



SmtpServer هذا هو الكائن المسؤول عن عملية الإتصال بخادم البريد والإرسال ,, وهو ينحدر من مجال الأسماء System.Net.Mai
################################################## ###
طريقتين للإعلان عن الكائن SmtpServer للإستفادة من الحدث SendCompleted
الإعلان بواسطة الجملة WithEvents
أو الإعلان عنة بطريقة عادية وإستخدام الطريقة AddHandler لربط الحدث مع أي Sub
################################################## ###
من المستحسن إستخدام الجملة WithEvents قبل اسم الكائن
إذا أردت أن تستفيد من الحدث SendCompleted
أي أنه بعد الإنتهاء من إرسال الرسالة يقوم الكائن بإطلاق هذا الحدث والذي ستستفيد منه لعمل معين
رمز برمجي:

Friend WithEvents SmtpServer As New SmtpClient()


################################################## ###
################################################## ###

وإذا أردت أن لا تعلن عنه بوجود أحداث WithEvents وتريد الإستفادة من الحدث SendCompleted
استخدم الطريقة AddHandler
رمز برمجي:

Dim SmtpServer As New SmtpClient()AddHandler SmtpServer.SendCompleted, AddressOf MySubSendCompleted
حيث أن MySubSendCompleted
هو Sub ستقوم أنت بإنشائة ليتم مناداته عند الإنتهاء من عملية الإرسال
رمز برمجي:

Private Sub MySubSendCompleted() End Sub
###############################################
###############################################







الإجراءات والأحداث



الكود التالي في الحدث Load الخاص بتحميل النافذة mailform
################################################## #####
################################################## #####
رمز برمجي:

'- اسم المرسل Me.SenderName.Text = "عبدالله الدوسري"

رمز برمجي:

'- بريد المرسل Me.SenderEmail.Text = "abdulla.aldosari.tester@gmail.com"

رمز برمجي:

'- كلمة المرور الخاصة بالمرسل Me.SenderEmailPassword.Text = "www.vb4arab.com"


رمز برمجي:

'بريد المستلم Me.ReseverEmail.Text = "abdulla.aldosari.tester@gmail.com"


رمز برمجي:

'- عنوان الرسالة Me.MailSubject.Text = "دراسات وبحوث جديدة تثبت أن الطين له دور رئيسي في تكوين الحياه ."




رمز برمجي:

'- نص الرسالة '- وهو ملف نصي موجود في الريسورس Me.MessageBody.Text = My.Resources.MessageBody








الصورة CompanyLogo.jpg
نقوم بتعريف المسار الخاص بالصورة ونضعة في المتغير النصي CompanyLogoPath
رمز برمجي:

CompanyLogoPath = My.Application.Info.DirectoryPath & "\CompanyLogo.jpg"
الصورة موجودة ظمن ملفات المشروع وعند عمل Build يتم نسخ الصورة في نفس مجلد البرنامج
الخاصية لملف الصورة
Copy to Output Directory = Copy always







وضع مسار صورة الشعار CompanyLogoPath في التكست بكس
رمز برمجي:

Me.LogoPath.Text = CompanyLogoPath



تحميل صورة الشعار في صندوق الصورة من المسار CompanyLogoPath
رمز برمجي:

Me.CompanyLogo_PictureBox.Image = Image.FromFile(CompanyLogoPath)

لتعطيل زر حذف الملفات المرفقة لأنه حالياً البرنامج في الحدث لود وأكيد مافية ملفات مرفقة لحذفها
رمز برمجي:

Me.DeleteSelectedAttachment.Enabled = False
الإنتهاء من الحدث Load
################################################## #####
################################################## #####










الكود التالي في الحدث Click الخاص بالزر إرسال

################################################## #####
################################################## #####

Credential
هذا ما يسمى بـ وثائق التفويض في الشبكة
وهو طبعاً للتحقق من هويتك لدى خادم البريد ما إذا كنت أحد المستخدمين المسجيلين أو لا
يجب أن تستخدم حسابك الخاص لإرسال البريد الإلكتروني
هذة البيانات تحفظ في هذا المتغير حالياً حتى يأتي أمر الإرسال فيتم التحقق منها
رمز برمجي:

SmtpServer.Credentials = New Net.NetworkCredential(Me.SenderEmail.Text, Me.SenderEmailPassword.Text)


تعريف ببيانات الإتصال بالخادم
وفي هذا المثال إستخدمت الـ Gmail
رمز برمجي:

SmtpServer.Port = 587 SmtpServer.Host = "smtp.gmail.com"




الخاصية SSl كما ذكرت سابقاً وهي بروتوكول يقوم بتشفير البيانات المنتقلة
True مطلوبة من خادم البريد
False غير مطلوبة من خادم البريد
في هذا المثال ,, خادم البريد قوقل يطلب هذة الميزة
رمز برمجي:

SmtpServer.EnableSsl = True



إنشاء كائن جديد والذي يحمل الرسالة بالكامل بمحتوياتها
رمز برمجي:

Mail = New MailMessage()




هنا يتم إدخال عنوان المرسل وأسمة
آخر براميتر System.Text.Encoding.UTF8 يختص بترميز الحروف التي كتبت لاسم المرسل
حتى لا يتم تغييرها من قبل أي متصفح يقوم بعرضها لقارء الرسالة
لأنه من الممكن أن لا تظهر بالشكل التي كتبت علية
يعني مثلاً تكتب الاسم بالعربي فيظهر بشكل غيرب ,, لا يفهم!!!
تذكر كلمة الترميز فسوف تمر عليك أكثر من مرة في هذا المثال
رمز برمجي:

Mail.From = New MailAddress(Me.SenderEmail.Text, Me.SenderName.Text, System.Text.Encoding.UTF8)







لوائح المستلمين To, CC, BCC
################################################## #
################################################## #
إذا كنت قد أضفت أكثر من مستقبل واحد للرسالة فسيتم إضافة عناوينهم الآن
حتى لو كان شخص واحد الموضوع لن يتغير
--------------------------------------------------------
الآن نقوم بفصل عناوين البريد عن طريق الفاصلة الموجودة بين العناوين في حالة وجود أكثر من واحد
(",")Split هذة الوضيفة تقوم بفصل النص
يعني لو كان النص هكذا
"Ali@Gmail.com,Mohd@Hotmail.com,Abdulla@Yahoomail. com"
النتيجة ستكون
"Ali@Gmail.com"
"Mohd@Hotmail.com"
"Abdulla@Yahoomail.com"
كل عنوان سيكون عنصر مستقل سيتم إدخالهم كناصر في المصفوفة النصية ()addr
رمز برمجي:

Dim addr() As String = ReseverEmail.Text.Split(",") If addr.Length <> 0 Then For i As Integer = 0 To addr.Length - 1 Mail.To.Add(addr(i)) Next End If
كما تلاحظ في طريقة إضافة عناوين المستلمين لقد إستخدمنا المجموعة TO
رمز برمجي:

Mail.To.Add("Abdulla@Gmail.com")
بينما توجد هناك أساليب تختلف لإضافة عناوين مستقبلين البريد
هل تذكر في صفحة البريد أنه يوجد خيار (إرسال نسخة CC) (وإرسال نسخة مخفية Bcc)
هنا في هذا المثال قمنا بإضافة عناوين المستلمين في المجموعة TO
بينما توجد مجموعتين إضافيتين وهما CC و BCC
----------------------------------------------------------------------------
المجموعة CC
كلمة CC هي اختصار للعبارة الإنجليزية "Carbon Copy" وتعني "نسخة كربونية"
إذا قمت بإضافة اسم مستلم إلى هذة الممجموعة ، فسيتم إرسال نسخة من رسالتك إلى هذا المستلم، وسيظهر اسم المستلم لبقية مستلمي الرسالة.
رمز برمجي:

Mail.CC.Add("Abdulla@Gmail.com")
----------------------------------------------------------------------------
المجموعة BCC
كلمة BCC هي اختصار للعبارة الإنجليزية "Blind Carbon Copy" وتعني "نسخة كربونية مخفية"
إذا قمت بإضافة اسم مستلم إلى هذة المجموعة ، فسيتم إرسال نسخة من رسالتك إلى هذا المستلم، ولن يظهر اسم المستلم لبقية مستلمي الرسالة.
رمز برمجي:

Mail.Bcc.Add("Abdulla@Gmail.com")
################################################## #
################################################## #





رمز برمجي:

'- عنوان الرسالة Mail.Subject = MailSubject.Text '- ترميز عنوان الرسالة Mail.SubjectEncoding = System.Text.Encoding.UTF8






رمز برمجي:

'- نص الرسالة Mail.Body = Me.MessageBody.Text '- ترميز نص الرسالة Mail.BodyEncoding = System.Text.Encoding.UTF8










Attachments الملفات المرفقة
هنا سيتم إضافة مسارات الملفات المرفقة مع الرسالة والتي تم حفظها في المجموعة AttachmentCollection ويتم تعبئتها من مكان آخر في الكود عن طريق زر إضافة ملفات مرفقة
سنتحدث عنه فيما بعد
ولكن نحن الآن في حدث زر الإرسال أي أن الرسالة في مرحلة الإرسال لذلك نقوم بتفقد الملفات المرفقة
طبعاً إذا كانت AttachmentCollection تملك على الأقل ملف واحد فسندخل للحلقة التكرارية لإضافة الملفات
رمز برمجي:

If Me.AttachmentCollection.Count > 0 Then For i As Integer = 1 To Me.AttachmentCollection.Count Mail.Attachments.Add(New Attachment(Me.AttachmentCollection.Item(i).ToString)) Next End If




لم ينتهي الحدث Click الخاص بالزر إرسال
تابع ,,,,,,,,,,,,,,,,,,,,,,,,



[/HR]
الرد }}}
تم الشكر بواسطة:
#2
تابع,,,,,, الحدث Click الخاص بالزر إرسال




الآن سندخل في مرحلة إعداد تصميم شكل الرسالة
[b]تذكر أن الرسالة على شكل Html
يعني بإمكانك تصميم صفحة Html
وإرسالها كرسالة طبعاً بعد إدخال نص الرسالة في كود الـ HTML وإدخال بعض الصور ستكون جاهزة للإرسال
[/b]








[b]نبدأ في صورة الشعار وفي هذا المثال وضعتة في أعلى الرسالة[/b]
المتغير logo وهو من نوع LinkedResources وهو ما يعرف بربط الموارد ,, قمنا بالإعلان عنه مسبقاً ولكن الآن سنعطيه قيمة حقيقية بالجملة New
المتغير [b]CompanyLogoPath يحمل عنوان مسار الصورة
أي أننا نريد ربط هذة الصورة مع الرسالة
رمز برمجي:

logo = New LinkedResource(CompanyLogoPath)



[b]الآن ركز معي في عملية ربط هذة الصورة بموقعها داخل كود الـ HTML

كلنا نعرف هذة الطريقة لإضافة صورة في جسم الـ HTML فعنوان الصورة معروف مكانة في الإنترنت
رمز برمجي:

<img src='http://vb4arab.com/vb/attachments/logo.jpg' >
لكن الصورة التي سنرفقها مع الرسالة أين ستذهب وما هو المسار الذي ستوضع فية
لا نعرف العنوان الخاص بالصورة
لذلك سنستخدم طريقة الربط بالإسم المعرف للصورة وهو ما يعرف بربط الموارد
-------------------------------------------------------------------------
بعد أن قمنا بتحميل الصورة في المتغير logo
الآن نعطيه اسم سنستخدمة داخل الـ Html حتى يتم عرظها في الرسالة
--------------------------------------------------------
رمز برمجي:

'- الآن نعطي إسم لهذة الصورة وهو MyLogo logo.ContentId = "MyLogo"



الآن نقوم بعمل متغير نصي لنحفظ فية كود الـ HTML الخاص بالصورة
رمز برمجي:

Dim My_Logo As String
نقوم بإنشاء الكود الخاص بالصورة بنسق HTML
رمز برمجي:

My_Logo = "<img src='cid:" & logo.ContentId & "' height='150' width='750'>"
ملاحظة :
كلمة cid: الموجودة في خانة عنوان الصورة هي للتعريف بأن الصورة موجودة ظمن الموارد الخاصة بالرسالة ويتم التعرف على الصورة من خلال الاسم الذي أعطيناه لها من قبل وهو
موجود في logo.ContentId





تذكر أن المتغير MessageContaint قمنا بالإعلان عن مسبقاً وأعطيناه القيمة الموجودة في الملف HTMLBodyText.htm الموجود في الريسورس

سندخل كود الـ HTML الخاص بالصورة بعد أن رتبنا عملية الربط
وسندخل عنوان الرسالة بالخط العريط حسب التنسيق الذي حددتة في ملف الـ HTML
وسندخل نص الرسالة
لاحظ الصور ستكون أكثر توظيحاً

الآن ومن خلال الكود نقوم بعملية إستبدال للنصوص الموجودة في المتغير النصي MessageContaint والذي يحمل قيمة ملف الـ HTML بالكامل
رمز برمجي:

MessageContaint = MessageContaint.Replace("MY_LOGO", My_Logo) MessageContaint = MessageContaint.Replace("MY_MAIL_SUBJECT", Me.MailSubject.Text & "<hr/>") MessageContaint = MessageContaint.Replace("MY_MESSAGE_BODY_TEXT", Me.MessageBody.Text)


--------------------------------------------------------------------------------
النص الموجود في ملف الـ HTML
MY_LOGO
سيصبح
<img src='cid:MyLogo' height='150' width='750'>
--------------------------------------------------------------------------------
النص الموجود في ملف الـ HTML
MY_MAIL_SUBJECT
سيتم إستبدالة بالنص الموجود في
Me.MailSubject.Text
--------------------------------------------------------------------------------
النص الموجود في ملف الـ HTML
MY_MESSAGE_BODY_TEXT
سيتم إستبدالة بالنص الموجود في
Me.MessageBody.Text
--------------------------------------------------------------------------------

لكي تصبح النتيجة كالتالي مثل الصورة التالية فقط للتوضيح
هذة هي النتيجة بعد إستبدال النصوص الموجودة في ملف الـ HTML


تم الإنتهاء من تنسيق ملف الـ HTML



















Alternate View
وهو ما يسمى بطريقة العرض البديله
أي أننا لا نريد أن تكون الرسالة على شكل نص عادي
بل نريدها أن تكون على شكل HTML
نقوم بعمل متغير من نوع AlternateView لأنه لدية الإمكانية على الظهور بنسق HTML
وهو الذي سيحمل النص الموجود في المتغير MessageContaint
أول براميتر هو محتوى الرسالة MessageContaint
ثاني براميتر للتعريف بنوع الترميز الخاص بكود الـ HTML
لاحظ في آخر براميتر قمنا بتعريف أن محتوى الرسالة هو من نوع Html
رمز برمجي:

Dim alternateView1 As AlternateView = AlternateView.CreateAlternateViewFromString( _ MessageContaint, _ System.Text.Encoding.UTF8, _ System.Net.Mime.MediaTypeNames.Text.Html)




الآن نقوم بإظافة الصورة للموارد الخاصة بـ alternateView1 حتى نستطيع إظهار الصورة في الرسالة
رمز برمجي:

alternateView1.LinkedResources.Add(logo)


هنا نقوم بإدخال محتوى الرسالة بالكامل alternateView1 داخل كائن الرسالة Mail
رمز برمجي:

Mail.AlternateViews.Add(alternateView1)

يجب أن تجعل هذا الخيار True
وهو للدلالة على أن الرسالة بتنسيق من نوع HTML
رمز برمجي:

Mail.IsBodyHtml = True





خيارات التبليغ بالتسليم
هنا إذا أردت أن يتم تبليغك برسالة بريد إلكترونية في أي حالة من الحالات التالية
والتي ستختارها أو ستحددها هنا
بإمكانك إختيار أحد الخيارات التالية
----------------------------------------------------------
إيقاف خاصية التبليغ
DeliveryNotificationOptions.None
----------------------------------------------------------
في حال تم وصول الرسالة بنجاح إلى الطرف الآخر
DeliveryNotificationOptions.OnSuccess
----------------------------------------------------------
في حال فشلت الرسالة بالوصول
DeliveryNotificationOptions.OnFailure
----------------------------------------------------------
في حال تأخرة الرسالة في الوصول
DeliveryNotificationOptions.Delay
----------------------------------------------------------
لن يتم تبليغك بأي شيء أبداً
DeliveryNotificationOptions.Never
----------------------------------------------------------
في هذا المثال قمت بإختيار
في حال فشلت الرسالة بالوصول
DeliveryNotificationOptions.OnFailure
رمز برمجي:

Mail.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure














الآآآآآآآآآآآآآآآآن وصلنا إلى إرسال الرسالة
وتوجد هنا طريقتين
SendAsync و Send
##############################################
الطريقة SendAsync
تسمح هذة الطريقة بإستمرارية عمل البرنامج أثناء عملية الإرسال
أي أن الكود لن يتوقف عند هذة النقطة بل سيكمل حتى الخروج من الحدث Click الخاص بالزر إرسال وفي نفس الوقت عملية الإرسال جاريه ,,
أيضاً تسمح لك بإلغاء العملية في أي وقت عن طريق الأمر SendAsyncCancel
وتقوم بعد إنتهاء عملية الإرسال مباشرتاً بإطلاق الحدث SendCompleted
بإمكانك إستخدام الحدث لإظهار رسالة مثلاً تبين أن العملية قد إنتهت
---------------------------------------------------------------------
البراميتر الثاني أعطيته القيمة Nothing وهو عبارة عن كائن من نوع Object ويتم إستخدامة ليتم تمريرة مع الرسالة لكي يتم كتابة بيانات حالة الإرسال فية من قبل خادم البريد وعند

الإنتهاء من عملية الإرسال يتم إرجاعة لك في الحدث SendCompleted
فقط الطريقة SendAsync هي التي توفر هذة الطريقة
---------------------------------------------------------------------
رمز برمجي:

SmtpServer.SendAsync(Mail, Nothing)
##############################################
الطريقة Send
فهي لا تسمح بإستمرارية الكود إلى بعد الإنتهاء من عملية الإرسال
ولا تقوم بإطلاق الحدث SendCompleted
ولا تسمح لك بإلغاء العملية
ولا تدعم طريقة تمرير لكائن Object التي ذكرتها في الطريقة السابقة
أي أنه عن الوصول إلى هذا الأمر يتجمد البرنامج عند هذا السطر حتى إنتهاء العملية
رمز برمجي:

SmtpServer.Send(Mail)
##############################################



وفي هذا المثال إستخدمت الطريقة SendAsync

وبما أننا إستخدمنا الطريقة SendAsync فإن الكود سينتقل مباشرتاً إلى السطر الذي بعدة
مع إبقاء عملية الإرسال في الخلفية ,, لذلك بإمكانك ترتيب شكل الفورم في وضع الإرسال ,, يعني تقوم بتعطيل زر الإرسال ,, تظهر صورة تبين عملية الإرسال ,,
أي شيء تريد عملة ,, لأنه ومن خلال الحدث SendCompleted نستطيع الرجوع عن هذة التغييرات مع إظهار رسالة تبين إنتهاء عملية الإرسال ,,,,,

ليس بالظرورة أن عملية الإرسال تمت بنجاح يعني أن الرسالة قد وصلت
أنت قمت بتوصيل الرسالة إلى الخادم بنجاح ,, ولكن لا نعلم إذا كان الخادم قد نجح هو بدورة في توصيل الرسالة إلى المستلمين ..


[b]إنتهاء الحدث Click الخاص بالزر إرسال
################################################## #####
################################################## #####










حدث Click الخاص بزر بإضافة ملفات مرفقة
################################################## #####
################################################## #####
رمز برمجي:

Private Sub AddNewAttachment_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddNewAttachment.Click '- OAFD = Open Attachment File Dialog Dim OAFD As New OpenFileDialog OAFD.CheckFileExists = True OAFD.Title = "إضافة ملفات مرفقة للرسالة" If OAFD.ShowDialog() = Windows.Forms.DialogResult.OK Then Me.AttachmentCollection.Add(OAFD.FileName) DeleteSelectedAttachment.Enabled = True '- سيتم إضافة إسم الملف هنا فقط ليراه المستخدم في المثال Attachment_ListBox.Items.Add(My.Computer.FileSystem.GetName(OAFD.FileName)) End If End Sub
################################################## #####
توجد طريقة أخرى لإضافة الملفات المرفقة عن طريق السحب والإفلات في المشاركة رقم 43
################################################## #####









هذا الزر الخاص بإلغاء عملية الإرسال
################################################## #####
################################################## #####
رمز برمجي:

Private Sub CancelSendAsync_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CancelSendAsync.Click Me.SmtpServer.SendAsyncCancel() Me.PictureBox1.Visible = False Me.MailFormPanel.Enabled = True Me.SendMassege.Enabled = True Me.PreveiwMassege.Enabled = True Me.CancelSendAsync.Enabled = False End Sub
################################################## #####
################################################## #####









[b]هذا هو الحدث SendCompleted
################################################## #####
################################################## #####
رمز برمجي:

'- SendCompleted Event '- هذا الحدث الذي يتم إطلاقة عند إنتهاء عملية الإرسالأنا عن نفسي قمت بتعطيل وتفعيل بعض الأزرار وإخفاء الصورة التي توحي بعملية الإرسالمع إظهار رسالة تخبر بإنتهاء العملية بنجاح Private Sub SmtpServer_SendCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.AsyncCompletedEventArgs) Handles SmtpServer.SendCompleted Me.PictureBox1.Visible = False Me.MailFormPanel.Enabled = True Me.SendMassege.Enabled = True Me.PreveiwMassege.Enabled = True Me.CancelSendAsync.Enabled = TrueMsgBox("تم إرسال البريد بنجاح ..") End Sub
################################################## #####
################################################## #####
لإضافة الحدث ,, هذة صورة من باب إكمال الشرح







تم الإنتهاء من طريقة عرض الرسالة بنسق HTML





----------------------------------------------------------------------------------------------



طريقة عرض الرسالة بدون تنسيق ( العادية)
هو نفس الكود الذي تم شرحه من قبل ولكن لا يحتوي على أي شيء له علاقة بالـ HTML
بالإضافة إلى أن بعض المتغيرات ليست موجود لأن ليس لها فائدة في هذة الطريقة
بالإضافة إلى عدم وجود ملف HTML في الريسورس
وعدم وجود صورة الشعار ظمن ملفات المشروع



قبل تحميل المشروع أرجوا قراءة هذة الملاحظة في المشاركة رقم 25



[b]ملفات المشروع بنسخة الفيجوال 2005

-------------------------------------------
مشروع للإرسال بنسق HTML
Send.EMail.With.Html.VB2005.rar
مشروع للإرسال بشكل عادي
Send.EMail.WithOut.Html.VB2005.rar


ملفات المشروع بنسخة الفيجوال 2008
------------------------------------------
مشروع للإرسال بنسق HTML
Send EMail With Html VB2008.rar
مشروع للإرسال بشكل عادي
Send EMail WithOut Html vb2008.rar











تم بحمد الله

أرجوا أن أكون وفقت في طريقة الشرح

تحياتي لكم ,, ودمتم بخير
دعواتكم الصالحة

[/b][/b][/b][/b][/b]
الرد }}}
تم الشكر بواسطة:
#3
ملاحظة هامة :
الإشخاص الذي يريدون إرسال بريد إلكتروني إلى (هوتميل ، ياهو ، AOL ، إلخ)
عن طريق الـ (Internet Information Services) الخادم الموجود في أغلب أجهزة ويندوز (IIS)
أو عن طريق موقعك الشخصي في الإنترنت
يجب أن تعرف أن هذة الشركات أصبحة تمتلك ما يسمى بالــ SmartFilter (التصفية الذكية)
وهي تمنع البروكسيات (proxy servers) تحت ما يسمى 'Anonymity Sites' المواقع المجهولة الهوية أو الغير معروفة.
يرجع ذلك إلى أن أغلبية كبيرة من البريد المزعج من عناوين مزورة ،
في ""سياسة إطار عمل المرسل"" الجديدة ويرمز لها بالرمز (SPF) وهي إختصار Sender Policy Framework
تم القيام بتنفيذ وإبتكار هذة السياسة عدد من مقدمي خدمات الإنترنت والبريد ، من بينهم عدد من مقدمي الخدمات الرئيسية منهم (هوتميل ، ياهو ، AOL ، إلخ). وقد بدأت تلك

الشركات تطلب ما يسمى بــ (SPF) ليتم السماح لمرسل البريد بالمرور من خلال شبكاتهم
يحتاج نظام البريد في الدومين (domain) الخاص بك في موقعك ,,,
أو خادم البريد في الــ (IIS) الموجودة في جهازك إلى ما يسمى بالــ SPF record حتى يتم قبول رسائلك من قبل هذة الشركات وبالتالي يتم توصيلها إلى

المستلمين .

على ما يبدو أن خدمة الهوتميل دخلت في معركته ضد البريد المزعج ,, والكثير من الناس الآن يجدون صعوبة في توصيل رسائلهم لمستخدمي هوتميل .


من الواضح تماما أن هذة الشركات تعتمد اعتمادا كبيرا على مدخالات الــ DNS وهو إختصار (Domain Name System) والذي

يتيح لها تصفية البريد المزعج.

هذة بعض الملاحظات التي أتذكرها حالياً ,, أرجوا أن تكون مفيدة وأن أكون قد وفرت عليهم بعض الوقت ,,
بدلاً من المحاولات الفاشلة والتي لن تنجح أبداً بدون SPF record الذي ستحصل علية من هذة الشركات ثم وضعها في إعدادات السيرفر الخاص بك والذي ستقوم بإرسال البريد منه ,

هذة الملاحظة لا تعني شيئاً للذين سيرسلون عن طريق بريدهم المسجل مثل البريد الذي إستخدمتة في هذا المثال
هذا المثال للإرسال من بريدك الشخصي في الهوتميل أو الGmail مثلاً إلى أي بريد آخر
كأنك تستخدم بريدك الشخصي عندما تدخل الإنترنت عن طريق المتصفح
لكن الآن عن طريق الفيجوال بيسك

الرد }}}
تم الشكر بواسطة:
#4
تفضل أخي الطريقة :
لكن ليس عن طريق الأداة OpenFileDialog لأنك عندما تفتح هذة الأداة تصبح الأدوات في النافذة السابقة متجمدة لا تستجيب لأي شيء لذلك لا تستطيع السحب والإفلات في النافذة السابقة لأنها ستصبح Disabled مشلولة .
إفتح أي مجلد في جهازك وليكن My Documents أو مجلداتي أو أي مجلد في جهازك ,, ثم قم بسحب الملفات إلى الأداة Attachment_ListBox
هذة الصورة متحركة تبين عملية السحب والإفلات




لا تنسى أن تغير هذة الخاصية



في هذا الحدث (DragEnter) سنقوم بالتحقق من البيانات المسحوبة فوق أداة اللست بوكس (Attachment_ListBox)
إذا كانت البيانات من النوع الذي نريدة سيتغير مؤشر الماوس ,,
نفس الذي يحدث في نظام الملفات الخاص بالوندوز عندما تسحب ملف من مجلد وتريد أن تنقلة إلى مجلد آخر
رمز برمجي:


Private Sub Attachment_ListBox_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Attachment_ListBox.DragEnter If e.Data.GetDataPresent(DataFormats.FileDrop) Then ' إذا تحقق الشرط سنسمح بعملية السحب والإفلات e.Effect = DragDropEffects.Copy Else ' إذا لم يتحقق لن يحدث شيء e.Effect = DragDropEffects.None End If End Sub



هذا الحدث الخاص بالإفلات فوق الأداة Attachment_ListBox حيث أن البيانات المسحوبة هي ملفات تم سحبها من مجلد
البيانات في الحقيقة هي مسارات الملفات المسحوبة وليس بيانات الملفات نفسها
رمز برمجي:


Private Sub Attachment_ListBox_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Attachment_ListBox.DragDrop ' من نوع مصفوفة نصية والذي سيحمل عناوين جميع الملفات file_names هنا قمت بعمل متغير اسمة ' كيف نتحقق من أن البيانات المسحوبة فوق الأداة هي من نوع ملفات ' DataFormats.FileDrop عن طريق البراميتر Dim File_Names As String() = DirectCast(e.Data.GetData(DataFormats.FileDrop), String()) ' file_names هنا سندخل في حلقة تكرارية لنقوم بإضافة جميع الملفات الموجودة في المصفوفة For Each FileName As String In File_Names ' هذة المجموعة الأصلية التي تحمل عنوان الملف بالكامل والتي سيتم تفريغها في الرسالة Me.AttachmentCollection.Add(FileName) '- سيتم إضافة إسم الملف هنا فقط ليراه المستخدم في المثال وليس المسار بالكامل Attachment_ListBox.Items.Add(My.Computer.FileSystem.GetName(FileName)) ' بما أننا قمنا بإضافة ملفات فيجب أن نفعل الزر الخاص بحذفها DeleteSelectedAttachment.Enabled = True Next FileName End Sub

قم بإضافة الحدثين السابقين إلى المشروع (أقصد المشروع الذي قمت بالشرح علية في هذا الموضوع)



تحياتي لك ,,
الرد }}}
تم الشكر بواسطة:
#5
أخي تأكد أنني لم أضع هذا الموضوع إلى بعد أكثر من 100 تجربة وعلى أكثر من بريد
وهو يعمل 100%


إذا كان بريد المرسل على الـgmai
فيجب تغيير الـ Host Name و الـ Port Number
رمز برمجي:

SmtpServer.Port = 587 SmtpServer.Host = "smtp.gmail.com" SmtpServer.EnableSsl = True


إذا كان بريد المرسل على الـHotmail
فيجب تغيير الـ Host Name و الـ Port Number
رمز برمجي:

SmtpServer.Port = 25 SmtpServer.Host = "smtp.live.com" SmtpServer.EnableSsl = True




إذا كان بريد المرسل على الـyahoo
فيجب تغيير الـ Host Name و الـ Port Number
رمز برمجي:

SmtpServer.Port = 25 SmtpServer.Host = "smtp.mail.yahoo.com" SmtpServer.EnableSsl = false

إذا كان بريد المرسل على الـlycos
فيجب تغيير الـ Host Name و الـ Port Number
رمز برمجي:

SmtpServer.Port = 25 SmtpServer.Host = "smtp.mail.lycos.com" SmtpServer.EnableSsl = false



إذا كان بريد المرسل على الـaol
فيجب تغيير الـ Host Name و الـ Port Number
رمز برمجي:

SmtpServer.Port = 587 SmtpServer.Host = "smtp.aol.com" SmtpServer.EnableSsl = false






ممكن أعرف الـ Host Name الذي إستخدمة ,, و الـ Port Number ,,
إضاً اريد أن اعرف البريد الذي إستخدمة للإرسال ,, على إي شركة ,, Hotmail أو Yahoo أم ماذا
الرد }}}
تم الشكر بواسطة:
#6
تحديث جديد للمشروع : بتاريخ 2010/11/02

تم إضافة نافذة جديدة تمكنك من إضافة عدة عنوان من ملف نصي


رابط تحميل المشروع بعد التحديث في المرفقات

تحياتي للجميع ,,


الملفات المرفقة
.rar   Modified Send EMail With Html VB2008 Updated(2010-11-02).rar (الحجم : 865.13 ك ب / التحميلات : 123)
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  إضافة و نسخ الخطوط الخاصّة لمجلّد خطوط الوينداوز عبد العزيز البسكري 2 3,700 08-05-23, 12:03 AM
آخر رد: ابو محمد محمد محمد
  [درس فيديو] اضافة ملف مشغل لصفحة html و جافاسكريبت و سي اس اس بفيجوال بيسك.(قد لا اكون اصبت بالتع سعود 1 917 17-04-23, 08:31 AM
آخر رد: سعود
  دمج ملفات المشروع ابو روضة 4 1,633 11-11-22, 09:50 PM
آخر رد: ابو روضة
  نظرة على DropBox SDK و التعامل معها +برنامج رفع و تحميل ملفات ابو ليلى 4 4,871 08-09-22, 11:54 AM
آخر رد: saif2023
  [مقال] إضافة تقارير Crystal report إلى فيجوال 2010 اسامه الهرماوي 3 5,304 05-10-21, 01:38 PM
آخر رد: mohameddahab867
Lightbulb [مقال] التعامل مع ملفات اوفيس من خلال مكتبة NPOI ابو ليلى 2 4,192 01-07-21, 11:42 AM
آخر رد: kebboud
  [مقال] إضافة خاصية التحجيم التلقائي - AutoSize - إلى أداة مربع النص - TextBox sooriaty03 10 12,034 21-03-21, 09:53 PM
آخر رد: عبد الهادي بهاب
  طريقة إضافة اختصار للصنف في شاشة المبيعات ملهمـ 5 5,905 14-07-20, 12:24 PM
آخر رد: ابراهيم ايبو
  عمل ملفات dll بالفيجول.net hosney 6 8,131 31-01-19, 04:45 PM
آخر رد: alsouf
  إضافة نغمات إفتتاحيّة أثناء تسطيب البرنامج عبد العزيز البسكري 11 7,248 23-01-19, 08:35 PM
آخر رد: عبد العزيز البسكري

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم