0

ارسال ايميل در ASP.NET با استفاده از HTML Template

 
papari
papari
کاربر برنزی
تاریخ عضویت : دی 1387 
تعداد پست ها : 314
محل سکونت : تهران

ارسال ايميل در ASP.NET با استفاده از HTML Template

آيا تاکنون سعي کرده ايد براي سايت خود خبرنامه ايجاد کنيد؟ آيا تاکنون وسوسه شده ايد که سيستمي طراحي کنيد که در صورتي که بينندگان سايت شما نظرات خود را در سايت شما وارد کنند، براي آنها يک ايميل تشکرآميز ارسال کنيد؟ آيا مي دانيد ساختن يک HTML Template زيبا براي خبرنامه شما و استفاده هميشگي از آن جهت ارسال خبرنامه در ASP.NET بسيار ساده صورت مي گيرد؟ چنانچه سئوالات بالا شما را به دانستن بيشتر ترغيب کرده است، به شما تبريک مي گويم! چرا که در ادامه اين مقاله شما روش بسيار ساده ارسال ايميلهاي HTML زيبا را بدون اينکه نگران چگونگي کدنويسي HTML متغير رشته اي Body در MailMessage باشيد را فرا خواهيد گرفت.

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

1- ساختن Template مورد نظر شما جهت ارسال Email:
براي اين کار کافي است که Template مورد نظر خود را به فرمت HTML طراحي کنيد. اين به خود شما بستگي دارد که کدهاي HTML را به صورت دستي بنويسيد و يا از اديتورهاي WYSIWYG مانند FrontPage يا Dreamweaver يا !GoLive استفاده کنيد. تنها تفاوتي که در اينجا وجود دارد اين است که شما بايستي قسمتهايي از متن نامه خود را که متغير هستند (مانند نام گيرنده ايميل، آدرس پست الکترونيکي وي و ...) را به گونه اي از بقيه قسمتها متمايز کنيد. براي مثال اگر شما مي خواهيد در ابتداي نامه، دريافت کننده نامه را با نام خود مورد خطاب قرار دهيد، عبارت را به صورت زير وارد کنيد: "سلام #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:
حال به آساني ايميل را ساخته و ارسال مي کنيم. بدين ترتيب: (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 خود را مشخص کنيد و ايميل را ارسال کنيد! به همين سادگي. بقيه موارد بسيار واضح هستند.

لطفاً به اين نکته توجه کنيد که برخي SMTP Serverهايي که نياز به Authentication دارند را نمي توان براي اين منظور (ارسال ايميل به آدرس هاي خارج از SMTP Server فوق) مورد استفاده قرار داد. در اين خصوص لطفاً به Administrator سرور خود رجوع کنيد.
 
منبع خبر: http://goldmoney.xm.com
و این جهان پر از صدای پای مردمی است که همچنانکه تو را می بوسند در ذهن خود طناب دارت را می بافند.
دوشنبه 17 فروردین 1388  5:52 PM
تشکرات از این پست
tuoraj
cooper
cooper
کاربر برنزی
تاریخ عضویت : شهریور 1388 
تعداد پست ها : 689
محل سکونت : سمنان

پاسخ به:ارسال ايميل در ASP.NET با استفاده از HTML Template

 دستت درد نکنه خیلی دنبالش بودم
Learn from yesterday, live for today,hope for tomorrow.The important thing is not to stop questioning.
Albert Einstei

 

دوشنبه 30 شهریور 1388  4:29 PM
تشکرات از این پست
دسترسی سریع به انجمن ها