PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ارسال ایمیل در ASP.NET با استفاده از HTML Template



TAHA
09-23-2009, 08:16 PM
آیا تاکنون سعی کرده اید برای سایت خود خبرنامه ایجاد کنید؟ آیا تاکنون وسوسه شده اید که سیستمی طراحی کنید که در صورتی که بینندگان سایت شما نظرات خود را در سایت شما وارد کنند برای آنها یک Email تشکرآمیز ارسال کنید؟ آیا می دانید ساختن یک HTML Template زیبا برای خبرنامه شما و استفاده همیشگی از آن جهت ارسال خبرنامه در ASP.NET بسیار ساده صورت می گیرد؟ چنانچه سوالات بالا شما را به دانستن بیشتر ترغیب کرده است به شما تبریک می گویم! چرا که در ادامه این مقاله شما روش بسیار ساده ارسال Emailهای HTML زیبا را بدون اینکه نگران چگونگی کدنویسی HTML متغیر رشته ای Body در MailMessage باشید را فرا خواهید گرفت.

برای شروع بیایید به روش کار نظری بیاندازیم: خوب احتمالا شما با روش ساختن یک نمونه از آبجکت MailMessage که در ASP.NET برای ارسال Email استفاده می شود آشنایی دارید (اگر این چنین نیست در ادامه مقاله به طور اجمالی توضیحاتی ارائه شده است) تنها قسمتی که باید مورد توجه قرار دهید این است که چگونه می توانیم Body نامه خود را به فرمت HTML و بدون نیاز به اینکه تمامی تگها را پشت سر هم در یک رشته طولانی و سردرگم کننده تایپ کنیم، درآوریم. یک ایده جالب این است که ما Template نامه خود را با استفاده از ادیتورهای WYSIWYG مثل FrontPage یا Dreamweaver طراحی کنیم و سپس تمامی کدهای HTML آن را درون یک متغیر رشته ای Import کرده و از آن استفاده کنیم. این کار بسیار آسان است. اما می توان این نامه را برای هر کاربر کمی سفارشی (Customize) کرد! برای مثال شما می توانید در ابتدای نامه کاربر را با نام وی مورد خطاب قرار دهید. بهتر است از این پس توضیحات را همراه با کدنویسی دنبال کنیم. (کلیه کدهای Server Side به زبان VB.NET نوشته شده است) سه گام اساسی برای این کار وجود دارد:

1- ساختن Template مورد نظر شما جهت ارسال Email:
برای این کار کافی است که Template مورد نظر خود را به فرمت HTML طراحی کنید. این به خود شما بستگی دارد که کدهای HTML را به صورت دستی بنویسید و یا از ادیتورهای WYSIWYG مانند FrontPage یا Dreamweaver یا !GoLive استفاده کنید. تنها تفاوتی که در اینجا وجود دارد این است که شما بایستی قسمتهایی از متن نامه خود را که متغیر هستند (مانند نام گیرنده Email، آدرس پست الکترونیکی وی و ...) را به گونه ای از بقیه قسمتها متمایز کنید. برای مثال اگر شما می خواهید در ابتدای نامه، دریافت کننده نامه را با نام خود مورد خطاب قرار دهید عبارت را به صورت زیر وارد کنید: "سلام "#NAME# لطفا توجه کنید که هیچ محدودیتی در تکنیک به کار رفته وجود ندارد و قرار دادن کاراکترهای ## فقط جهت متمایز ساختن این قسمت از محتوای استاتیک صفحه است و شما می توانید به صور دیگر آن را مشخص کنید مثلا ?NAME? یا هر چیز مشابه دیگر. این قسمت بعدا با نام شخص مورد نظر ما جایگزین می شود. نکته قابل ذکر دیگر اینکه چنانچه قصد دارید نامه خود را فارسی ارسال کنید تگ زیر را فراموش نکنید:


< meta http-equiv = " Content-Type " content = " text / html; charset = utf-8 " >


2- خواندن فایل Template جهت قراردادن در Body نامه شما:
پس از اینکه Template را آماده نمودید بایستی این فایل را بخوانید، قسمتهای مورد نظر (متمایز شده با ##) را با عبارات مورد نظر خود (که می توانید از Database استخراج کنید) جایگزین کنید و این متن را به صورت یک متغیر رشته ای در Body نامه خود قرار دهید (گام 3). این کار به وسیله کد زیر صورت می پذیرد: (قبل از هر چیز شما بایستی Namespace مورد نیاز که در اینجا System.IO می باشد را Import کنید)




Imports System.IO

Dim reader As StreamReader
Dim strFileName As String = Server.MapPath( " templatel.htm " )
Dim strFileT ext

reader = File.OpenText( strFileName )

While reader.Peek < > -1
strFileText + = reader.ReadLine( )
End While

reader.Close()
strFileText = Replace( strFileText, "#Username#", Name.Text)
strFileText = Replace(strFileText, "#MsgID#", Request("MsgID" ))
strFileText = Replace(strFileText, "#AuthorID#", Request("AuthorID" ))


حال بیایید نگاهی به کد فوق بیاندازیم: در سطر اول شما یک شی از نوع StreamReader که جهت خواندن فایلهای متنی به کار می رود را می سازید و در سطر بعدی مسیر فیزیکی فایل Template خود را در متغیر رشته‌ای strFileName ذخیره می کنید.

نکته: در صورتیکه بخواهید در فایل کلاس خود از کد فوق استفاده کنید بایستی مسیر فیزیکی فایل را با استفاده از System.Web.HttpContext.Current.Server.MapPath("template.htm") به دست آورید. اما در Code Behind یک WebForm همان Server.MapPath() کافی است.

سپس در سطر بعدی ما با استفاده از متد OpenText فایل مورد نظر را باز کرده و متن آن را در Reader قرار می دهیم. حال در یک حلقه While...End While سطر به سطر فایل Template را (که در اینجا کدهای HTML ما هستند) می خوانیم و در متغیر strFileText ذخیره می کنیم. Reader.Peek <> -1 بررسی می کند که آیا به انتهای فایل رسیده ایم یا خیر. پس از اینکه کل فایل را خوانده و در متغیر ذخیره کردیم. شی reader را می بندیم.

در اینجا شما باید Template نامه خود را برای کاربر خاص Customize کنید. یعنی عبارات محصور شده با ## را با اطلاعات کاربر (که از بانک اطلاعاتی استخراج می شود و یا از یک Query String دریافت می شود) جایگزین کنید. در مثال بالا مقدار اول در Template با مقدار یک Textbox و دو مورد بعدی با Query String های انتهای یک URL جایگزین می شود.

حاصل کار یک متغیر رشته ای به نام strFileText است که حاوی کد HTML مورد نیاز شما برای ارسال یک HTML Email می باشد. که مثلا عبارت ابتدای آن به صورت زیر در آمده است: "سلام مهدی"

3- استفاده از قالب Import شده فوق و ارسال Email:
حال به آسانی Email را ساخته و ارسال می کنیم. بدین ترتیب: (Imports System.Web.Mail را فراموش نکنید!)





'Creating and sending mail to user
Dim objMail As New MailMessage()
objMail.From = "You@YourDomain.com"
objMail.To = Email.Text.Trim
objMail.Subject = "YOUR SUBJECT GOES HERE..."
objMail.BodyFormat = MailFormat.Html
objMail.BodyEncoding = System.Text.Encoding.UTF8
objMail.Body = strFileText
SmtpMail.SmtpServer = "smtp.YOURSERVER.com"
SmtpMail.Send(objMail)


این قسمت نیاز به توضیخ چندانی ندارد. جز اینکه objMail.To را بایستی به صورت داینامیک (از DB و ...) تغییر دهید (در اینجا مقدار از یک Textbox دریافت شده است)، SMTP Server خود را مشخص کنید و Email را ارسال کنید! به همین سادگی. بقیه موارد بسیار واضح هستند.

لطفا به این نکته توجه کنید که برخی SMTP Serverهایی که نیاز به Authentication دارند را نمی توان برای این منظور (ارسال Email به آدرس های خارج از SMTP Server فوق) مورد استفاده قرار داد. در این خصوص لطفا به Administrator سرور خود رجوع کنید.