اگر تا کنون دقت کرده باشید،در هنگام ارسال ایمیل برخی از قسمتها مشترک میباشد.به شرح ذیل

MailMessage.From SmtpClient.Host SmtpClient.Port

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

 

defaultCredentials=”false” />

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

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

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

مثالی از نحوه استفاده از این ویژگی: SNM امکان ارسال ایمیل به صورت غیر همزمان را فراهم آورده است  [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”);

/*۱*/ object user_State = mail;

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

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

/*۴*/ 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”)

/*۱*/ Dim user_State As Object = mail

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

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

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

/*۴*/ 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 نکات قابل توجه:

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

این شی ارسالی به صورت یک ویژگی(Property) به نام UserSate قابل دسترس خواهد بود (خط ۴) در خط ۲ نیز تابع 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 مشاهده کنید