آموزش ارسال ایمیل (یاهو و جیمیل) با سی شارپ

یکشنبه 14 دی 1393

آموزش ارسال ایمیل (یاهو و جیمیل) با سی شارپ

سلام .
چند باری ازم سوال شد که نحوه ارسال ایمیل در ASP.net و سی شارپ به چه صورتیه .من هم چندتا رفرنس دادم منتها دیدم بچه ها موفق نبودن و نتونستن با موفقیت کدی بنویسن یا پیدا کنن که براحتی ایمیلی رو ارسال کنه .
این شد که تصمیم گرفتم کد مربوط به ارسال ایمیل رو هم در سی شارپ و هم در ASP.netبنویسم .
خب کد مربوطه برای ارسال ایمیل بصورت زیر هست :

privatevoidbutton1_Click(objectsender, EventArgs e)
{
MailMessage message = newMailMessage();
SmtpClient smtpClient = newSmtpClient();
try
{
MailAddress fromAddress = newMailAddress(txtFromEmail.Text);
message.From = fromAddress;
message.To.Add(txtToEmail.Text);

message.Subject = txtSubject.Text;
message.IsBodyHtml = true;
message.Body = txtMessage.Text;



smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.EnableSsl = true; )
smtpClient.UseDefaultCredentials = true;
smtpClient.Credentials = newSystem.Net.NetworkCredential(txtFromEmail.Text, txtEmailPass.Text);

smtpClient.Send(message);
MessageBox.Show("ارسال شد.");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}


خب حالا ببینیم اینها به چه معناست .
ما بطور کلی برای ارسال ایمیل به دوتا کلاس بیشتر نیاز نداریم کلاس MailMessage و SmtpClient
شما پیام و عنوان و سایر ویژگی های مربوط به پیامتون رو در قالب یک MailMessage پیاده میکنید و بعد از طریق SmtpClient اون رو ارسال میکنید .


نکته مهم : کلاس MailMessage رو در دوتا namespace وجود داره . شما حتما از System.Net.Mail; استفاده کنید . چون نیم اسپیس Web.Mail اصطلاحا Deprecated یا از دور خارج شده است.

 


پس حتما دقت کنید System.Net.Mail; رو using کرده باشید .

مشکلی که بیشتر افراد دارن بحث سرور ایمیل هست . که بعنوان یک بخش اصلی حتما باید در کد قید بشه.
اکثر ما چون در روی سیستممون سرور ایمیل نداریم با بیشتر کدهایی که بعنوان مثال در اینترنت اومده برای ارسال ایمیل در سی شارپ و ASP.net به مشکل بر میخوریم .
برای حل این مشکل هم ما دو راه داریم

سرور ایمیلی رو روی سیستممون نصب کنیم و براحتی موقعی که از ما اطلاعات این سرور رو میخواد اون اطلاعات رو بهش میدیم و تمام . (معمولا اسم سرور localhost و پورت 25 ( پورت پیشفرض SMTP) قرار میدیم-مگه اینکه موقع نصب اسم سرور و شماره متفاوتی رو تنظیم کرده باشیم)

از یه سرور رایگان مثل سرور ارسال ایمیل گوگل یا یاهو استفاده کنیم .


خب ما برای ارسال ایمیل از بخش دوم استفاده میکنیم که نیازی به نصب چیزی نداره .
برای بدست اوردن سرور گوگل یا یاهو ( فرقی نمیکنه) یه سرچ ساده همه اطلاعاتی رو که میخوایم رو بما میده . مثلا :


اطلاعات سرور ایمیل گوگل:

نام سرور ایمیل : smtp.gmail.com
پورت : 456, 587
ssl : فعال

-------------------------------------------------------------------------------------------------------


اطلاعات سرور یاهو :
نام سرور ایمیل : smtp.mail.yahoo.com
پورت : 456, 587
ssl : فعال


خب براحتی مقادیر مورد نظرمون رو مقدار دهی میکنیم که بصورت زیر میشه :
 

SmtpClient smtpClient = newSmtpClient();
smtpClient.Host = "smtp.gmail.com";
smtpClient.Port = 587;
smtpClient.EnableSsl = true;


اگه ما سرور ایمیل رو سیستم خودمون فعال بود که راحت میتونستیم بنویسیم : (اگه وب سایت داریم و سایتمون رو آپلود کردیم تو 99 درصد اوقات تنظیم زیر درست هست اگر ارور داد به مدیر سرورتون اطلاع بدید و بگید اطلاعات میل سرور چی هست و اون اطلاعات رو در زیر وارد کنید )
 

SmtpClient smtpClient = newSmtpClient("localhost",25);

 587 استفاده کنید.
نکته بعدی اینه که یاهو ارتباط امن رو پشتیبانی نمیکنه در این حالت پس EnableSsl باید برابر false باشه.

خب حالا ما برای اینکه بتونیم از این ایمیل سرور ها استفاده کنیم لازمه یه ایمیل داشته باشیم . اگه از گوگل بخواییم استفاده کنیم گوگل از ما جی میل میخواد و اگه از یاهو بخواییم استفاده کنیم سرورش از ما اطلاعات یه ایمیل یاهو رو میخواد . برای همین ما از بخش زیر برای ارسال این اطلاعات به سرور ایمیل مورد نظرمون استفاده میکنیم

smtpClient.UseDefaultCredentials = true;
smtpClient.Credentials = newSystem.Net.NetworkCredential(txtFromEmail.Text, txtEmailPass.Text);

بعد از انجام این کار هم تنها کاری که میمونه ارسال ایمیله که با دستور زیر انجامش میدیم .

smtpClient.Send(message);


برای انتهای کار هم یه توضیح هم در مورد IsBodyHtml بدم که تو بخش MailMessage استفاده اش کردیم .
اگر میخوایید پیامی که ارسال میکنید بصورت HTML باشه - یعنی از تگهای HTML توش استفاده شده باشه این بخش رو TRUE میکنید . امروزه تقریبا همه میل سرورها این قابلیت رو دارن و میتونید براحتی این مقدار رو برابر TRUE قرار بدید و ازش استفاده کنید.

پروژه ای که ضمیمه کردم هم باهاش میتونید از طریق جی میل ایمیل ارسال کنید و هم از طریق یاهو . تغییرات مورد نظر برای کار کردن با این دو ایمیل سرور هم توی کد مشخص شده و براحتی میتونید ازش در پروژهاتون استفاده کنید.

آریا

نویسنده 3 مقاله در برنامه نویسان
  • C#.net
  • 10k بازدید
  • 33 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید