دانلود - آموزش - سورس کد - کنکور - برنامه

دانلود - آموزش - سورس کد - کنکور - برنامه

دانلود - آموزش - سورس کد - کنکور - برنامه

دانلود - آموزش - سورس کد - کنکور - برنامه

ارسال ایمیل در asp.net قسمت پایانی

کلاس Alternate View:
زمانی از این کلاس استفاده میکنیم که بخواهیم یک کپی از ایمیل را به فرمت دیگری تهیه کنیم.کاربرد این کپی در زمانی مشخص میشود که وقتی شخص از یک برنامه یا به طور کلی یک Reader برای دیدن ایمیل خود استفاده میکند،که این برنامه یا Reader قابلیت تفسیر تگ های HTML متن ایمیل را ندارد.پس نسخه دیگر از متن ایمیل که متن ساده است نمایش داده خواهد شد
زمانی که از این روش استفاده میکنید به اصلاح گفته میشود که شما یک Multi-Part MIME (Multipurpose Internet Mail Extensions) message ساخته اید
اصل پیشگیری از خطا و مدیریت استثنا ها حکم میکند که در ارسال ایمیل هایمان از این روش استفاده کنیم تا اطمینان حاصل کنیم که متن ایمیل در هر حالتی قابل خواندن است

برخی از ویژگی های(Properties) کلاس Alternate View به شرح زیر میباشند

توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/library/system.net.mail.alternateview.aspx

مثالی از نحوه استفاده از این کلاس:

[C#]

MailMessage mail = new MailMessage();
mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");
mail.Subject = "This is an email";

AlternateView plainView =
AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", null, "text/plain");

AlternateView htmlView =
AlternateView.CreateAlternateViewFromString("this is bold text, and viewable by those mail clients that support html", null, "text/html");

mail.AlternateViews.Add(plainView);
mail.AlternateViews.Add(htmlView);

SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);


[VB]

Dim mail As New MailMessage()
mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")
mail.Subject = "This is an email"

Dim plainView As AlternateView =
AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", Nothing, "text/plain")

Dim htmlView As AlternateView =
AlternateView.CreateAlternateViewFromString("this is bold text, and viewable by those mail clients that support html", Nothing, "text/html")

mail.AlternateViews.Add(plainView)
mail.AlternateViews.Add(htmlView)

Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)
این نکته در کد بالا قابل توجه است که:

در کد زیر
AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", null, "text/plain");
به جای "text/plain" میتوانید از قطعه کد زیر ا ستفاده کنید
System.Net.Mime.MediaTypeNames.Text.Plain


سایر مقادیری که میتوانید برای این قسمت در نظر بگیرید به شرح ذیل میباشند که به ضرورت از آنها استفاده خواهد شد
 
System.Net.Mime.MediaTypeNames.Text.Html
System.Net.Mime.MediaTypeNames.Text.RichText
System.Net.Mime.MediaTypeNames.Text.Xml


کلاس Linked Resource:

آخرین کلاس،کلاس Linked Resource میباشد.از این کلاس جهت گنجاندن عکس در ایمیل استفاده میشود
برای گنجاندن عکس در ایمیل شما باید یک Alternate view با فرمت HTML بسازید و در این Alternate view از یک تگ استفاده کنید که به یک
ContentId )CID) از Linked Resource اشاره میکند
ContentId )CID) میتواند نام یک فایل تصویری در آدرسی مشخص باشد 
 
تنظیم اولویت (Priority) ایمیل:
گرچه تعیین اولویت ایمیل به وسیله هدر ها (Header) کنترل میشود،اما در فضای نام System.Net.Mail تعیین اولویت پیغام جزو ویژگی های شی ایجاد شده از کلاس MailMesseage میباشد
ویژگی Priority میتواند مقادیر زیر را دریافت کند


 

