( تعداد نمایش : 1036 )

IrMail، روشی جدید برای ارسال نامه در ASP.NET (بخش دوم)

در قسمت قبل این مقاله به بررسی نیاز به شئ ‎ای برای ارسال نامه ها در برنامه های تحت وب پرداختیم. همچنین نگاهی داشتیم به روشها و امکانات موجود در این زمینه. نهایتا به اینجا رسیدیم که ابزارهای حاضر کامل نیستند و نیاز به تکمیل دارند. در صورتیکه قسمت قبل این مقاله را مطالعه نکرده اید، پیشنهاد می شود قبل از ادامه به خواندن این قسمت، آنرا مطالعه فرماید.

همانطور که اشاره شد، شئ IrMail شئ‎ای است برای ارسال نامه ها از طریق برنامه های تحت دات نت. در زیر مزیت ها و توانایی های این شئ بررسی شده است تا بتوان دیدی صحیح تر نسبت به آن پیدا کرد.

مزیت های شئ IrMail

امکان ارسال نامه با قابلیت Authentication

همانطور که ذکر شد، شئ ذاتی NET. بدلیل سادگی آن، قابلیت Authentication (شناسائی) را به ما نمی دهد. اما برخی اوقات سرویس دهنده های SMTP ما را مجبور می کنند تا قبل از ارسال نامه، خود را معرفی (login) کرده و یا به اصطلاح Authenticate شویم. در IrMail این مساله بخوبی پیاده سازی شده است. به صورتی که با تنظیم دو خصیصه username و password عملیات Authentication به سادگی انجام می شود.

امکان ارسال نامه های فارسی بدون نگرانی از نحوه خوانده شدن

این مورد نیز یکی از امکانات بالقوه این شئ می باشد که در نوع خود تقریبا جدید و منحصر بفرد است. این ویژگی که تحت عنوان UTF8AnyWhere ذکر می شود، باعث می شود نامه های شما در هر جایی که UTF8 را پشتیبانی می کند حتما به صورت فارسی دیده شود. از آنجا که امروزه تقریبا تمام سیستم عامل ها از استاندارد یونیکد پشتیبانی می کنند، عدم توانایی خواندن نامه های فارسی بسیار کم می شود. بطور واضح آنکه به همان اطمینانی که شما سایت خود را بصورت یونیکد طراحی می کنید تا فارسی دیده شدن آن تضمین شود، همین تضمین نیز برای درست خوانده شدن نامه های شما بوجود می آید. به بیان ساده تر هرجا سایت شما فارسی دیده شود، این تضمین هست که نامه های شما نیز فارسی دیده شود. نکته دیگر اینکه نامه های شما در هر نوع Encodingای که قرار داده شده باشد، بازهم فارسی دیده می شود و لزومی نیست که حتما Encoding نامه بصورت UTF8 باشد. بنابر آنچه گفته شد، نامه های شما چه در Hotmail، چه در Yahoo و چه در هر سرویس دهنده دیگری حتما فارسی دیده می شود. استفاده از این ویژگی بسیار ساده است و با True کردن property مربوطه، کلیه عملیات لازم برای این کار به صورت خودکار انجام می شود.

تضمین ارسال تمامی نامه ها حتی در صورت قطع بودن موقتی سرویس دهنده SMTP

مشکل دیگری که کما بیش سایت های مختلف با آن مواجه هستند، قطع شدن موقتی SMTP Server می باشد. مثال زیر را در نظر بگیرید. در بعضی مواقع سرویس دهنده SMTP بنا به دلایل مختلفی برای مدتی (هرچند کوتاه) قطع می شود و از آنجا که اکثر میزبانها برای یک خرابی جزیی خود را لازم به توضیح نمی بینند، بنابراین شما از این وضعیت مطلع نخواهید شد و درنتیجه قادر نخواهید بود که اقدامی را در این زمینه انجام دهید. البته همیشه هم تقصیر بر گردن میزبانها نیست و گاهی خود سرور با مشکل مواجه می شود. شاید این مشکل در نگاه اول جدی به نظر نرسد. اما اگر در همین زمان یک شرکت بزرگ قصد داشته باشد به شما پیشنهاد همکاری دهد و از طریق صفحه “تماس با ما” و از طریق فرم تهیه شده در آن، قصد ارسال نامه ای به شما را داشته باشد چه رخ خواهد داد؟ خوب عملا این نامه هرگز ارسال نخواهد شد و شاید شما یک موقعیت استثنایی را به همین سادگی از دست بدهید!

