![]() |
|
إرسال بريد إلكتروني بتنسيق html + إضافة ملفات مرفقة للرسالة (شرح بالصور) - نسخة قابلة للطباعة +- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb) +-- قسم : قسم لغة الفيجوال بيسك VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=182) +--- قسم : قسم مقالات VB.NET (http://vb4arb.com/vb/forumdisplay.php?fid=184) +--- الموضوع : إرسال بريد إلكتروني بتنسيق html + إضافة ملفات مرفقة للرسالة (شرح بالصور) (/showthread.php?tid=4780) |
إرسال بريد إلكتروني بتنسيق html + إضافة ملفات مرفقة للرسالة (شرح بالصور) - RaggiTech - 02-10-12 كاتب الموضوع : عبدالله الدوسري
كاتب الموضوع : عبدالله الدوسري
السلام عليكم ورحمة الله وبركاتة ,,
أحب أن أقدم لكم موضوع إرسال رسالة بريد إلكتروني طريقة عرض الرسالة ستكون على شكل 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 كود : [color=blue]Imports [/color]System.Net.Mailكود : ' عنوان مسار ملف صورة الشعار الذي سيظهر في أعلى الرسالةكود : 'الكائن الذي يحمل الرسالة بالكاملكود : ' في هذا المتغير سيتم إدخال الملفات المرفقة فية كود : '- موجود في الريسورس HTML هو ملف HTMLBodyText كود : '- هذا متغير سيحمل صورة الشعار لتظهر في الرسالة عند عرظها للقرائةSmtpServer هذا هو الكائن المسؤول عن عملية الإتصال بخادم البريد والإرسال ,, وهو ينحدر من مجال الأسماء System.Net.Mai ################################################## ### طريقتين للإعلان عن الكائن SmtpServer للإستفادة من الحدث SendCompleted الإعلان بواسطة الجملة WithEvents أو الإعلان عنة بطريقة عادية وإستخدام الطريقة AddHandler لربط الحدث مع أي Sub ################################################## ### من المستحسن إستخدام الجملة WithEvents قبل اسم الكائن إذا أردت أن تستفيد من الحدث SendCompleted أي أنه بعد الإنتهاء من إرسال الرسالة يقوم الكائن بإطلاق هذا الحدث والذي ستستفيد منه لعمل معين كود : [color=blue]Friend WithEvents[/color] SmtpServer [color=blue]As New [/color]SmtpClient()################################################## ### ################################################## ### وإذا أردت أن لا تعلن عنه بوجود أحداث WithEvents وتريد الإستفادة من الحدث SendCompleted استخدم الطريقة AddHandler كود : [color=blue]Dim [/color]SmtpServer [color=blue]As New[/color] SmtpClient()هو Sub ستقوم أنت بإنشائة ليتم مناداته عند الإنتهاء من عملية الإرسال كود : [color=blue]Private Sub[/color] MySubSendCompleted()############################################### الإجراءات والأحداث الكود التالي في الحدث Load الخاص بتحميل النافذة mailform ################################################## ##### ################################################## ##### كود : '- اسم المرسلكود : '- بريد المرسلكود : '- كلمة المرور الخاصة بالمرسلكود : 'بريد المستلمكود : '- عنوان الرسالةكود : '- نص الرسالة الصورة CompanyLogo.jpg نقوم بتعريف المسار الخاص بالصورة ونضعة في المتغير النصي CompanyLogoPath كود : CompanyLogoPath = [color=blue]My[/color].Application.Info.DirectoryPath & "\CompanyLogo.jpg"الخاصية لملف الصورة Copy to Output Directory = Copy always وضع مسار صورة الشعار CompanyLogoPath في التكست بكس كود : [color=blue]Me[/color].LogoPath.Text = CompanyLogoPathتحميل صورة الشعار في صندوق الصورة من المسار CompanyLogoPath كود : [color=blue]Me[/color].CompanyLogo_PictureBox.Image = Image.FromFile(CompanyLogoPath)لتعطيل زر حذف الملفات المرفقة لأنه حالياً البرنامج في الحدث لود وأكيد مافية ملفات مرفقة لحذفها كود : [color=blue]Me[/color].DeleteSelectedAttachment.Enabled = [color=blue]False[/color]################################################## ##### ################################################## ##### الكود التالي في الحدث Click الخاص بالزر إرسال ################################################## ##### ################################################## ##### Credential هذا ما يسمى بـ وثائق التفويض في الشبكة وهو طبعاً للتحقق من هويتك لدى خادم البريد ما إذا كنت أحد المستخدمين المسجيلين أو لا يجب أن تستخدم حسابك الخاص لإرسال البريد الإلكتروني هذة البيانات تحفظ في هذا المتغير حالياً حتى يأتي أمر الإرسال فيتم التحقق منها كود : SmtpServer.Credentials = [color=blue]New [/color]Net.NetworkCredential([color=blue]Me[/color].SenderEmail.Text, [color=blue]Me[/color].SenderEmailPassword.Text)تعريف ببيانات الإتصال بالخادم وفي هذا المثال إستخدمت الـ Gmail كود : SmtpServer.Port = 587الخاصية 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 الخاص بالزر إرسال تابع ,,,,,,,,,,,,,,,,,,,,,,,, إرسال بريد إلكتروني بتنسيق html + إضافة ملفات مرفقة للرسالة (شرح بالصور) - RaggiTech - 02-10-12
تابع,,,,,, الحدث Click الخاص بالزر إرسال
الآن سندخل في مرحلة إعداد تصميم شكل الرسالة تذكر أن الرسالة على شكل Html يعني بإمكانك تصميم صفحة Html وإرسالها كرسالة طبعاً بعد إدخال نص الرسالة في كود الـ HTML وإدخال بعض الصور ستكون جاهزة للإرسال نبدأ في صورة الشعار وفي هذا المثال وضعتة في أعلى الرسالة المتغير logo وهو من نوع LinkedResources وهو ما يعرف بربط الموارد ,, قمنا بالإعلان عنه مسبقاً ولكن الآن سنعطيه قيمة حقيقية بالجملة New المتغير CompanyLogoPath يحمل عنوان مسار الصورة أي أننا نريد ربط هذة الصورة مع الرسالة كود : logo = [color=blue]New [/color]LinkedResource(CompanyLogoPath)الآن ركز معي في عملية ربط هذة الصورة بموقعها داخل كود الـ HTML كلنا نعرف هذة الطريقة لإضافة صورة في جسم الـ HTML فعنوان الصورة معروف مكانة في الإنترنت كود : <img src='http://vb4arab.com/vb/attachments/logo.jpg' >لا نعرف العنوان الخاص بالصورة لذلك سنستخدم طريقة الربط بالإسم المعرف للصورة وهو ما يعرف بربط الموارد ------------------------------------------------------------------------- بعد أن قمنا بتحميل الصورة في المتغير logo الآن نعطيه اسم سنستخدمة داخل الـ Html حتى يتم عرظها في الرسالة -------------------------------------------------------- كود : '- الآن نعطي إسم لهذة الصورة وهو MyLogoالآن نقوم بعمل متغير نصي لنحفظ فية كود الـ HTML الخاص بالصورة كود : Dim My_Logo As Stringكود : My_Logo = [color=darkred]"<img src='cid:"[/color] & logo.ContentId & [color=darkred]"' height='150' width='750'>"[/color]كلمة cid: الموجودة في خانة عنوان الصورة هي للتعريف بأن الصورة موجودة ظمن الموارد الخاصة بالرسالة ويتم التعرف على الصورة من خلال الاسم الذي أعطيناه لها من قبل وهو موجود في logo.ContentId تذكر أن المتغير MessageContaint قمنا بالإعلان عن مسبقاً وأعطيناه القيمة الموجودة في الملف HTMLBodyText.htm الموجود في الريسورس سندخل كود الـ HTML الخاص بالصورة بعد أن رتبنا عملية الربط وسندخل عنوان الرسالة بالخط العريط حسب التنسيق الذي حددتة في ملف الـ HTML وسندخل نص الرسالة لاحظ الصور ستكون أكثر توظيحاً الآن ومن خلال الكود نقوم بعملية إستبدال للنصوص الموجودة في المتغير النصي MessageContaint والذي يحمل قيمة ملف الـ HTML بالكامل كود : MessageContaint = MessageContaint.Replace("MY_LOGO", My_Logo)-------------------------------------------------------------------------------- النص الموجود في ملف الـ 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( _الآن نقوم بإظافة الصورة للموارد الخاصة بـ 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, [color=blue]Nothing[/color])الطريقة Send فهي لا تسمح بإستمرارية الكود إلى بعد الإنتهاء من عملية الإرسال ولا تقوم بإطلاق الحدث SendCompleted ولا تسمح لك بإلغاء العملية ولا تدعم طريقة تمرير لكائن Object التي ذكرتها في الطريقة السابقة أي أنه عن الوصول إلى هذا الأمر يتجمد البرنامج عند هذا السطر حتى إنتهاء العملية كود : SmtpServer.Send(Mail)وفي هذا المثال إستخدمت الطريقة SendAsync وبما أننا إستخدمنا الطريقة SendAsync فإن الكود سينتقل مباشرتاً إلى السطر الذي بعدة مع إبقاء عملية الإرسال في الخلفية ,, لذلك بإمكانك ترتيب شكل الفورم في وضع الإرسال ,, يعني تقوم بتعطيل زر الإرسال ,, تظهر صورة تبين عملية الإرسال ,, أي شيء تريد عملة ,, لأنه ومن خلال الحدث SendCompleted نستطيع الرجوع عن هذة التغييرات مع إظهار رسالة تبين إنتهاء عملية الإرسال ,,,,, ليس بالظرورة أن عملية الإرسال تمت بنجاح يعني أن الرسالة قد وصلت أنت قمت بتوصيل الرسالة إلى الخادم بنجاح ,, ولكن لا نعلم إذا كان الخادم قد نجح هو بدورة في توصيل الرسالة إلى المستلمين .. إنتهاء الحدث Click الخاص بالزر إرسال ################################################## ##### ################################################## ##### حدث Click الخاص بزر بإضافة ملفات مرفقة ################################################## ##### ################################################## ##### كود : Private Sub AddNewAttachment_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles AddNewAttachment.Click################################################## ##### هذا الزر الخاص بإلغاء عملية الإرسال ################################################## ##### ################################################## ##### كود : Private Sub CancelSendAsync_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CancelSendAsync.Click################################################## ##### هذا هو الحدث SendCompleted ################################################## ##### ################################################## ##### كود : '- SendCompleted Event################################################## ##### لإضافة الحدث ,, هذة صورة من باب إكمال الشرح تم الإنتهاء من طريقة عرض الرسالة بنسق HTML ---------------------------------------------------------------------------------------------- طريقة عرض الرسالة بدون تنسيق ( العادية) هو نفس الكود الذي تم شرحه من قبل ولكن لا يحتوي على أي شيء له علاقة بالـ HTML بالإضافة إلى أن بعض المتغيرات ليست موجود لأن ليس لها فائدة في هذة الطريقة بالإضافة إلى عدم وجود ملف HTML في الريسورس وعدم وجود صورة الشعار ظمن ملفات المشروع ملفات المشروع بنسخة الفيجوال 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 تم بحمد الله أرجوا أن أكون وفقت في طريقة الشرح تحياتي لكم ,, ودمتم بخير دعواتكم الصالحة |