مثالی از نحوه استفاده از این ویژگی:
[C#]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";

mail.Priority = MailPriority.High;

SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

[VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."

mail.Priority = MailPriority.High

Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)
اضافه کردن Reply-To به هدر ایمیل :

همانند ویژگی Priority ،هدر Reply-Toنیز توسط شی ایجاد شده از MailMesseage قابل تنظیم میباشد
از این ویژگی جهت تعیین ایمیلی به عنوان گیرنده پاسخ استفاده میشود
وقتی کاربر ایمیل را می بیند و قصد ارسال پاسخ آن را دارد،ایمیل تعیین شده با این ویژگی به عنوان دریافت کننده پاسخ میباشد
مثالی از نحوه استفاده از این ویژگی:
[C#]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";

mail.ReplyTo = new MailAddress("SomeOtherAddress@mycompany.com");

SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

[VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."

mail.ReplyTo = New MailAddress("SomeOtherAddress@mycompany.com")

Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)

اضافه کرده header های دلخواه به ایمیل:

آیا تا به حال به هدر هایی که همراه با ایمیلی که برای شما ارسال میگردد دقت کرده اید؟
این هدرها دارای اطلاعات جالب و مفیدی از ارسال کننده ایمیل میباشند
برخی از این هدر ها ثابت و برخی دیگر به وسیله فرستنده قابل تغییر میباشند
حتی شما قادر خواهید بود اطلاعات دلخواه خود را در هدر ایمیل های ارسالی قرار دهید
برای اضافه کردن هدر به ایمیل از کلاس MailMessage استفاده میکنیم

مثالی از نحوه استفاده از این ویژگی:
[C#]

        MailMessage mail = new MailMessage();

        mail.From = new MailAddress("me@mycompany.com");
        mail.To.Add("you@yourcompany.com");

        mail.Subject = "This is an email";
        mail.Body = "this is the body content of the email.";

        mail.Headers.Add("Company", "My Company");
        mail.Headers.Add("Location", "Iran");

        SmtpClient smtp = new SmtpClient("127.0.0.1");
        smtp.Send(mail);

[VB]

        Dim mail As New MailMessage()

        mail.From = New MailAddress("me@mycompany.com")
        mail.To.Add("you@yourcompany.com")

        mail.Subject = "This is an email"
        mail.Body = "this is the body content of the email."

        mail.Headers.Add("Company", "My Company")
        mail.Headers.Add("Location", "Iran")

        Dim smtp As New SmtpClient("127.0.0.1")
        smtp.Send(mail)
نمونه ای از نمایش هدرهای ایمیل در Yahoo:


یکی از هدرهای جالب،هدر Disposition-Notification-To میباشد
با استفاده از این هدر و معرفی یک ایمیل به عنوان مقدار هدر میتوانید از خوانده شدن ایمیل توسط گیرنده آن باخبر شوید(البته استفاده از این هدر به صورت تضمین شده نمی باشد و درستی عملکرد آن دارای شرایط میباشد به همین جهت مورد بحث و برسی قرار نمیگیرد ) 
 
 
پیکر بندی Web.Config جهت ارسال ایمیل:
اگر تا کنون دقت کرده باشید،در هنگام ارسال ایمیل برخی از قسمتها مشترک میباشد.این قسمت ها به شرح ذیل میباشند

MailMessage.From
SmtpClient.Host
SmtpClient.Port


با تنظیم یک باره آنها در Web.Config از تنظیم این ویژگی ها در قسمت های مختلف جلوگیری خواهد شد


 
   

     
        defaultCredentials="false" />
     

   
 
 
 
نکته قابل توجه در مورد defaultCredentials میباشد که اگر مقدار true داشته باشد userNameو passwordدر نظر گرفته نمیشوند

ارسال ایمیل به صورت غیر همزمان:

SNM امکان ارسال ایمیل به صورت غیر همزمان را فراهم آورده است
با استفاده از این روش،در زمان ارسال ایمیل به کار دیگری پرداخته میشود و با هندل کردن رخداد اتمام ارسال ایمیل،می توان از ارسال درست یا نادرست ایمیل آگاه شد.
همانطور که اشاره شد،میتوانیم درستی ارسال ایمیل را تشخیص دهیم
این امر توسط رخداد SendCompleted کنترل میشود
در مثال زیر قصد داریم این رخداد را به دلخواه خود هندل کنیم و پیغام مناسب خود را به کاربر نمایش بدهیم

مثالی از نحوه استفاده از این ویژگی:
 [C#]

MailMessage mail = new MailMessage();
mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";

SmtpClient smtp = new SmtpClient("127.0.0.1");

/*1*/ object user_State = mail;

/*2*/smtp.SendCompleted += new
SendCompletedEventHandler(SmtpClient_OnCompleted);

/*3*/smtp.SendAsync(mail, user_State);
public static void SmtpClient_OnCompleted(object sender,AsyncCompletedEventArgs e)
    {

     /*4*/ MailMessage mail = (MailMessage)e.UserState;

        string subject = mail.Subject;

        if (e.Cancelled)
        {
            Console.WriteLine("Send canceled for mail with subject[{0}].", subject);
        }
        if (e.Error != null)
        {
            Console.WriteLine("Error {1} occurred when sending mail
[{0}] ", subject, e.Error.ToString());
        }
        else
        {
            Console.WriteLine("Message [{0}] sent.", subject);
        }
    }
 [VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."

Dim smtp As New SmtpClient("127.0.0.1")

/*1*/ Dim user_State As Object = mail

/*2*/ AddHandler smtp.SendCompleted, AddressOf SmtpClient_OnCompleted

/*3*/ smtp.SendAsync(mail, user_State)


Public Sub SmtpClient_OnCompleted(ByVal sender As Object, ByVal e As ComponentModel.AsyncCompletedEventArgs)

/*4*/ Dim mail As MailMessage = CType(e.UserState, MailMessage)

   Dim subject As String = mail.Subject

   If e.Cancelled Then
   Console.WriteLine("Send canceled for mail with subject [{0}].",subject)
   End If
   If Not (e.Error Is Nothing) Then
            Console.WriteLine("Error {1} occurred when sending mail [{0}] ", subject, e.Error.ToString())
   Else
       Console.WriteLine("Message [{0}] sent.", subject)
   End If

End Sub
نکات قابل توجه:

به خطوطی که با شماره 1 تا 3 شماره گذاری شده اند توجه کنید
در خط 1 ،شی بنام user_State به شی ایجاد شده از کلاس Mailmessage منتسب شده است
و در خط 3 این شی همرا با شی Mailmessage به عنوان ورودی تابع ارسال شده است
دلیل این امر این است که ما اطلاعاتی از ایمیل را که نیازمندیم از آنها برای نمایش پیغام های مناسب استفاده کنیم در دسترس داشته باشیم

این شی ارسالی به صورت یک ویژگی(Property) به نام UserSate قابل دسترس خواهد بود (خط 4)
در خط 2 نیز تابع SmtpClient_OnCompleted را به عنوان تابعی اجرایی برای این رخداد معرفی میکینم


نوشتن ایمیل در pickup directory:

نوشتن ایمیل در pickup directory سرویس SMTP در IIS یکی دیگر از امکانات SNM میباشد. pickup directory یک دایرکتوری ویژه است سرویس Smtp مایکروسافت از آن برای ارسال ایمیل استفاده میکند
تمام فایل های موجود در این دایرکتوری بر اساس سرویس Smtp پردازش و تحویل داده میشود
اگر پروسس تحویل ایمیل شکست بخورد فایل در queue directory ذخیره میشود
تا بعدا ارسال شوند
اگر یک خطای مهلک (fatal error) زخ بدهد فایل به Badmail directory منتقل میشود
با نوشتن در pickup directory سرعت پردازش بالا میرود چرا که تبادل ارتباط با یک ایمیل سرور دیگر از جریان ارسال ایمیل حذف خواهد شد

مثالی از نحوه استفاده از این ویژگی:
 [C#]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";

SmtpClient smtp = new SmtpClient();
smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
smtp.Send(mail);

[VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."

Dim smtp As New SmtpClient()
smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis
smtp.Send(mail)
قابل ذکر است از این روش میتوانید مثال های فوق را بدون اتصال به اینترنت و داشتن سرور واسط و فقط با نصب سرویس SMTP بر روی IIS به صورت عملی انجام دهید
نتایج کار خود را میتوانید در
Inetpub\mailroot

در داخل پوشه Pickup یا Queue مشاهده کنید
نظرات 0 + ارسال نظر
برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد