الثلاثاء، 12 يناير 2010

إرسال Email من الموقع


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

الكثير منا نحن المبرمجين نسأل عن الطريقة وعند إجدها تبدأ المشاكل في الظهور
سواء في الكود البرمجي أو في نفس Server .


في هذه المقالة سأقوم بشرح كود برمجي بلغة VB.NET لعملية إرسال بريد إلكتروني
و كذلك الخطوات اللازمه لتجهيز Server لكي تتم عملية الإرسال بنجاح.

لنبدأ : بسم الله الرحمن الرحيم
الخطوة الأولى: كتابة الكود
  1. نحتاج لأستدعاء مكتبة التالية : Imports System.Net.Mail .
Dim mail As New MailMessage()
Dim smtp As New SmtpClient
With mail
.From = New MailAddress(" إميل ابمرسل", "الأسم الذي يظهر للمرسل")
.Body = "محتوى الرسالة"
.Subject = "موضوع الرسالة"
.To.Add("first@email.com,second.email.com") ' مجموعة الإميلات المراد الإرسال لها مفصول بينها بفاصلة
.CC.Add("first@email.com,second.email.com") ' مجموعة الإميلات المراد الإرسال لها مفصول بينها بفاصلة
.Bcc.Add("first@email.com,second.email.com") ' مجموعة الإميلات المراد الإرسال لها مفصول بينها بفاصلة
'cc: عند وضع جميع عناوين المرسل إليهم في هذه الخانة ستكون مجموعة العناوين ظاهرة لكل المستقبلين
'bcc:عند وضع جميع عناوين المرسل إليهم في هذه الخانة لن تكون مجموعة العناوين ظاهرة لكل المستقبلين
.Priority = Net.Mail.MailPriority.High ' الرسالة
'.IsBodyHtml = True ' هذه الخاصية لتفعيل HTML في محتوى الرسالة
.Attachments.Add(New System.Net.Mail.Attachment(Request.PhysicalApplicationPath + "\test8.pdf"))
' الملفات المرفقة مع الرسلة و مو جوده في نفس مسار المشروع
'.Attachments.Add(New System.Net.Mail.Attachment("c:\temp.txt")
'.Attachments.Add(New System.Net.Mail.Attachment("d:34.png"))
End With
With smtp
'.EnableSsl = True لتشفير الإتصالSSL في حال كان السيرفر يستخدم
.Host = "127.0.0.1" 'الخاص بالسيرفر IP
.Port = 25 ' رقم البورت
'127.0.0.1: للسرفر المحلي ip عنوان
' للأرسال بأستخدام سيرفر آخر قم بوضع عنوان السيرفر
' يستخدم التالي Gmail لمن يريد الإرسال بإستخدام حساب
'smtp.Host = "smtp.gmail.com"
' smtp.Port = 587
'.Credentials = New System.Net.NetworkCredential(" كلمة المرور ", "أسم المستخدم")
' في هذه الخطوة تضع بيانات الدخول للسيرفر مثلاً في حال استخدم سيرفرالجميل
' تضع اسم المستخدم و عنوان بريد الجميل الخاص بك
End With

Try
smtp.Send(mail) 'أخيراً قم بإرسال الرسالة
Catch smtpExc As System.Net.Mail.SmtpException
MsgBox(smtpExc.Message)
Catch ex As Exception
MsgBox(ex.Message)
End Try
الخطوة الثانية : هي إعداد SMTP Server  : و يمكن الوصول له عن طريق التالي
Start - > Controal Panal -> Admenstrative Tool -> Internet Information Services


بزر الفأر اليمن إضغط على Default Smtp Virtual Server  ومن ثم إختر من القائمة Proparties و من ثم تبويب Access

إضغط على conction و من ثم اختر only the list below وأضف عنوان ip  الذي تستخدمه و نفذ هذه الخطوة مع Relay



أخيراً قم بإقاف Smtp Server  و أعد تشغيله و بهذا نكون قد إنتهينا قم بإختبار الكود و يجود مثال مرفق جاهز للإختبار.

بعض الملاحظات:

  • في حال الإرسال من السيرفر المحلي فإن Hotmail  يرفض الرسائل و ينتهي بها الحل لمجلد Drob .


  • في حال الإرسال لبريد Yahoo و gmail تصل الرسالة في معظم الوقت لـ Spame  .


  •  لو قمت بإستخدام حساب gmail لا بد من تفعيل  POP 3  من الإعدادات.


  • في حال كانت عملية الإرسال ناجحة لكن الرسالة لم تصل لوجهتها قم بتفقد الرسائل في المسار التالي C:\Inetpub\mailroot في مجلد Queu  أو BadMail أو Drop.

مرفقات: 
صور لرسالة من بريد الياهو و الجميل من الكود المرفق.

 لرؤية الصورة بشكل أوضح إضغط على الصورة.



*شرح بالفديو من موقع Asp.net

هناك تعليقان (2):

  1. تسلم ايديك بس ممكن هذا الدرس يكون عن ال C# ايضا مع التقدير

    ردحذف
  2. تفضل الكود ب c#

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Net.Mail

    public partial class _Default : System.Web.UI.Page
    {
    protected void Page_Load(object sender, EventArgs e)
    {
    MailMessage mail = new MailMessage();
    SmtpClient smtp = new SmtpClient();
    mail.From = new MailAddress("إيميل المرسل","اسم المرسل");
    mail.To.Add("إيميل المرسل له");
    mail.Subject = "موضوع الرساله";

    string Body = "محتوى الرساله";

    mail.Body = Body;

    mail.Attachments.Add(new Attachment(Request.PhysicalApplicationPath + "\test8.pdf"));
    smtp.Host = "127.0.0.1" ;
    smtp.Port=25;
    smtp.Send(mail);


    }
    }

    ردحذف