چند وقت پیش درخواستی مبنی بر طراحی یک برنامهی کوچک، برای مدیریت و بایگانی بلیطهای اخذ شده توسط پرسنل شرکت، از آژانسهای مسافرتی اعلام شد. از بخشهای مختلف مورد نیاز برای ساخت این برنامه، بخش ارسال ایمیل را برای نوشتن یک پست آموزشی انتخاب کردم.
در ابتدا لازم است کمی در مورد بعضی از مفاهیم مورد استفادهی در این مطلب توضیح داده شود.
SMTP چیست ؟
SMTP خلاصه شده (Simple mail transfer protocol ) میباشد. Smtp بخشی از لایهی برنامه در پروتکل TCP میباشد. بطور کلی smtp استانداردی برای ارسال نامههای الکترونیکی در اینترنت است. پورت پیش فرض برای ارسال اطلاعات توسط Smtp پورت شمارهی 25 است و در حالت ارسال امن و رمز شده اطلاعات (SSL) پورت شماره 465 میباشد.
یادآوری : برنامههای کامپیوتری برای انتقال بستههای اطلاعات از یک شماره در هدر بستهها استفاده میکنند که آن را شماره پورت میگوییم. لیستی از شماره پورتها به همراه کاربرد آنها را در اینجا میتوانید مشاهده کنید. SMTP مجموعهای از قراردادها برای ساده شدن ارسال و دریافت اطلاعات با Mail Server را فراهم میکند. بطور مثال نام میل سرورها عمدتا به دو شکل smtp.domainname.com و یا mail.domainname.com نوشته میشوند. معمولا smtp برای تنظیمات سرور ایمیل از دو پروتکل pop3 و imap استفاده میکند. این پروتکلها امکانی فراهم میکنند تا نامهها در سرور ذخیره و در فواصلی معین توسط کاربر از سرور به دستگاههای هوشمند از قبیل تلفنهای همراه یا کامپیوترهای شخصی منتقل شوند.
در سی شارپ 2 فضای نام System.Net.Sockets و System.Net برای مدیریت پیاده سازی پروتکلهای اینترنتی مهیا شده است تا برنامهها بتوانند از طریق آنها اطلاعات را رد و بدل کنند. پروتکل smtp برای ارسال ایمیل در سی شارپ استفاده میشود. برای ارسال ایمیل از کلاس Mail در فضای نام System.Net استفاده میشود.
تذکر : عموما در بخشی از پنل مدیریت هاستها چگونگی تنظیمات mail server به روشهای pop3 ،Imap و حالت رمز شده و امن آنها SSL بیان شده است.
نمونه ای از ارسال ایمیل در سی شارپ از طریق Mail Server در یک هاست اشتراکی
MailMessage mail = new MailMessage();
//پارامتر این شی همان حالت معرفی شده در تنظیمات ایمیل سرور میباشد که پیشتر معرفی شد.
SmtpClient smtpServer = new SmtpClient("mail.domainName.com");
mail.Subject = "خرید بلیط";
mail.From = new MailAddress("info@domainName.com");
//ایمیل گیرنده نامه
mail.To.Add("amir2012@gmail.com");
//متن نامه
mail.Body = "خرید بلیط کیش به تهران";
//شماره پورت در اینجا حالت ارسال معمولی و غیر رمز شده مد نظر بوده است
smtpServer.Port = 25;
//email address ,email password
smtpServer.Credentials = new NetworkCredential("info@domainName.com", "password");
smtpServer.EnableSsl = false;
smtpServer.Send(mail);
همانطور که میبیند برای پیکربندی ساختار برنامه و ارسال یک نامهی الکترونیکی اشیائی از کلاس SmtpClient و MailMessage ایجاد شده است. شیء mail تنظیمات پیکربندی نامه را انجام میدهد و شی smtpServer تنظیمات ایمیل سرور را در خود نگهداری میکند.
نکته: در کد بالا بخش mail.To.Add : گیرندهی نامه میتوانند 1 یا چند نفر باشد. از این رو خصوصیت To بهصورت یک مجموعه تعریف شده است.
در این مثال تنظیمات شیء smtp با توجه به هاست شرکت مورد نظر تنظیم شده است.