در طراحی شئ IrMail این مشکل عملا از بین رفته است. چرا که در صورت عدم امکان ارسال نامه توسط سرویس دهنده SMTP در آن لحظه، نامه مذکور را ذخیره کرده و در تماس بعدی با سرویس دهنده SMTP، (در صورت فعال بودن آن) سعی در ارسال مجدد نامه های ارسال نشده خواهد کرد. بدین ترتیب حتی اگر SMTP Server برای مدت مدیدی هم قطع باشد، دیگر شما نگران از دست دادن هیچ نامه ای نخواهید بود. این مورد برای تمام نامه هایی که از طریق این شئ ارسال و یا دریافت می شوند صدق خواهد کرد. در طراحی این فرآیند، نکات زیر رعایت شده است:

۱- فایل حاوی نامه های ذخیره شده از نوع XML می باشد. بنابراین حتی اگر درآینده NET. بر روی سرور Linux و یا حتی هر سرور دیگری ارایه شد، با مشکل مواجه نمی شود. چراکه XML یک استاندارد است که بر فایل های ساده متنی متکی است.

۲- از آنجا که ظرف ذخیره سازی، یک فایل متنی ساده است، از مدیریت و کنترل دسترسی های همزمان در آن خبری نیست. بدین معنی که اگر SMTP Server فعال نبود و در آن واحد دو کاربر قصد ارسال نامه را داشتند، به احتمال زیاد منبع مورد نظر بهم می ریزد (Not thread-safe). در اینجا نیز مشکل برطرف شد و این مدیریت با توجه به امکاناتی که NET. در کنترل منابع همزمان فراهم کرده است ایجاد شده است ( برای اطلاعات بیشتر به مقاله Threadها در ASP.NET مراجعه کنید). بدین ترتیب دسترسی های همزمان مشابه آنچه در DBMS ها رخ می دهد، امکان پذیر است.

نمونه ای از نحوه استفاده از شئ IrMail

از آنجا که این شئ در هر بار ایجاد نیاز به تنظیمات خاصی دارد (مثلا Username ،Password، محل دخیره سازی نامه های ارسال نشده و…) که برای هر سایت منحصربفرد است، پیشنهاد می شود که به صورت زیر عمل شود.

یک کلاس از کلاس IrMail.Mail را به ارث برده و تنظیمات خاص خود را در سازنده (Constructor) آن قرار دهید. در هنگام نیاز به ارسال نامه فقط کافی است یک نمونه از کلاس ارث بری شده را ایجاد کنید (نمونه ای از این ارث بری در زیربه زبان VB.NET نشان داده شده است).

Public Class MySmtpMail
Inherits IrMail.Mail

Public Sub New()

MyBase.New(HttpContext.Current.Server.MapPath(“”) )

مقدار پارامتر سازنده کلاس IrMail.Mail محل مکانی را نشان می دهد که می خواهید نامه های ارسال نشده در آنجا ذخیره شود. در این مثال محل دخیره سازی را برابر با دایرکتوری ریشه سایت قرار دادیم . شما می توانید جهت امنیت بیشتر، این محل را تغییر و به مکان دیگری منتقل کنید (بطور مثال دایرکتوری محل ذخیره DBها که معمولا fpdb می باشد).

Me.SMTPserver = “YourSMTPServer”
Me.PickUpDirectory = “c:\inetpub\mailroot\pickup”

خصیصه فوق (PickUpDirectory) مورد نیاز SMTP Server می باشد.

Me.UserName = “YourUsername”
Me.Password = “YourPassword”

موارد فوق از آن جهت نیاز است که بتوانید نامه های ارسالی خود را از طریق سرویس دهنده هایی که نیاز به Authentication دارند نیز ارسال نمائید. در صورتیکه سرویس دهنده شما نیازی به Authentication ندارد، نیازی به تعیین نام کاربری و کلمه رمز ندارید.

Me.UTF8AnyWhere = True

این خصیصه باعث می شود نامه شما در همه جا فارسی دیده شود. در صورتی که نامه شما انگلیسی است، می توانید این خصیصه را false قرار دهید. مقدار پیش فرض آن نیز false است.

Me.LoadSharedObject4WebApplication(HttpContext.Current)

استفاده از دستور فوق همیشه اجباری است و باید به همین صورت باشد. در صورتی که دستور فوق ذکر نشود، مکن است شئ شما با مشکل مواجه گردد.

End Sub
End Class

حال هرجا در سایت خود قصد داشتید که نامه ای را ارسال کنید، کافیست یک نمونه از کلاس فوق را ساخته و سایر خصوصیات آنرا تنظیم نمایید. به عنوان مثال:

Dim ObjMailer As New MySmtpMail ()
ObjMailer.From = “EveryOne@Server.Com”
ObjMailer.To= “EveryOne@AnotherServer.Com”
ObjMailer.Subject = “New Email Object”
ObjMailer.Body= “The body of your mail in each language”
ObjMailer.Send()

و بدین ترتیب نسبت به ارسال نامه خود اقدام کنید. نمونه برنامه کامل را می توانید از آدرس http://www27.brinkster.com/mahmoud690/irmail/sample.htm دریافت کنید.

توجه: متد IrMailMail.Send دارای یک پارامتر اختیاری است که به صورت پیش فرض true می باشد. اگر آنرا به false تنظیم کنید بدین معنی است که اگر smtp server فعال نبود، لازم نیست آنرا ذخیره کند (غیر فعال کردن ویژگی آخر). این مورد در مواردی کاربرد دارد که ارسال شدن یا نشدن نامه برای شما آنقدر اهمیت نداشته باشد.

نکته آخر: … مجانی به همراه کد! (Free And OpenSource)

این شئ برای همه به صورت مجانی قابل دریافت و استفاده است. در ضمن کدهای این کلاس به صورت مجانی نیز قابل دریافت است. این بدین معنی است که شما می توانید کدها را مشاهده کرده و آنها را مطابق میل خودتان دستکاری و استفاده نمایید (OpenSource). این شئ بر روی لیست اشیا مایکروسافت نیز ثبت شده است و امیدوار هستیم این شئ به عنوان اولین شئ ایرانی که در این لیست ثبت شده باعث گردد دوستان دیگر نیز نسبت به ثبت اشیا خود در آن اقدام کنند، چراکه این لیست به عنوان یک کاتالوگ معتبر اشیا NET. در نزد برنامه نویسان مطرح است و مسلما وجود اشیا مختلف از برنامه نویسان ایرانی و با نام ایران، اعتبار سایت و برنامه نویسان ایرانی را در نزد دیگران افزایش خواهد داد.

نهایت آنکه اهداف من از Opensource قرار دادن کلاس فوق به صورت زیر است:

- مسلما این شئ نه آنقدر کامل و بی عیب است و نه دانش من در این زمینه به اندازه کافی کامل و تخصصی است که بخواهم آنرا بصورت تجاری ارایه دهم. ضمن آنکه امکانات آنرا نیز ندارم.
- با opensource قرار دادن آن، امکان کمک و یاری گرفتن از سایر دوستان را نیز فراهم کرده ام. ضمن آنکه اینگونه برنامه ها امتحان خود را پس می دهند.
- و نهایت آنکه باز کردن کدهای NET. از روی فایل های Exe یا Dll آنها بسیار ساده است!

بطور خلاصه آنکه این شئ متعلق به خود شماست و از همینجا از تمامی دوستانی که در این زمینه فعالیت دارند درخواست دارم که با استفاده از این شئ و یافتن نقاط ضعف و کاستی ها و کمبودهای آن من را در جهت تکمیل آن یاری دهند. در مقابل هم تنها کاری که از دست من در برابر لطف این دوستان برمی آید این است که نام آنها را به عنوان یکی از برنامه نویسان و یا debuggerهای آن ذکر کنم.

آدرس سایت انگلیسی:
http://www27.brinkster.com/mahmoud690/irmail
آدرس مستقیم Download شئ کامپایل شده:
http://www27.brinkster.com/mahmoud690/irmail/downloadAssembly.htm.htm
آدرس مستقیم Download کدهای برنامه:
http://www27.brinkster.com/mahmoud690/irmail/Download-source.htm
آدرس این شئ در کنترل گالری سایت رسمی ASP.NET:
http://www.asp.net/ControlGallery/ControlDetail.aspx?Control=1918&tabindex=2

دیدگاه خوانندگان

  1. godofweb |

    سلام
    لینک های دانلود کار نمیکنند
    لطفا لینک هه رو تغییر دهید
    با تشکر

دیدگاه خود را بیان کنید.

باید وارد سایت شده باشید برای دیدگاه دادن