# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > ASP.NET Web Forms >  مقاله::مرجع کامل ارسال ایمیل در دات نت 2

## babi_wd

با سلام
مقاله ای که ارائه داده شده است حاصل ساعتها جستجو،مطالعه و ترجمه میباشد
و با توجه به نبود یک منبع کامل چه به صورت فارسی و چه به صورت انگلیسی در مورد ارسال ایمیل در دات نت 2 و استفاده برنامه نویسان از تکنیک های دات نت 1،امیدوارم این مجموعه حسن ختامی بر تمام سردرگمی های ارسال ایمیل در دات نت 2 باشد
امیدوارم این مقاله به عنوان مرجعی کامل،مشکل گشای برنامه نویسان فارسی زبان باشد
 توجه:کلیه حقوق این مقاله متعلق به سایت DotNetSource.Com میباشد.استفاده از مطالب این مقاله با ذکر نام منبع و نویسنده بلامانع است
_____________________________________
کلمات کلیدی:

ارسال ایمیل،دات نت 2،Email،Sending Email،.Net 2
_____________________________________
بخش اول

مقدمه:

*فضای نام System.Net.Mail*

System.Net.Mail یک فضای نام که برای ارسال ایمیل در دات نت 2 استفاده میشود.بر خلاف system.web.mail که در دات نت 1 معرفی شده، System.Net.Mail بر پایه کتابخانه های CDO/CDOSYS ساخته نشده است.در عوض زمینه ساخت آن بر اساس عدم استفاده از Com Introp بوده،یعنی بر اساس هیچ نوع کتابخانه ی Com ساخته نشده است

System.Net.Mail یک کلاس کاملا جدید برای ساخت و ارسال ایمیل معرفی کرده است
گرچه بعضی از ویژگیهای system.web.mail حذف شده، اما فضای نام System.Net.Mail بسیار فراگیر تر و تطبیق پذیر تر از system.web.mail است که وابسته به کتابخانه CDO میباشد


*برای ارسال ایمیل در دات نت به چه چیزی نیازمندیم؟*

قبل از هر چیزی لازم است که دات نت فریم ورک را نصب کنید
سپس system.dll را به عنوان مرجع (reference) به صفحه معرفی کنید(به صورت اتوماتیک به صفحات اضافه میشود).
برای ایجاد و ارسال ایمیل از فضای نام System.Net.Mail استفاده میشود
در این مرحله شما با برنامه نویسی ،به پیکربندی برنامه خود میپردازید
شما نیازمند یک سرور واسط برای ارسال ایمیل هستید
یک سرور واسط (Relay Server) که یک سرور ایمیل(Email Server) یا یک SMTP سرور /سرویس است که ارسال ایمیل را مدیریت میکند.(Handle)
System.Net.Mail بسادگی ایمیل را برای سرور ارسال میکند و سرور ایمیل مسئول رساندن ایمیل به مقصد نهایی میباشد

*سرور واسط*

یک واسط یک سرویس است،که به شما اجازه میدهد ایمیل ارسال کنید
واسط به طور معمول یک سرور ایمیل (Mail Server)کامل است یا برای سرویس SMTP پیکربندی شده است
بطور مثال:

*ایمیل سرور ها(Mail Server):*

Microsoft Exchange
IMail by IPSwitch
Mail Enable by Mail Enable
*سرویس های SMTP:*

سرویس SMTP که بر روی IIS نصب میشود
(System.Net.Mail) SNM ایمیل را برای سرور واسط ارسال میکند و سرور ایمیل مسئول رساندن ایمیل به مقصد نهایی میباشد
زمانی که ایمیل برای سرور واسط ارسال میگردد،شما باید اجازه دسترسی به آن سرور را داشته باشید.دلیل این امر مسئله SPAM ها میباشد
دسترسی به سرورهای واسط به طور طبیعی یا از طریق IP Address یا username/password امکان پذیر میباشد

*سرویس SMTP در IIS*

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


MX Record (Mail server location) lookups
SMTP connections to remote mail servers
Retries
Failures

اطلاعات بیشتر را میتوانید از سایت مایکروسافت بخواهید
http://www.microsoft.com/mind/1299/s...0/smtp2000.asp

آیا با استفاده از System.Net.Mail میتوانیم ایمیل هایمان را بخوانیم؟

جواب نه میباشد.با استفاده از SNM فقط میتوانید ایمیل ارسال کنید
برای خواندن ایمیل میتوانید از Mime parsing component یا POP3 component استفاده کنید


نگاهی به کلاس های فضای نام System.Net.Mail:

MailMessage Class
MailAddress Class
Attachment Class
SmtpClient Class
AlternateView Class
Linked Resource

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

*کلاس MailMessage:*

کلاس MailMessage ساخت و مدیریت پیغام ایمیل را تامین میکند
سایر کلاسها به نوعی با این کلاس در ارتباط هستند
برخی از ویژگی های(Properties) کلاس MailMessage به شرح زیر میباشند


توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/lib...ilmessage.aspx


مثالی از نحوه استفاده از این کلاس:


[C#‎]

        MailMessage mail = new MailMessage();
        mail.From = new MailAddress("me@mycompany.com");
        mail.To.Add("you@yourcompany.com");
        mail.Subject = "This is an email";
        mail.Body = "this is the body content of the email.";

[VB]

        Dim mail As New MailMessage()
        mail.From = New MailAddress("me@mycompany.com")
        mail.To.Add("you@yourcompany.com")
        mail.Subject = "This is an email"
        mail.Body = "this is the body content of the email."این نکته در کد بالا قابل توجه است که:
به این نوع ایمیل که بدنه(Body) آن شامل متن ساده است در اصطلاح Plain Text گفته میشود
اما بدنه (Body) میتواند شامل تگ های HTML نیز باشد
جهت استفاده از این امکان باید خاصیت IsBodyHtml را برابر True کنیم
به مثال زیر توجه کنید:

[C#‎]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is a sample body with html in it. <b>This is
bold</b> <font color=#336699>This is blue</font>";
mail.IsBodyHtml = true;

SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

[VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is a sample body with html in it. <b>This is
bold</b> <font color=#336699>This is blue</font>"
mail.IsBodyHtml = True

Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)پایان بخش اول

----------


## habedijoo

بنظر شما ، این که با این روش میشه به راحتی با آدرس  ایمیل دیگران اقدام به ارسال ایمیل نمود، یک ضعف فاحش نیست.

----------


## peymannaji

سلام دوست عزیز با سپاس از زحمت جنابعالی بخاطر تهیه مقاله ارزشمندتون ...

----------


## azmoodeh

> بنظر شما ، این که با این روش میشه به راحتی با آدرس  ایمیل دیگران اقدام به ارسال ایمیل نمود، یک ضعف فاحش نیست.


سلام
این ضعفی هست که توی پروتکل SMTP موجود هست . از طرفی تحقیقات پلیس فدرال آمریکا نشون داده که 85% هرزنامه ها از این طریق ارسال میشن و به همین دلیل موارد رو به IEEE گزارش داده و قراره توی تعاریف جدیدشون برطرف بشه.البته ناگفته نمونه که اکثر ایمیل های جعلی به اینصورت Bulk میشن.
 ممنون از دوست خوبمون برای مقاله اش :تشویق:  
موفق باشید

----------


## babi_wd

بخش دوم
*کلاس MailAddress:*

از این کلاس برای ساختن آدرس ایمیل استفاده میشود
از این کلاس میتوان در ویژگی های(Properties) :

MailMessage.From
MailMessage.To
MailMessage.CC
MailMessage.BCC

استفاده کرد
از بین این ویژگی ها ،ویژگی .From یک ایمیل حقیقی است(یعنی یک ایمیل را به عنوان فرستنده میتوان معرفی کرد)
اما سایر ویژگی ها، کلکسیونی از ایمیل ها را دریافت میکنند
برخی از ویژگی های(Properties) کلاس MailAddress به شرح زیر میباشند


توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/lib...iladdress.aspx

مثالی از نحوه استفاده از این کلاس:

[C#‎]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com", "Steve James");

mail.To.Add("you@yourcompany.com");
mail.To.Add("you2@yourcompany.com");

mail.CC.Add("cc1@yourcompany.com");
mail.CC.Add("cc2@yourcompany.com");

mail.Bcc.Add("blindcc1@yourcompany.com");
mail.Bcc.Add("blindcc2@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";

[VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com", "Steve James")

mail.To.Add("you@yourcompany.com")
mail.To.Add("you2@yourcompany.com")

mail.CC.Add("cc1@yourcompany.com")
mail.CC.Add("cc2@yourcompany.com")

mail.Bcc.Add("blindcc1@yourcompany.com")
mail.Bcc.Add("blindcc2@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."


این نکات در کد بالا قابل توجه است که:

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


mail.From = new MailAddress("me@mycompany.com", "Steve James")

2. اگر بخواهیم نام فرستنده به صورت فارسی یا هر زبان دیگر نمایش داده شود به صورت زیر عمل میکنیم


mail.From = new MailAddress("me@mycompany.com", "فارسی",System.Text.Encoding.GetEncoding("win  dows-1256"))

3. از روش ذکر شده بالا میتوانید برای ویژگیهای To,Bcc,CC نیز استفاده کنید

4. چون ویژگیهای To,Bcc,CC میتوانند کلکسیونی از ایمیل ها را دریافت کنند میتوانید با فراخوانی مکرر تابع ADD ایمیل های فراوانی را به آنها اضافه کنید


*آیا میدانید تفاوت Toو BCC و CC در چیست؟*

To به معنای گیرنده اصلی ایمیل میباشد
CC مخفف Carbon Copy میباشد و زمانی از آن استفاده میشود که بخواهیم یک کپی از ایمیل را برای شخص دیگری بفرستیم
Bcc مخفف Blind Carbon Copy میباشد.و زمانی از آن استفاده میشود که بخواهیم یک کپی از ایمیل را برای شخصی بفرستیم،به صورتی که CC و To متوجه ارسال ایمیل برای شخص سوم نشوند
اما BCC متوجه ارسال ایمیل به To و BCC خواهد شد

*کلاس Attachment:*

از این کلاس جهت ساخت و مدیریت ضمائم متعلق به یک شی MailMessage استفاده میشود
ضمیمه میتواند آدرس یک فایل یا یک Stream باشد.این قابلیت باعث میشود ما بتوانیم هر نوع داده ای را به ایمیل خود ضمیمه کنیم
توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/lib...ttachment.aspx

مثالی از نحوه استفاده از این کلاس:

[C#‎]

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");
mail.Subject = "This is an email";
mail.Body = "this content is in the body";
mail.Attachments.Add(new Attachment("c:\\temp\\example.txt"));
mail.Attachments.Add(new Attachment("c:\\temp\\example2.txt"));
mail.Attachments.Add(new Attachment("c:\\temp\\example3.txt"));

[VB]

Dim mail As New MailMessage()
mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")
mail.Subject = "This is an email"
mail.Body = "this content is in the body"
mail.Attachments.Add(New Attachment("c:\temp\example.txt"))
mail.Attachments.Add(New Attachment("c:\temp\example2.txt"))
mail.Attachments.Add(New Attachment("c:\temp\example3.txt"))


مثالی از نحوه استفاده از این کلاس در استفاده از Stream:

[C#‎]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this content is in the body";

string s = "this is some text";
byte[] data = System.Text.Encoding.ASCII.GetBytes(s);


System.IO.MemoryStream ms = new System.IO.MemoryStream(data);

mail.Attachments.Add(new Attachment(ms, "example.txt","text/plain"));

SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

[VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this content is in the body"

Dim s As String = "this is some text"
Dim data As Byte() = Encoding.ASCII.GetBytes(s)

Dim ms As New IO.MemoryStream(data)

mail.Attachments.Add(New Attachment(ms, "example.txt", "text/plain"))

Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)
پایان بخش دوم

----------


## babi_wd

بخش سوم
*کلاس SmtpClient:*

کلاس SmtpClient مسئولیت ارسال یا نقل و انتقال ایمیل را بر عهده دارد
کلاس SmtpClient توانایی حمل محتویات ایمیل بر روی شبکه دارد،یا میتواند ایمیل را به صورت یک فایل سیستم در سرویس SMTP IIS در داخل پوشه
Pickup Directory به شبیه به فرمت ذکر شده در RFC822 ذخیره کند
(جهت مشاهد RFC میتوانی به سایت rfc-editor.org مراجعه کنید)
کلاس SmtpClient میتواند ایمیل را هم به صورت هم زمان(Synchronously) و هم به صورت غیر هم زمان(Asynchronously) ارسال کند
کلاس SmtpClient ارسال ایمیل به صورت SSL را هم جهت اهداف امنیتی پشتیبانی میکند


برخی از ویژگی های(Properties) کلاس SmtpClient به شرح زیر میباشند


توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/lib...mtpclient.aspx
مثالی از نحوه استفاده از این کلاس:


[C#‎]

using System.Net;

MailMessage mail = new MailMessage();
mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");
mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";
SmtpClient smtp = new SmtpClient("127.0.0.1");

smtp.Credentials = new NetworkCredential("username", "secret");

smtp.Send(mail);

[VB]

Dim mail As New MailMessage()
mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")
mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."
Dim smtp As New SmtpClient("127.0.0.1")

smtp.Credentials = New Net.NetworkCredential ("username", "secret")

smtp.Send(mail)

*این نکات در کد بالا قابل توجه است که:*

1. زمانی که شما جهت استفاده از سرور واسط (ایمیل سرور) مجبور به تعیین هویت هستید و با ارائه نام کاربری و کلمه عبور امکان استفاده از سرویس سرور واسط محیا خواهد شد،ناچار به ارسال نام کاربری و کلمه عبور برای سرور واسط هستید.این امر با استفاده از دستود زیر امکان پذیر خواهد شد



smtp.Credentials = new NetworkCredential("username", "secret")


NetworkCredential در فضای نام System.Net قرار دارد و جهت استفاده از آن باید با این فضای نام به عنوان یکی از مراجع انتخاب شود

2. حال سوالی که در اینجا در ذهن شما ایجاد میشود این است که این نام کاربری و کلمه عبور را از کجا بدست آوریم؟

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

توجه:امکان ارسال ایمیل به صورت ناشناس و با ایمیل جعلی توسط سرور Yahoo و دیگر سرور های مجانی و جود دارد که خارج از بحث ما میباشد

و با ارائه نام کاربری (ایمیل) و کلمه عبور امکان بهره برداری از سرویس های این ایمیل سرور مقدور خواهد شد

پس ما برای ارائه کلمه عبور به ایمیل سرور باید دارای یک ایمیل از آن ایمیل سرور باشیم
ایجاد ایمیل بر روی هاست، از طریق ورود به قسمت کنترل (Control Panel) سایت و ورود به قسمت مدیریت ایمیل ها امکان پذیر است

توجه: به هیچ عنوان از ایمیلی که اطلاعات داخل آن برای سایت حائز اهمیت میباشد جهت ارسال ایمیل استفاده نکنید
ایمیل هایی همچون Info و Support و...

توجه:هنگام استفاده از دستور زیر باید به جای username ، ایمیل را به صورت کامل و به جای Mypassword ، کلمه عبور ایمیل را وارد کنید.


smtp.Credentials = new NetworkCredential("Send@Yoursite.com","Mypassword"  )


3. نکته ای دیگر این که نام یا Ip Address سرور واسط (ایمیل سرور) سرویس دهنده خود را از کجا به دست بیاوریم؟

در جواب این سوال باید گفت،عموما سرویس دهنده های هاست در ایمیل ارسالی برای شما که در آن اطلاعات هاست شما قرار دارد اطلاعات این سرور را ارسال میکنند اما تماس با واحد پشتیبانی سرویس دهنده هاست بهترین گزینه است

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

با داشتن یک فایروال مناسب و آنتی ویروس بروز وارد سایت زیر شود


http://www.mob.net/~ted/tools/mx.php3


و در محل مشخص شده نام هاست خود را به طور کامل تایپ کنید
اندکی تامل کنید تا پاسخ شما که نام سرور ایمیل هاست شما میباشد برای شما لیست گردد
با دستور Telnet به صورت زیر میتوانید به ایمیل سرور خود متصل شوید
در منوی Start گزینه Run را انتخاب کنید
و در Run دستور CMD را تایپ کنید تا پنجره Command Prompt بازشود
سپس دستور زیر را وارد کنید


telnet mail.YourSite.Com 25


بعد از دستور Telnet آدرسی را که به عنوان ایمیل سرور از طریق مرحله قبل به دست آوردیم را وارد میکنیم

عدد 25 به مفهوم پورتی است که میخواهیم از طریق آن به سرور ایمیل متصل شویم
توجه کنید که بین هر قسمت فاصله (Space) وجود دارد
پس از این دستور با پیغامی شبیه پیغام زیر مواجه میشوید


متوجه خواهید شد که در اکثرموارد بعد از عدد 220 نام ایمیل سرور دیگری نمایش داده میشود.بهتر است از این ایمیل سرور معرفی شده در این قسمت استفاده کنید
پس از توضیحات متوجه میشوید که جهت ارسال ایمیل باید خط زیر را به این صورت تنظیم کنید(با توجه به مثال بالا و به دست آوردن ایمیل سرور از نام بدست آمده استفاده میکنیم)
  

SmtpClient smtp = new SmtpClient("mailserver1.parsdata.com");
                           یــا
Dim smtp As New SmtpClient("mailserver1.parsdata.com")

4. نکته ای دیگر این که از کجا بفهمیم که برای استفاده از امکانات یک سرور واسط،حتما باید به آن نام کاربری و کلمه عبور بدهیم؟

برای فهمیدن این موضوع به صورت زیر عمل میکنیم
بعد از استفاده از دستور telnet به همان شکل توضیح داده شده،در اولین خط دستور ،این دستور را وارد کنید.

Auth login



اگر بعد از دستور فوق جوابی شبیه پیغام زیر را بگیرید که با عدد 334 شروع میشود ،قطعا جهت استفاده از ایمیل سرور باید نام کاربری و کلمه عبور داشته باشیم


پایان بخش سوم

----------


## babi_wd

من برای این مقاله خیلی زحمت کشیدم
از استقبال کم دوستان که نه نظر دادن نه تشکر کردن دل سرد شدم
شاید به درد کسی نمیخوره؟!!
یا به خاطر ...

----------


## javad3151

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

----------


## habedijoo

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

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

----------


## babi_wd

بخش چهارم

*کلاس Alternate View:
*
زمانی از این کلاس استفاده میکنیم که بخواهیم یک کپی از ایمیل را به فرمت دیگری تهیه کنیم.کاربرد این کپی در زمانی مشخص میشود که وقتی شخص از یک برنامه یا به طور کلی یک Reader برای دیدن ایمیل خود استفاده میکند،که این برنامه یا Reader قابلیت تفسیر تگ های HTML متن ایمیل را ندارد.پس نسخه دیگر از متن ایمیل که متن ساده است نمایش داده خواهد شد
زمانی که از این روش استفاده میکنید به اصلاح گفته میشود که شما یک Multi-Part MIME (Multipurpose Internet Mail Extensions) message ساخته اید
اصل پیشگیری از خطا و مدیریت استثنا ها حکم میکند که در ارسال ایمیل هایمان از این روش استفاده کنیم تا اطمینان حاصل کنیم که متن ایمیل در هر حالتی قابل خواندن است

برخی از ویژگی های(Properties) کلاس Alternate View به شرح زیر میباشند


توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/lib...rnateview.aspx

مثالی از نحوه استفاده از این کلاس:


[C#‎]

MailMessage mail = new MailMessage();
mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");
mail.Subject = "This is an email";

AlternateView plainView =
AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", null, "text/plain");

AlternateView htmlView =
AlternateView.CreateAlternateViewFromString("<b>th  is is bold text, and viewable by those mail clients that support html</b>", null, "text/html");

mail.AlternateViews.Add(plainView);
mail.AlternateViews.Add(htmlView);

SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);


[VB]

Dim mail As New MailMessage()
mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")
mail.Subject = "This is an email"

Dim plainView As AlternateView =
AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", Nothing, "text/plain")

Dim htmlView As AlternateView =
AlternateView.CreateAlternateViewFromString("<b>th  is is bold text, and viewable by those mail clients that support html</b>", Nothing, "text/html")

mail.AlternateViews.Add(plainView)
mail.AlternateViews.Add(htmlView)

Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)


این نکته در کد بالا قابل توجه است که:

در کد زیر


AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", null, "text/plain");


به جای "text/plain" میتوانید از قطعه کد زیر ا ستفاده کنید

System.Net.Mime.MediaTypeNames.Text.Plain

سایر مقادیری که میتوانید برای این قسمت در نظر بگیرید به شرح ذیل میباشند که به ضرورت از آنها استفاده خواهد شد


System.Net.Mime.MediaTypeNames.Text.Html
System.Net.Mime.MediaTypeNames.Text.RichText
System.Net.Mime.MediaTypeNames.Text.Xml

*کلاس Linked Resource:*

آخرین کلاس،کلاس Linked Resource میباشد.از این کلاس جهت گنجاندن عکس در ایمیل استفاده میشود
برای گنجاندن عکس در ایمیل شما باید یک Alternate view با فرمت HTML بسازید و در این Alternate view از یک تگ <image> استفاده کنید که به یک
ContentId )CID) از Linked Resource اشاره میکند
ContentId )CID) میتواند نام یک فایل تصویری در آدرسی مشخص باشد

توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/lib...dresource.aspx
مثالی از نحوه استفاده از این کلاس:


[C#‎]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";

AlternateView plainView =
AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", null, "text/plain");

AlternateView htmlView =
   AlternateView.CreateAlternateViewFromString("Here is an embedded image.<img src=cid:companylogo>", null,"text/html");

LinkedResource logo = new LinkedResource( "c:\\temp\\logo.gif" );
logo.ContentId = "companylogo";
htmlView.LinkedResources.Add(logo);

mail.AlternateViews.Add(plainView);
mail.AlternateViews.Add(htmlView);


SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

[VB]

Dim mail As New MailMessage()
mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")
mail.Subject = "This is an email"

Dim plainView As AlternateView =
AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", Nothing, "text/plain")

Dim htmlView As AlternateView =
AlternateView.CreateAlternateViewFromString("Here is an embedded image.<img src=cid:companylogo>", Nothing,"text/html")

Dim logo As New LinkedResource("c:\temp\logo.gif")
logo.ContentId = "companylogo"

htmlView.LinkedResources.Add(logo)

mail.AlternateViews.Add(plainView)
mail.AlternateViews.Add(htmlView)


Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)

پایان بخش چهارم

----------


## fereshte22

سلامخسته نباشید.دستون درد نکندمن میخواستم بدونم چگونه میشود این نمونه کدها را بر روی سیستم خودم امتحان کنم.مثلا میل ها به یک پوشه بر روی سیستم فرستاده شود.؟و نیاز نباشد که برنامه روی سرور امتحان شود.؟اگر با یک نمونه کد توضیح داده شود ممنون میشوم.

----------


## babi_wd

> سلامخسته نباشید.دستون درد نکند


ممنونم




> من میخواستم بدونم چگونه میشود این نمونه کدها را بر روی سیستم خودم امتحان کنم.مثلا میل ها به یک پوشه بر روی سیستم فرستاده شود.؟و نیاز نباشد که برنامه روی سرور امتحان شود.؟اگر با یک نمونه کد توضیح داده شود ممنون میشوم.


به این شکل که شما می فرماید نمیشه
میتونین با نصب کردن سرویس SMTP بر روی IIS خودتون (در مقاله هم ذکر شده که این سرویس وجود داره)
و با استفاده از همین مثال ها،ایمیل هایی  به ایمیل خودتون در  Yahoo یا Gmail بفرستید و 
یا میتونین از ایمیل سرور های مجانی استفاده کنید
مثل:
MX1.mai.yahoo.com
یا
Smtp.gmail.com
یا 
Mx.google.com

----------


## fereshte22

توی iis یک Default SMTP Virtual Server وجود دارد.چیز دیگری باید نصب کنیم؟چگونه؟
مثلا من کد زیر را امتحان میکنم

ProtectedSub Button2_Click(ByVal sender AsObject, ByVal e As System.EventArgs) Handles Button2.Click
Dim mail AsNew MailMessage()
mail.From = New MailAddress("f@yahoo.com")
mail.To.Add("b@yahoo.com")
mail.Subject = "This is an email"
Dim plainView As AlternateView = AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", Nothing, "text/plain")

Dim htmlView As AlternateView = AlternateView.CreateAlternateViewFromString("Here is an embedded image.<img src=cid:companylogo>", Nothing, "text/html")

Dim logo AsNew LinkedResource("c:\temp\logo.gif")
logo.ContentId = "companylogo"
htmlView.LinkedResources.Add(logo)
mail.AlternateViews.Add(plainView)
mail.AlternateViews.Add(htmlView)
 
Dim smtp AsNew SmtpClient("127.0.0.1")
smtp.Send(mail)
EndSub
 

غیر از تنظیم ایمیل های معتبر به تنظیم دیگری احتیاج نیست؟میل فرستاده میشود؟

----------


## babi_wd

خوب پست قبلم رو تصحیح میکنم و فکر میکنم این بهتر باشه
میتونید ایمیل ها رو به خود SMTP تحویل بدین.و اون ایمیل رو در دایرکتوری C:\Inetpub\mailroot\Pickup قرار میده و اگه موفق به ارسال نشه به C:\Inetpub\mailroot\Queue انتقال میده میتونی بری و ایمیل رو مشاهده کنی
اینطوری درگیر ایمیل سرور ها هم نمیشی و جنبه آموزشی حفظ میشه
این قسمت کد :

Dim smtp AsNew SmtpClient("127.0.0.1")
smtp.Send(mail)
رو به این شکل تصحیح کن:

        Dim smtp As New SmtpClient("127.0.0.1")
        smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis
        Try
            smtp.Send(mail)
        Catch ex As Exception
            Response.Write(ex)
        End Try

----------


## ClaimAlireza

دوست من همیشه سعی کن به خاطر خدا ودر راه اون علمتو در اختیار دیگران قرار بدی ...

اینجوری دیگه از هیچ چی ناراحت نمیشی.....

گرچه تشکر کردن همونطور که دوستمون گفتن باعث انگیزه میشه ولی......


موفق باشی..

----------


## babi_wd

> دوست من همیشه سعی کن به خاطر خدا ودر راه اون علمتو در اختیار دیگران قرار بدی ...


 اگه اینطور نبود و انگیزه ای جز کمک به بقیه نداشتم اینجا ارائه نمیدادم
و مقاله رو برای خودم نگه میداشتم
چون هدف اولیه من  یاد گیری خودم بوده،و خواستم دیگران هم بهره ای ببرن




> اینجوری دیگه از هیچ چی ناراحت نمیشی.....


ناراحت نشدم،چون بحث برای خودم خیلی سوال داشت،برام جالب بود که چرا کسی نظری نمیده
و فکر کردم کار بیهوده ای انجام دادم




> گرچه تشکر کردن همونطور که دوستمون گفتن باعث انگیزه میشه ولی......


برای جمع کردن تشکر اینجا فعالیت نمیکنم(چون اگه اینطوری باشه وقتم رو تلف کردم)

اصل یاد بگیر و به دیگران هم یاد بده رو قبول دارم




> موفق باشی..


ممنون از لطف شما

----------


## babi_wd

بخش پنجم
*تنظیم اولویت (Priority) ایمیل:*

گرچه تعیین اولویت ایمیل به وسیله هدر ها (Header) کنترل میشود،اما در فضای نام System.Net.Mail تعیین اولویت پیغام جزو ویژگی های شی ایجاد شده از کلاس MailMesseage میباشد
ویژگی Priority میتواند مقادیر زیر را دریافت کند


مثالی از نحوه استفاده از این ویژگی:


[C#‎]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";

mail.Priority = MailPriority.High;

SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

[VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."

mail.Priority = MailPriority.High

Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)

*اضافه کردن Reply-To به هدر ایمیل :*

همانند ویژگی Priority ،هدر Reply-Toنیز توسط شی ایجاد شده از MailMesseage قابل تنظیم میباشد
از این ویژگی جهت تعیین ایمیلی به عنوان گیرنده پاسخ استفاده میشود
وقتی کاربر ایمیل را می بیند و قصد ارسال پاسخ آن را دارد،ایمیل تعیین شده با این ویژگی به عنوان دریافت کننده پاسخ میباشد

مثالی از نحوه استفاده از این ویژگی:


[C#‎]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";

mail.ReplyTo = new MailAddress("SomeOtherAddress@mycompany.com");

SmtpClient smtp = new SmtpClient("127.0.0.1");
smtp.Send(mail);

[VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."

mail.ReplyTo = New MailAddress("SomeOtherAddress@mycompany.com")

Dim smtp As New SmtpClient("127.0.0.1")
smtp.Send(mail)



*اضافه کرده header های دلخواه به ایمیل:*

آیا تا به حال به هدر هایی که همراه با ایمیلی که برای شما ارسال میگردد دقت کرده اید؟
این هدرها دارای اطلاعات جالب و مفیدی از ارسال کننده ایمیل میباشند
برخی از این هدر ها ثابت و برخی دیگر به وسیله فرستنده قابل تغییر میباشند
حتی شما قادر خواهید بود اطلاعات دلخواه خود را در هدر ایمیل های ارسالی قرار دهید
برای اضافه کردن هدر به ایمیل از کلاس MailMessage استفاده میکنیم

مثالی از نحوه استفاده از این ویژگی:


[C#‎]

        MailMessage mail = new MailMessage();

        mail.From = new MailAddress("me@mycompany.com");
        mail.To.Add("you@yourcompany.com");

        mail.Subject = "This is an email";
        mail.Body = "this is the body content of the email.";

        mail.Headers.Add("Company", "My Company");
        mail.Headers.Add("Location", "Iran");

        SmtpClient smtp = new SmtpClient("127.0.0.1");
        smtp.Send(mail);

[VB]

        Dim mail As New MailMessage()

        mail.From = New MailAddress("me@mycompany.com")
        mail.To.Add("you@yourcompany.com")

        mail.Subject = "This is an email"
        mail.Body = "this is the body content of the email."

        mail.Headers.Add("Company", "My Company")
        mail.Headers.Add("Location", "Iran")

        Dim smtp As New SmtpClient("127.0.0.1")
        smtp.Send(mail)


نمونه ای از نمایش هدرهای ایمیل در Yahoo:


یکی از هدرهای جالب،هدر Disposition-Notification-To میباشد 
با استفاده از این هدر و معرفی یک ایمیل به عنوان مقدار هدر میتوانید از خوانده شدن ایمیل توسط گیرنده آن باخبر شوید(البته استفاده از این هدر به صورت تضمین شده نمی باشد و درستی عملکرد آن دارای شرایط میباشد به همین جهت مورد بحث و برسی قرار نمیگیرد )

----------


## babi_wd

بخش پایانی

*پیکر بندی Web.Config جهت ارسال ایمیل:*

اگر تا کنون دقت کرده باشید،در هنگام ارسال ایمیل برخی از قسمتها مشترک میباشد.این قسمت ها به شرح ذیل میباشند

MailMessage.From
SmtpClient.Host
SmtpClient.Port


با تنظیم یک باره آنها در Web.Config از تنظیم این ویژگی ها در قسمت های مختلف جلوگیری خواهد شد

<configuration>
  <system.net>
    <mailSettings>

      <smtp   from="Me@MyCompany.com">
        <network  host="Your Smtp Server" port="25" userName="send@MyCompany.com" password="PWd1"
defaultCredentials="false" />
      </smtp>

    </mailSettings>
  </system.net>
  <connectionStrings/>
  <system.web>
</configuration>



نکته قابل توجه در مورد defaultCredentials میباشد که اگر مقدار  true داشته باشد   userNameو  passwordدر نظر گرفته نمیشوند

*ارسال ایمیل به صورت غیر همزمان:*

SNM امکان ارسال ایمیل به صورت غیر همزمان را فراهم آورده است
با استفاده از این روش،در زمان ارسال ایمیل به کار دیگری پرداخته میشود و با هندل کردن رخداد اتمام ارسال ایمیل،می توان از ارسال درست یا نادرست ایمیل آگاه شد.
همانطور که اشاره شد،میتوانیم درستی ارسال ایمیل را تشخیص دهیم
این امر توسط رخداد  SendCompleted کنترل میشود
در مثال زیر قصد داریم این رخداد را به دلخواه خود هندل کنیم و پیغام مناسب خود را به کاربر نمایش بدهیم

مثالی از نحوه استفاده از این ویژگی:

  [C#‎]

MailMessage mail = new MailMessage();
mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";

SmtpClient smtp = new SmtpClient("127.0.0.1"); 

/*1*/ object user_State = mail;

/*2*/smtp.SendCompleted += new
SendCompletedEventHandler(SmtpClient_OnCompleted);

/*3*/smtp.SendAsync(mail, user_State);
public static void SmtpClient_OnCompleted(object sender,AsyncCompletedEventArgs e)
    {

     /*4*/ MailMessage mail = (MailMessage)e.UserState;

        string subject = mail.Subject;

        if (e.Cancelled)
        {
            Console.WriteLine("Send canceled for mail with subject[{0}].", subject);
        }
        if (e.Error != null)
        {
            Console.WriteLine("Error {1} occurred when sending mail
[{0}] ", subject, e.Error.ToString());
        }
        else
        {
            Console.WriteLine("Message [{0}] sent.", subject);
        }
    }
 [VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."

Dim smtp As New SmtpClient("127.0.0.1")

/*1*/ Dim user_State As Object = mail

/*2*/ AddHandler smtp.SendCompleted, AddressOf SmtpClient_OnCompleted

/*3*/ smtp.SendAsync(mail, user_State)


Public Sub SmtpClient_OnCompleted(ByVal sender As Object, ByVal e As ComponentModel.AsyncCompletedEventArgs)

/*4*/ Dim mail As MailMessage = CType(e.UserState, MailMessage)

   Dim subject As String = mail.Subject

   If e.Cancelled Then
   Console.WriteLine("Send canceled for mail with subject [{0}].",subject)
   End If
   If Not (e.Error Is Nothing) Then
            Console.WriteLine("Error {1} occurred when sending mail [{0}] ", subject, e.Error.ToString())
   Else
       Console.WriteLine("Message [{0}] sent.", subject)
   End If

End Sub



*نکات قابل توجه:*

به خطوطی که با شماره 1 تا 3 شماره گذاری شده اند توجه کنید
در خط 1 ،شی بنام  user_State  به شی ایجاد شده از کلاس Mailmessage  منتسب شده است
و در خط 3 این شی همرا با شی Mailmessage  به عنوان ورودی تابع ارسال شده است
دلیل این امر این است که ما اطلاعاتی از ایمیل را که نیازمندیم از آنها برای نمایش پیغام های مناسب استفاده کنیم در دسترس داشته باشیم

این شی ارسالی به صورت یک ویژگی(Property)  به نام UserSate قابل دسترس خواهد بود (خط 4)
در خط 2 نیز تابع SmtpClient_OnCompleted را به عنوان تابعی اجرایی برای این رخداد معرفی میکینم


*نوشتن ایمیل در pickup directory:*

نوشتن ایمیل در pickup directory سرویس SMTP در IIS یکی دیگر از امکانات SNM میباشد. pickup directory یک دایرکتوری ویژه است سرویس Smtp مایکروسافت از آن برای ارسال ایمیل استفاده میکند
تمام فایل های موجود در این دایرکتوری بر اساس سرویس Smtp پردازش و تحویل داده میشود
اگر پروسس تحویل ایمیل شکست بخورد فایل در queue directory ذخیره میشود
تا بعدا ارسال شوند
اگر یک خطای مهلک (fatal error) زخ بدهد فایل به Badmail directory منتقل میشود
با نوشتن در pickup directory سرعت پردازش بالا میرود چرا که تبادل ارتباط با یک ایمیل سرور دیگر از جریان ارسال ایمیل حذف خواهد شد

مثالی از نحوه استفاده از این ویژگی:

 [C#‎]

MailMessage mail = new MailMessage();

mail.From = new MailAddress("me@mycompany.com");
mail.To.Add("you@yourcompany.com");

mail.Subject = "This is an email";
mail.Body = "this is the body content of the email.";

SmtpClient smtp = new SmtpClient();
smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis;
smtp.Send(mail);

[VB]

Dim mail As New MailMessage()

mail.From = New MailAddress("me@mycompany.com")
mail.To.Add("you@yourcompany.com")

mail.Subject = "This is an email"
mail.Body = "this is the body content of the email."

Dim smtp As New SmtpClient()
smtp.DeliveryMethod = SmtpDeliveryMethod.PickupDirectoryFromIis
smtp.Send(mail)


قابل ذکر است از این روش میتوانید مثال های فوق را بدون اتصال به اینترنت و داشتن سرور واسط و فقط با نصب سرویس SMTP بر روی IIS به صورت عملی انجام دهید
نتایج کار خود را میتوانید در 
Inetpub\mailroot
در داخل پوشه Pickup یا Queue مشاهده کنید

----------


## bahman_eng

کاشکی علم اونقدر پیشرفت کرده بود که از تو اینترنت می تونستم بپرم و بغلت کنم و دستتو ببوسم که همچین مطلبی رو جمع آوری و ترجمه کردی. واقعا دستت درد نکنه. خسته نباشی عزیز

----------


## hamid_isf_1360

آقا واقعا عالی بود دستت درد نکه
خدا به وقتت برکت بده

----------


## smirabolg

*من لم یشکر الخالق لم یشکر المخلوق*

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

----------


## na3er-faraji

واقعا جالب بود . تا به حال مقاله ای به این کاملی در مورد ارسال ایمیل ندیده بودم . خواهشا در پایان به صورت pdf قرار بدید چون به درد خیلی ها میخوره . بازم تشکر

----------


## سید مسعود موحد

آقا خیلی عالی بود به قول دوستمون اگر pdf هم بکنید و قرا بدهید روی سایت برای دانلود که عالی میشود

----------


## JackJumper.Net

سلام، خسته نباشید.

وقتی ایمیل ارسال می شود فونت و اندازه آن زشت است ولی ایمیل حتی در یاهو نیز به inbox ارسال می شود.
ولی وقتی کد <br> یا تگ هایی که مشخص میکند اسم و اندازه فونت چی باشه را در متن میل می نویسیم و حتی قسمت isbodyhtml=true هم میزاریم دیگه میل ها به bulk میره تو یاهو شما که تمام مباحث مربوط به میل را توضیح دادید راهی هم برای بر طرف کردن این مشکل دارید ؟

----------


## kamvah

آیا این امکان وجود دارد که از کامپیوتر کاربر فایلی در ایمیل Attach شود بدون اینکه از کامپوننت (component) , انتخاب فایل<INPUT> استفاده شود؟

----------


## DotNet_King

> سلام، خسته نباشید.
> 
> وقتی ایمیل ارسال می شود فونت و اندازه آن زشت است ولی ایمیل حتی در یاهو نیز به inbox ارسال می شود.
> ولی وقتی کد <br> یا تگ هایی که مشخص میکند اسم و اندازه فونت چی باشه را در متن میل می نویسیم و حتی قسمت isbodyhtml=true هم میزاریم دیگه میل ها به bulk میره تو یاهو شما که تمام مباحث مربوط به میل را توضیح دادید راهی هم برای بر طرف کردن این مشکل دارید ؟


آقای راد راجع به این موضوع توضیح کاملی نوشتند. 
می تونید به این آدرس رجوع کنید
https://barnamenevis.org/showth...edicate&page=3
متاسفانه ip dedicate  می خواد که پولیه!!

----------


## DotNet_King

قبل از هر چیز لازم می دونم بابت این مقاله تون از شما تشکر کنم. واقعا یه رفرنس بی نظیره!
همچنین خدمت  اون دوستانی که کم لطفی کردن باید عرض کنم! که تشکر اینترنتی اونقدر ارزش نداره که یه نفر این همه متن رو ترجمه کنه ! شما لطف داشتید که این مطالب رو، جمع آوری کردید و اینجا گذاشتید تا بقیه ازش استفاده کنند. :تشویق: 




> کلاس SmtpClient ارسال ایمیل به صورت SSL را هم جهت اهداف امنیتی پشتیبانی میکند


ممنون میشم اگه راجع به این مورد هم یه مثال با کد بگذارید.

----------


## manitack

کارتون عالی بود  :تشویق:  :تشویق:  :تشویق: 
امیدوارم مدیران محترم رتبه بالایی به این تاپیک بدن و حتی اون رو در بخش ویژه قرار بدن. عده زیادی از کاربران با دیدن این تاپیک *کامل* سورپرایز (خوشبحال) میشند. :کف کرده!:

----------


## shahabm58

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

----------


## babi_wd

از لطف تمام دوستان کمال تشکر رو دارم.




> سلام، خسته نباشید.
> 
> وقتی ایمیل ارسال می شود فونت و اندازه آن زشت است ولی ایمیل حتی در یاهو نیز به inbox ارسال می شود.
> ولی وقتی کد <br> یا تگ هایی که مشخص میکند اسم و اندازه فونت چی باشه را در متن میل می نویسیم و حتی قسمت isbodyhtml=true هم میزاریم دیگه میل ها به bulk میره تو یاهو شما که تمام مباحث مربوط به میل را توضیح دادید راهی هم برای بر طرف کردن این مشکل دارید ؟


متاسفانه در این مورد برسی نکردم.نمدونم.این مشکل Bulk هم برای خودش معضلی شده .یکی از اساتید پیشنهاد داده که از کاربر ها بخواهیم  آدرس ما رو به  آدرس بوکشون اضافه کنن که مسائل خودش رو داره.



> آیا این امکان وجود دارد که از کامپیوتر کاربر فایلی در ایمیل Attach شود بدون اینکه از کامپوننت (component) , انتخاب فایل<INPUT> استفاده شود؟


تا اونجا که سواد ما میرسه نه.مگه آقای راد راه حلی داشته باشن




> آقا خیلی عالی بود به قول دوستمون اگر pdf هم بکنید و قرا بدهید روی سایت برای دانلود که عالی میشود


میتونید ار سایت منبع دانلود کنید




> قبل از هر چیز لازم می دونم بابت این مقاله تون از شما تشکر کنم. واقعا یه رفرنس بی نظیره!
> همچنین خدمت  اون دوستانی که کم لطفی کردن باید عرض کنم! که تشکر اینترنتی اونقدر ارزش نداره که یه نفر این همه متن رو ترجمه کنه ! شما لطف داشتید که این مطالب رو، جمع آوری کردید و اینجا گذاشتید تا بقیه ازش استفاده کنند.
> 
> 
> 
> ممنون میشم اگه راجع به این مورد هم یه مثال با کد بگذارید.



متاسفانه استفاده از ssl بر خلاف چیزی که اعلام شده عملی نیست(یا لاقل ما هر تلاشی کردیم نشد.در یکی از مراجع هم ذکر کرده بود که نمیشه.)




> با تشکر از زحمات شما بابت این مقاله ارزشمند .
> یک نکته ای که باقی ماند اینکه ما اگر بخواهیم یک میل به شکل خبر نامه بفرستیم چگونه عمل کنیم .


در مورد خبر نامه تاپیک های زیادی زده شده جستجو بفرمایید

----------


## Behrouz_Rad

> تا اونجا که سواد ما میرسه نه.مگه آقای راد راه حلی داشته باشن


نه بابک جان. امکانش وجود نداره.

----------


## scorpion_man

با سلام به همه دوستان
آقا واقعا عالی بود واقعیتش من چند ساله دارم از سایتا با کد ایمیل میزنم ولی تا حالا تا این حد وارد کلاسش نشده بودم واقعا دستت درد نکنه خیلی خیلی آموزنده بود خیلی استفاده کردم
موفق و پیروز باشید

----------


## Arian_61

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

----------


## mahdi_farhani

با اینکه دیر رسیدم ، ولی خوب اینم خودش یه جور تشکره . مطالب آموزش خالدی به صورت PDF

----------


## araz_pashazadeh

با عرض سلام و خسته نباشید...
واقعا دست شما درد نکنن مقله خیلی عالی بود.
من مقاله شما را خواندم و از این قسمتش که گفتن می تونم بدون اتصال به انترنت ایمیل بفرستم واقعا تعجب کردم چطور ممکن؟
اگه امکانش هست در این مورد هم توضیح بدین.
من این کارو کردم ولی نشد شما گفته بودین که اگر ایمیل درست ارسال بشه باید داخل این مسیر باشه C:\Inetpub\mailroot\Pickup اما نمی دونم چرا به پوشه C:\Inetpub\mailroot\Queue فرستاده میشن؟
اینم کدی که نوشتم:
using System;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Net.Mail;
publicpartialclass_Default : System.Web.UI.Page
{
protectedvoid Page_Load(object sender, EventArgs e)
{
MailMessage mail = newMailMessage();
//ںïêïé ¦ی§ê
//mail.From = new MailAddress("araz_pashazadeh@yahoo.com");
mail.From = newMailAddress("araz_pashazadeh@yahoo.com", "™©ںھ پں¬ںھں§ى", System.Text.Encoding.GetEncoding("utf-8"));
//§ی«¢ê èى ç©ں© ں«¢ ںïêïé  ى ™ë ه©«¢ں§ى ¬ی§
mail.To.Add("hesam_0o0@yahoo.com");
mail.Subject = "This is an email";
mail.Body = "this is a sample body with html in it. <b>This is" +
"bold</b> <font color=#336699>This is blue</font>";
//mail.IsBodyHtml = true;
//SmtpClient smtp = new SmtpClient("127.0.0.1");
mail.Headers.Add("Company", "My Company");
mail.Headers.Add("Location", "Iran");
SmtpClient smtp = newSmtpClient();
smtp.DeliveryMethod=SmtpDeliveryMethod.PickupDirectoryFromIis;
smtp.Send(mail);
}
}
ممنون میشم اگه راهنماییم کنید

----------


## babi_wd

سلام
کد هاتون بین تگ کد نیست.چیزی ازش نمی فهمم
مشکلی نیست.چون ایمیل شما ارسال نمیشه.به این پوشه انتقال داده میشه تا در اولین زمان ممکن اونارو بفرسته.شما از همین پوشه ایمیل هاتون رو دنبال کنید.
در ضمن این مورد برای تمرین ذکر شده

----------


## araz_pashazadeh

ممنون از لطفتون کدها مو این با ر به صورت کامل تر می زارم

----------


## C#‎_web

من هم ایمیلهایم به پوشه queue میرود. علت چیست ؟
 برای اینکه حتماً ایمیل به گیرنده برسد چه کار بکنم؟
 آیا خطا از برنامه نویسی است یا علتهای دیگری دارد ؟
اگر به حالت عادی (smtp.Send(mail را بزنم خطای failure to send email را میدهد.
من باید در برنامه ام حتماً خروجی اش را ببینم چون کارفرما باید نتیجه عملی آنرا ببیند. لطفاً راهنمایی کنید چه کار کنم؟
ممنون.

----------


## babi_wd

> من هم ایمیلهایم به پوشه queue میرود. علت چیست ؟


توضیح دادم که.این روش یه جور تست خروجیه.




> برای اینکه حتماً ایمیل به گیرنده برسد چه کار بکنم؟


باید یک میل سرور واقعی داشته باشید(مثل میل سرور یاهو).یا تنظیمات smtp سرور iis خورتون رو به طور کامل انجام بدین



> آیا خطا از برنامه نویسی است یا علتهای دیگری دارد ؟


هم آره هم نه



> اگر به حالت عادی (smtp.Send(mail را بزنم خطای failure to send email را میدهد.


خوب،یعنی میل سروری نداره که ایمیل رو بفرسته.یا هر نوع ایرادی که تو ارسال ایمیل باشه




> من باید در برنامه ام حتماً خروجی اش را ببینم چون کارفرما باید نتیجه عملی آنرا ببیند. لطفاً راهنمایی کنید چه کار کنم؟


ایمیل واقعی بفرست
ممنون.

----------


## C#‎_web

من مشخصات smtp را  روی سیستم خودم ست کرده ام  . اما این خطا را داده . نمیدانم چه اطلاعات دیگری باید وارد کنم؟
 اگر در شرکتی که کار میکنم بخواهم از سرور آنها استفاده کنم ،  mail server را در کجا باید صدا بزنم یا در کدهایم در کجا و آدرس چه چیزی را باید بنویسم؟

----------


## babi_wd

> من مشخصات smtp را  روی سیستم خودم ست کرده ام  . اما این خطا را داده . نمیدانم چه اطلاعات دیگری باید وارد کنم؟
>  اگر در شرکتی که کار میکنم بخواهم از سرور آنها استفاده کنم ،  mail server را در کجا باید صدا بزنم یا در کدهایم در کجا و آدرس چه چیزی را باید بنویسم؟


1)مقاله رو به دقت بخونید
2)اطلاعات خودتون رو  کمی بیشتر کنید

----------


## rezarafiee

با نوشتن کد زیر برای ارسال ایمیل MailMessage msg = new MailMessage();
            msg.From = new MailAddress("ali@MyCompany.com");
            msg.To.Add("ali@MyCompany.com");
            msg.Subject = "for test";
            msg.Body = "this is for test";
            SmtpClient smtp = new SmtpClient("mail.MyCompany.com", 25);
            smtp.UseDefaultCredentials = false;
            smtp.Credentials = new NetworkCredential("ali@MyCompany.com", "MyPassword");
            try
            {
                smtp.Send(msg);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }

  
 
با خطای زیر روبر می شوم لطفا راهنمایی کنید "An established connection was aborted by the software in your host machine"

----------


## rezarafiee

مشکل از آنتی ویروس بود که با غیرفعال کردن آن مساله حل شد

----------


## gheysar14

با سلام! من هم بابت مقاله بسیار مفیدتون تشکر می کنم .میخوام بدونم که اگر بخواهیم که میل را به تعداد زیادی از افراد بفرستیم ،به صورتی که آدرس میل افراد رو از تو دیتابیس بخونه (مثل ارسال خبرنامه)
حالا چی جوری باید آدرس رو بخونم و به mail.to.add("yourmail@yourDomain.com") اضافه کنیم؟ از DataReader استفاده کنم؟
اگه راهنماییم کنین ممنون میشم

----------


## babi_wd

بله.این کارم میتونی بکنی.
بخونی و به کالکشن اضافه کنی

----------


## gheysar14

> بله.این کارم میتونی بکنی.
> بخونی و به کالکشن اضافه کنی


این هم کد مربوط به فرستادن ایمیل به تعداد زیادی یوزر:



dim i As Integer = 0 
Dim email AsString
Dim listMail AsNew ArrayList()

While (dr.Read) 
email = dr.GetValue(i).ToString
listMail.Add(email) 
i = i + 1 - 1

EndWhile

ForEach email In listMail
mail.To.Add(email)

Dim smtp AsNew System.Net.Mail.SmtpClient()

smtp.Host = "mail.myhost.com"
smtp.Send(mail)

----------


## gheysar14

حالا من یه مشکلی دارم و اونم اینه که ایمیل  افرادی که در دیتابیس من قرار دارند از mailserver های مختلفی هست و موقع فرستادن میل با error های مختلفی روبرو میشم. مثل Mailbox Unavailable  یا Timeout Operation . به نظر دوستان مشکل از چی میتونه باشه؟

----------


## gheysar14

مشکل spam در ارسال ایمیل چی جوری حل میشه؟ ):

----------


## kezack

:گریه: با سلام من کد زیر را در صفحه ای داخل سایتی نوشتم و آپلود کردم ولی با یک خطا مواجه 
شدم لطفا کمکم کنید.
اینم کد برنامه ام
**************************************************  **********
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Mail;
public partial class Mail : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {

            MailMessage objmail = new MailMessage();
            objmail.From = System.Configuration.ConfigurationSettings.AppSett  ings
["Email"];
            objmail.To = TextBox1.Text;
            objmail.Subject = "salam";
            objmail.BodyFormat = MailFormat.Html;
            objmail.BodyEncoding = System.Text.Encoding.UTF8;
            objmail.Body = "thank for register";
            objmail.Fields["http://schemas.microsoft.com/cdo/con...tion/sendusing"] 
= 2;
            objmail.Fields
["http://schemas.microsoft.com/cdo/con...smtpserverport"] = 25;
            objmail.Fields
["http://schemas.microsoft.com/cdo/con...tpauthenticate"] = 1;
            objmail.Fields
["http://schemas.microsoft.com/cdo/con...n/sendusername"] = 
System.Configuration.ConfigurationSettings.AppSett  ings["SMTPusername"];
            objmail.Fields
["http://schemas.microsoft.com/cdo/con...n/sendpassword"] = 
System.Configuration.ConfigurationSettings.AppSett  ings["SMTPpassword"];
            SmtpMail.SmtpServer = 
System.Configuration.ConfigurationSettings.AppSett  ings["SMTP"];
            SmtpMail.Send(objmail);
            TextBox1.Text = "";

    }

}
**************************************************  ***
اینم قسمت WebConfig
******************
<?xml version="1.0"?>
<!-- 
    Note: As an alternative to hand editing this file you can use the 
    web admin tool to configure settings for your application. Use
    the Website->Asp.Net Configuration option in Visual Studio.
    A full list of settings and comments can be found in 
    machine.config.comments usually located in 
    \Windows\Microsoft.Net\Framework\v2.x\Config 
-->
<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
  <appSettings>
    <add key="SMTP" value="Localhost"/>
    <add key="SMTPusername" value=""/>
    <add key="SMTPpassword" value=""/>
    <add key="Email" value="Morteza_2753@yahoo.com"/>
    <add key="Path" value="http://Data-Galaxy.com"/>
  </appSettings>
 <connectionStrings>
 </connectionStrings>
 <system.web>
 <customErrors mode="Off"/>
  <!-- 
            Set compilation debug="true" to insert debugging 
            symbols into the compiled page. Because this 
            affects performance, set this value to true only 
            during development.
        -->
    <authorization>
       <allow roles="Kezack" />
    </authorization>
    <compilation debug="true"/>
  <!--
            The <authentication> section enables configuration 
            of the security authentication mode used by 
            ASP.NET to identify an incoming user. 
        -->
  <authentication mode="Forms" />
  <!--
            The <customErrors> section enables configuration 
            of what to do if/when an unhandled error occurs 
            during the execution of a request. Specifically, 
            it enables developers to configure html error pages 
            to be displayed in place of a error stack trace.
        <customErrors mode="RemoteOnly" 
defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
 </system.web>
</configuration>
************************
اینم خطا ی برنامه ام 
Server Error in '/' Application.
--------------------------------------------------------------------------------
The message could not be sent to the SMTP server. The transport error code was 
0x80040217. The server response was not available
Description: An unhandled exception occurred during the execution of the current 
web request. Please review the stack trace for more information about the error and 
where it originated in the code. 
Exception Details: System.Runtime.InteropServices.COMException: The message 
could not be sent to the SMTP server. The transport error code was 0x80040217. 
The server response was not available

Source Error: 

Line 50:             objmail.Fields
["http://schemas.microsoft.com/cdo/con...n/sendpassword"] = 
System.Configuration.ConfigurationSettings.AppSett  ings["SMTPpassword"];
Line 51:             SmtpMail.SmtpServer = 
System.Configuration.ConfigurationSettings.AppSett  ings["SMTP"];
Line 52:             SmtpMail.Send(objmail);
Line 53:             TextBox1.Text = "";
Line 54:         

لطفا کمکم کنید :گریه:  :گریه:  :گریه:

----------


## Ehsan Valinouri

با سلام خدمت دوستان گرامی و تشکر فراوان بابت این مطلب بسیار مفید
من از قطعه کد زیر برای ارسال ایمیل استفاده می کنم:

 Dim obj As New SmtpClient
        Dim Mailmsg As New MailMessage
        Mailmsg.To.Clear()

        Mailmsg.To.Add(New MailAddress(txtReceiverMail.Text))
        Mailmsg.From = New MailAddress(txtSenderMail.Text, txtSenderName.Text, System.Text.Encoding.GetEncoding("windows-1256"))
        Mailmsg.Subject = txtSubject.Text
        Mailmsg.BodyEncoding = System.Text.Encoding.UTF8
              obj.Host = "mail.mysite.ir" 
        Dim basicAuthenticationInfo As New System.Net.NetworkCredential("info@mysite.ir", "PWD1")

        obj.UseDefaultCredentials = False

        obj.Credentials = basicAuthenticationInfo

        Mailmsg.Body = txtBody.Text 
        Mailmsg.IsBodyHtml = True
        Try
            obj.Send(Mailmsg)
               Catch ex As Exception
            Response.Write(ex.Message)

        End Try
    End Subاما در هنگام ارسال با خطای زیر مواجه میشم:

User not local; please try a different path. The server response was: Sender  address is not valid for your login. Check your email program settingsمشکل از کجاست؟

----------


## Mazdak_Sh

> بنظر شما ، این که با این روش میشه به راحتی با آدرس ایمیل دیگران اقدام به ارسال ایمیل نمود، یک ضعف فاحش نیست.


نه ابدا. شما مي توانيد قبل از اينكه به كاربر اجازه ي ارسال ايميل بدهيد، او را ملزم به ثبت نام كرده و يك كد فعالسازي براي او به آدرس ايميلي كه در فرم ثبت نام پر كرده است بفرستيد تا از صحت آدرس ايميل مطمئن شويد. سپس كاربر شما كه اينك 
IsAuthenticated هست مي توانيد از امكانات ارسال ايميل استفاده كند. بيش از اين كاري نمي توان كرد. آيا شما طالب طراحي سيستمي قوي تر از yahoo هستيد؟

----------


## shahroozj

سلام 
با تشكر از تمامي دوستاني كه زحمت كشيدن و اين تاپيك را ايجاد كردن مخصوصا از babak خان عزيز
مي خواستم بدونم آيا نحوه استفاده از pop3 در دات نت را هم به اين واضحي و شفافي داريد ؟ اگر زحمتي نيست امكانش هست كه اينجا بگذاريد ؟
با تشكر و خسته نباشيد

----------


## یک برنامه نویس

> من برای این مقاله خیلی زحمت کشیدم
> از استقبال کم دوستان که نه نظر دادن نه تشکر کردن دل سرد شدم
> شاید به درد کسی نمیخوره؟!!
> یا به خاطر ...


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

----------


## ASKaffash

> من برای این مقاله خیلی زحمت کشیدم
> از استقبال کم دوستان که نه نظر دادن نه تشکر کردن دل سرد شدم
> شاید به درد کسی نمیخوره؟!!
> یا به خاطر ...


سلام
بابت زحمات جنابعالی تشکر ویژه می کنم انشاالله همیشه موفق باشید.
من همه کارهائی که در مقاله گفته اید را در سورس ذیل انجام داده ام ولی خطای غیر امن بودن ارتباط را میدهد بنظر شما مشکل کجاست :
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 Must issue a STARTTLS command first. q9sm9151655gve.5

اینهم کد :

MailAddress From = newMailAddress("A@gmail.Com", "Mr A");
MailAddress To = newMailAddress("B@C.Com", "Mr B");
MailMessage MM = newMailMessage(From, To);
MM.Subject = "Subject ...";
MM.Body = "Body ...";
MM.Attachments.Add(newAttachment(@"C:\FileName.txt"));
SmtpClient Smtp = newSmtpClient("Smtp.gmail.Com", 25);
Smtp.Credentials = newNetworkCredential("A@gmail.Com", "******");
Smtp.Send(MM);

----------


## ASKaffash

خودم جوابش رو پیدا کردم این دوخط را کم دارد :

Smtp.UseDefaultCredentials = false;
Smtp.EnableSsl = true;

----------


## mzarmehri

با سلام:
من از كد شما استفاده كردم ولي خطاي زير را مي دهد مي شه راهنماييم كنيد :
Mailbox name not allowed. The server response was: sorry, you have not authenticated for relay and <mail@yahoo.com> is not a local address.(#5.7.1)

----------


## leilagh

سلام
از شما بخاطر مقاله خوبتون تشکر می کنم
اگر ممکنه یک صفحه که بوسیله اون بشه میلی فرستاد همرا با CC و ... به عنوان ضمیمه قرار بدهید

----------


## msadgd

با سلام خدمت همگي.
باتشكر از بابك جان عزيز موردي كه واسه من پيش اومده اينه كه با استفاده از آموزش اقا بابك گل، ايميل هايي كه بايد ارسال بشن، توي صفحه سايت من بدون خطا ارسال ميشن اما فقط ايميل هاي از نوع gmail به مقصد ميرسه و ايميلهاي yahoo چيزي بدستشون نميرسه. اين مورد از چي ممكنه باشه؟ اگه راهنمايي كنيد خيلي ممنون ميشم.

----------


## babi_wd

> سلام
> از شما بخاطر مقاله خوبتون تشکر می کنم
> اگر ممکنه یک صفحه که بوسیله اون بشه میلی فرستاد همرا با CC و ... به عنوان ضمیمه قرار بدهید


با یه تغییر کوچیک تو نمونه کد ها میتونید انجامش بدین




> با سلام خدمت همگي.
> باتشكر از بابك جان عزيز موردي كه واسه من پيش اومده اينه كه با استفاده از آموزش اقا بابك گل، ايميل هايي كه بايد ارسال بشن، توي صفحه سايت من بدون خطا ارسال ميشن اما فقط ايميل هاي از نوع gmail به مقصد ميرسه و ايميلهاي yahoo چيزي بدستشون نميرسه. اين مورد از چي ممكنه باشه؟ اگه راهنمايي كنيد خيلي ممنون ميشم.


این مشکل به هاست مربوط میشه.با پشتیبان تماس بگیر
البته آدرس فرستنده رو به آدرس بوک ایمیل هایو اضافه کن ببین واقعا مشکل از یاهو نباشه و ایمیل اسپم نشه

----------


## msadgd

سلام. عيد همگي مبارك.
بابك جان از لطفت ممنونم.
ايميلها به گوگل سريع ارسال ميشه (حداكثر 5 دقيقه) اما به ياهو چند ساعت تاخير داره.
حالا اون جاي خودش مسئله اي كه الآن هست اينه كه وقتي آدرس ايميل به صورت مستقيم نوشته ميشه مثلا:
mail.To.Add(name@site.com)

يا


mail.To.Add(TextBox2.Text)
ايميلها ارسال ميشن. اما وقتي يك متغير مثلا متغيري كه اطلاعاتش از  بانك خومده شده باشه، بجاي آدرس ايميل نوشته ميشه، ايميل به دست گيرنده نميرسه. حتي اگر به عنوان مثال ايميلي كه از توي تكست باكس مي گيريم رو درون يه متغير بريزيم، همين مسئله پيش مياد. 
مثلا:
 dim email as string=textbox1.text  
mail.to.add("'" & email & "'") 
اينجوري ايميل ارسال ميشه اما به دست گيرنده نميرسه. فرقي نميكنه gmail باشه  يا yahoo.
بازهم ممنونم.

----------


## babi_wd

dim email as string=textbox1.text  
mail.to.add("'" & email & "'") 
وقتی متغیرت از جنس string هست و آرگومان تابع add هم همینطور، اینا رو برای چی گذاشتی؟

----------


## babi_wd

> لطفا راه حل های جلوگیری از اسپم شدن رو طبق تجربه خودتون بگید.در یاهو بیشتر!!!


چند روش رو معرفی کردن اما من به شخصه از هیچ کدوم استفاده نکردم
همیشه سرویس گرفتن از یه هاست خوب رو به همه این مسائل ترجیح دادم
هیچ وقت هم برای ارسال ایمیل به مشترکان سایت مشکل نداشتم

1)اضافه کردن ایمیل فرستنده به آدرس بوک توسط گیرنده--عملا کاربردی نیست مگر در موارد خاص
2)استفاده از آی پی استاتیک برای ارسال ایمیل

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

----------


## m1vahid

سلام به همگی
دست همتون درد نکنه کارتون درسته
آقا بابک دستت درد نکنه انشاال... موفق بشی

----------


## Saber_Fatholahi

> لطفا راه حل های جلوگیری از اسپم شدن رو طبق تجربه خودتون بگید.در یاهو بیشتر!!!


دوست عزیز اگه اجازه بدین با اجازه آقا بابک گل منم یه تجربه کوچولو دارم میگم امیدوارم کاربردی باشه
من حالتی رو امتحان کردم که اسپم نشد اینکه در واقع آدرس ایمیل فرستنده همون آدرس کاربر اصلی سایت بود که از میل سرور استفاده می کرد مثلا info@schoolfarhang.com اما زمانی که این ایمیل تغییر دادم و در واقع نوعی ایمیل اشتباهی می شد و ایمیل ارسالی اسپم می شد

----------


## cemohsen

با سلام
اول از زحمات دوست عزیزمون که این مقاله کامل رو آماده کردن تشکر می کنم و براشون آرزوی موفقیت دارم
من خودم این مشکل رو داشتم و خیلی توی اینترنت دنبال مطالب خوب گشتم و خوشبختانه توی سایت های eng چیزای خوبی پیدا کردم و حتی فیلم های آموزشی اون رو هم دانلود کردم و کارم تقریبا داشت راه می افتاد و وقتی این مقاله رو خودنم خیلی خوشحال شدم
اما این روش و استفاده از این کتابخانه System.Net.Mail یه سری مشکلات برای من داشت که در آخر ازش استفاده نکردم
اول اینکه وقتی با استفاده از این روش میل رو ارسال کردم بیشتر از24 ساعت طول کشید که به دستم برسه و در ثانی اگه بدون پسورد میل رو ارسال می کردم ، اون رو به پوشه spam ها می فرستاد و چون زمان برای من خیلی مهم بود ، در آخر از کتابخانه قدیمی System.Web.Mail استفاده کردم که به محض ارسال میل رو می فرسته .
گفتم کدش رو اینجا بزارم تا اگه کسی نتونست از روش بالا استفاده کنه ، کارش با این راه بیفته
موفق و موید باشید

public static bool SendMail(string ToAddress,string Subject,string Body)
        {
            string _MailHost = Convert.ToString(ConfigurationManager.AppSettings["MailHost"]);
            string _MailPort = Convert.ToString(ConfigurationManager.AppSettings["MailPort"]);
            string _MailFromAddress = Convert.ToString(ConfigurationManager.AppSettings["MailFromAddress"]);
            string _MailPassword = Convert.ToString(ConfigurationManager.AppSettings["MailPassword"]);   
            
            MailMessage myMail = new MailMessage();

            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver",_MailHost);
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport",_MailPort);
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing","2");
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername",_MailFromAddress);
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword",_MailPassword);
            myMail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl","true");

            myMail.From = _MailFromAddress;
            myMail.To = ToAddress;
            myMail.Subject = Subject;
            myMail.BodyFormat = MailFormat.Html;
            myMail.Body = Body;
            myMail.Priority = MailPriority.High;
            myMail.BodyEncoding = System.Text.Encoding.UTF8;
            
            

            SmtpMail.SmtpServer = _MailHost + ":" +_MailPort;
            SmtpMail.Send(myMail);

            return true;

        }

----------


## mahdi_farhani

> میل رو ارسال کردم بیشتر از24 ساعت طول کشید


باید مشکلو پیدا کنی ، چون من اصلاً همچین مشکلی ندارم ، و همیشه میلهام به inbox میره

----------


## Himalaya

سلام...فرض کنید من تو درایو c یه فایل دارم که مسیرش به صورت زیره
c:\man_Log.LDF
من میخوام به ایمیل یه فایل attach کنم ... خوب مطمئنا باید مسیر فایل رو از کنترلی مثل fileupload
بگیریم دیگه...ولی وقتی ایمیل رو ارسال میکنم ارور زیر رو میده
Could not find file 'c:\windows\system32\inetsrv\man_Log.LDF'
فکر کنم چون این کنترل  سمت سرور اجرا میشه پس تو سرور هم به دنبال فایلی میگرده که من میخوام آپلودش کنم...کدی که استفاده کردم به شکل زیره

if (FileUpload2.HasFile)
                {
                    mm.Attachments.Add(new Attachment(FileUpload2.FileName));
                }

----------


## eyes_shut_number1

چطوری میشه عکس رو در قالب متن(body) میل ارسال کرد؟
با استفاده از Fck editor به عنئان editor body
ممنون

----------


## taghi.km

با تشکر از مطالب مفیدتون  :تشویق:

----------


## علیرضا مداح

سلام دوست عزیز،
پیشنهاد می کنم ویدئوی جناب Chris Pels را در این خصوص مشاهده نمایید:
[How Do I:] Use ASP.NET to Send Email from a Web Site
،/

----------


## Jafar Mohammadi

سلام
ضمن تشکر از دوست عزیزمون به خاطر مطلب مفیدشون، من در انجام یه پروژه با مشکل برخوردم که به شکل زیر هست:
من با ASP.Net 2 براي ارسال ايميل برنامه اي نوشتم که با System.Web.Mail کار ميکنه.
برنامه من تحت کلاينت که اجرا ميشه درست کار ميکنه و با استفاده از يک ايميل سيستم Gmail و پسورد آن، يک ايميل به Domain مورد نظر من ميفرسته.
ولي وقتي آپلودش ميکنم روي سرور ديگه کار نميکنه و خطاي The transport failed to connect to the server رو ميده.
وقتي از System.Net.Mail هم استفاده ميکنم هم، روي کلاينت خطاي The operation has timed out و روي سرور هم خطاي The transport failed to connect to the server رو ميده.
ضمنا شايد اين نکته هم مفيد باشه که بگم هاست سرور من از SSL پشتيباني نميکنه، با توجه به اينکه من از smtp سيستم Gmail استفاده ميکنم نه هاست خودم، آيا غير فعال بودن SSL روي هاست من ميتونه اثري داشته باشه؟
اگه کسي بتونه کمک کنه ممنون ميشم.

----------


## anamajnoonolhosein

با عرض سلام
آقا با وجود اینکه هنوز مقاله شما رو نخوندم لازم دیدم که به این با تمام وجود 
این کار شما رو ارج بنهم واز شما تشکر کنم
ان شاالله به حق فاطمه (س) همیشه موفق باشی

----------


## sina_daneshjo

عالی و کاملا پیشرفته شامل بسیاری از مطالب حرفه ای مورد نیاز 
همگی موفق باشید

----------


## persianspam

با سلام و خسته نباشد
ضمن ارز تشکر از مطالب جالب و خواندی . یک سوال داشتم
1- چگونه میتوان برای ارسال ایمیل یک تاخیر ایجاد کرد . مثلا به از ارسال 10 ایمیل اول , به مدت 5 ثانیه تاخیر یا وقفه داشته باشد و بعد از گذشت این 5 ثانه به ارسال 10 ایمیل بعدی بپردازد ؟
2- چگونه میتوان از Authentication خود هاست استفاده کرد.

من با برنامه FastEmail کار میکنم ولی به دلیل مشکلاتی که دارد خواستم خودم بنویسم.

اگر اساتید من رو راهنمایی کنند همیشه دعاگویشان هستم.

(به دلیل مشغله زیاد ممکنه دیر به دیر بتونم سر بزنم لذا در صورت امکان جواب را ایمیل نمایید "re_vu[@]yahoo[.]com")

با تشکر . میلاد

----------


## persianspam

جوابش رو گیر آوردم دوستان. ممنون

----------


## VB.NET2005

پیشنهاد میکنم با این کار کنید :


http://rapidshare.com/files/262167052/TraySoft.Addmail_for_activeX_v2.1.1-fuujin.rar.html

----------


## reghbali06

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

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

----------


## ali.akhbary

MailMessage mail = new MailMessage();

        //set the addresses
        mail.From = new MailAddress("hadmin@mydomain.net.com");
        mail.To.Add("akhbari65@gmail.com");

        //set the content
        mail.Subject = "This is an email";

        //first we create the Plain Text part
        AlternateView plainView = AlternateView.CreateAlternateViewFromString("This is my plain text content, viewable by those clients that don't support html", null, "text/plain");

        //then we create the Html part
        //to embed images, we need to use the prefix 'cid' in the img src value
        //the cid value will map to the Content-Id of a Linked resource.
        //thus <img src='cid:companylogo'> will map to a LinkedResource with a ContentId of 'companylogo'
        AlternateView htmlView = AlternateView.CreateAlternateViewFromString("Here is an embedded image.<img src=cid:companylogo>", null, "text/html");

        //create the LinkedResource (embedded image)
        LinkedResource logo = new LinkedResource("http://www.asp.net/App_Themes/Standard/i/logo.png");

کسی میتونه بگه که مشکل از کجاست؟

به خط آخر که میرسم error میده.

----------


## armangara

دوستان من در رابطه با ارسال ایمیل یه مشکل عجیب دارم
ایمیل به یاهو ارسال میشه اما به gmail  ارسال نمیشه
کسی می تونه کمکم کنه
کدا رو چندین بار بررسی کردم اما مشکلی نداره .اگه مشکل داشت یه یاهو هم نمی فرستاد
 :خیلی عصبانی:

----------


## ali.akhbary

> دوستان من در رابطه با ارسال ایمیل یه مشکل عجیب دارم
> ایمیل به یاهو ارسال میشه اما به gmail  ارسال نمیشه
> کسی می تونه کمکم کنه
> کدا رو چندین بار بررسی کردم اما مشکلی نداره .اگه مشکل داشت یه یاهو هم نمی فرستاد


پورت smtp یاهو با گوگل فرق داره.

----------


## Saber_Fatholahi

سلام
دوستان من مقاله جناب خالدیان به صورت PDF در این آدرس قرار دادم اگه دوست داشتین دانلود کنین
امیدوارم بدرد بخوره
ارسال ایمیل در دات نت 2.0

----------


## mzosan817

من از اين کد براي ارسال ايميل استفاده مي کنم ولي خطا ميده :عصبانی: 
خيلي وقته درگيرشم ممنون ميشم کمکم کنيد :خیلی عصبانی: 
 System‎‎.Net.Mail.MailMessage Msg = new System‎‎.Net.Mail.MailMessage();
Msg.From = new System‎‎.Net.Mail.MailAddress(EmailTextBox.Tex  t);
Msg.To.Add("info@domain.ir");
Msg.Subject = subjectTextBox.Text;
Msg.Body =bodyTextBox.Text;
// Msg.IsBodyHtml = true;
System‎‎.Net.Mail.SmtpClient SC = new System‎‎.Net.Mail.SmtpClient("smtp.domain.ir")  ;
SC.Send(Msg);

خطا:
Failure sending mail.

----------


## ali.akhbary

پس  user و pass کو؟
smtp.Credentials = New Net‎‎.NetworkCredential ("username", "secret")اگه توی web.config نوشتی که هیچی.

----------


## amirsajjadi

https://barnamenevis.org/showpo...29&postcount=3

----------


## jeivid

دوستان بنده در کد
smtp.Credentials = new NetworkCredential("username", "secret")
مشگل دارم وقلی می خوام قسمت NetworkCredential را بزنم اصلا همچین کدی در آن ذخیره نشده و پیام خطا میده
ممنون میشم کمکم کنید

----------


## melika#malek

سلام 
babi_wd عزیز لطف می کنید قسمت Attachment رو برای من بطور کامل حتی با نام یک سرور میل داخلش بگذارین. یه طوریکه واقعاً بشه بدون هیچ تغییری در کد با این کد ایمیل فرستاد.
 بهش نیاز فوری دارم ولی هر کدی رو نوشتم جواب نمیده.
با تشکر فراوان از شما...

----------


## ali.akhbary

> دوستان بنده در کد
> smtp.Credentials = new NetworkCredential("username", "secret")
> مشگل دارم وقلی می خوام قسمت NetworkCredential را بزنم اصلا همچین کدی در آن ذخیره نشده و پیام خطا میده
> ممنون میشم کمکم کنید


يعني چي؟؟ كمي بيشتر توضيح بديد.

----------


## sr_Hosseini

با سلام و ضمن تشکر از دوستان سوالی داشتم
می خوام کاربران ایمیل در سایتم بتونن اکانت ایجاد کنن ! یعنی به کدی نیاز دارم که با میل سرور ارتباط برقرار کنه و اکانت جدید ایجاد کنه. با این توضیح که از hmailServer  استفاده میکنم.
قبلاً از همکاری دوستان سپاسگذارم.

----------


## ali.akhbary

> با سلام و ضمن تشکر از دوستان سوالی داشتم
> می خوام کاربران ایمیل در سایتم بتونن اکانت ایجاد کنن ! یعنی به کدی نیاز دارم که با میل سرور ارتباط برقرار کنه و اکانت جدید ایجاد کنه. با این توضیح که از hmailServer  استفاده میکنم.
> قبلاً از همکاری دوستان سپاسگذارم.


اين سوال منم هست. كسي از چگونگي انجامش اطلاع داره؟

----------


## SAMARE

سلام دوستان عزیز
کد مربوط به دریافت ایمیل در asp.net رو کسی داره؟؟؟

----------


## SAMARE

كسي نيست؟؟؟

----------


## shocraneh

چند تا سوال 
smtp آیا ip  ای که از طریق هاست بهش می رسیم 
این جوری فهمیدم که user و pass خودمونو باید بهش بدیم آخه پسورد خودمونو چرا؟؟ غیر منطقیه

----------


## Alghoochi

> چند تا سوال 
> smtp آیا ip  ای که از طریق هاست بهش می رسیم 
> این جوری فهمیدم که user و pass خودمونو باید بهش بدیم آخه پسورد خودمونو چرا؟؟ غیر منطقیه


smtp آدرسی ایه که شما باید برای ارسال ایمیل از اون استفاده کنید. مثلا smtp گوگل smtp.gmail.com 
اگه بدون یوزر و پسورد میشد ایمیل فرستاد هرکسی می تونست از پهنای باند سایت شما استفاده کنه و ایمیل بفرسته

----------


## shocraneh

> smtp آدرسی ایه که شما باید برای ارسال ایمیل از اون استفاده کنید. مثلا smtp گوگل smtp.gmail.com 
> اگه بدون یوزر و پسورد میشد ایمیل فرستاد هرکسی می تونست از پهنای باند سایت شما استفاده کنه و ایمیل بفرسته


میل من رو yahoo فرقی نمی کنه smtp مال yahoo باشه یا gmail ( yahoo:smtp.yahoo.comاست ؟؟؟
ولی آخه من مقاله رو که خوندم این جوری متوجه شدم که بستکی به هاستی داره که ازش استفاده می کنی و دوستمون راهحل هم برای رسیدن به اون ip  ارائه داده بود ؟؟؟
بابت پسورد منظورم اینه که پسورد میل خودم رو بهش بدم یا این پسورد مربوط به یه چیز دیگه میشه ؟؟
با تشکر فراوان

----------


## Saber_Fatholahi

> میل من رو yahoo فرقی نمی کنه smtp مال yahoo باشه یا gmail ( yahoo:smtp.yahoo.comاست ؟؟؟
> ولی آخه من مقاله رو که خوندم این جوری متوجه شدم که بستکی به هاستی داره که ازش استفاده می کنی و دوستمون راهحل هم برای رسیدن به اون ip ارائه داده بود ؟؟؟
> بابت پسورد منظورم اینه که پسورد میل خودم رو بهش بدم یا این پسورد مربوط به یه چیز دیگه میشه ؟؟
> با تشکر فراوان


 دوست عزیز شما روی میل سرور خودت یه ایمیل میسازی مثلا info@yoursite.com , کلمه عبور شما هم میدین 12345 
حالا فقط کافیه واسه یوزر و پسورد اونهاو وارد کنین + نام میل سرور شما یا ادرس ip مربوطه
موفق باشید

----------


## hobab-theme

> با تنظیم یک باره آنها در Web.Config از تنظیم این ویژگی ها در قسمت های مختلف جلوگیری خواهد شد
> 
> 
> کد:
> <configuration> <system.net> <mailSettings> <smtp from="Me@MyCompany.com"> <network host="Your Smtp Server" port="25" userName="send@MyCompany.com" password="PWd1"defaultCredentials="false" /> </smtp> </mailSettings> </system.net> <connectionStrings/> <system.web></configuration>
> نکته قابل توجه در مورد defaultCredentials میباشد که اگر مقدار true داشته باشد userNameو passwordدر نظر گرفته نمیشوند


ضمن سلام و تشکر از شما دوست عزیز
میشه لطفاً بگید بعد از ذخیره کردن این اطلاعات در فایل Web.Config چطور اونو فراخونی کنیم ؟
ممنون

----------


## Saber_Fatholahi

گلم خودش اتوماتیک ازینا میخونه

----------


## hobab-theme

> گلم خودش اتوماتیک ازینا میخونه


 ممنون
آیا منظور شما اینه که جای یوزر و پسورد رو تو صفحه خالی بزاریم ؟
من این کار رو کردم ولی عمل نمی کنه
میشه لطفاً یه نمونه بذارید ؟
بازم ممنون

----------


## Saber_Fatholahi

عزیز توی کدوم صفحه؟ لطفا واضحتر بگو تا واست توضیحات کافی بدم

----------


## hobab-theme

توی صفحه محتوا
این قسمت
Dim smtp As New SmtpClient()
        Dim perm As New System.Net.NetworkCredential("Username", "password")
        smtp.Credentials = perm
        smtp.Send(msg)
این قسمت
Dim smtp As New SmtpClient()
باید آدرس میل سرور نوشته بشه
و بجای Username و Password هم اطلاعات مورد نیاز
من اینارو توی وب کانفیگ گذاشتم . حالا می خوام برنامه این اطلاعات رو از اونجا بخونه . می خواستم ببینم اینا رو چطوری تغییر بدم
بازم ممنون
موفق باشید

----------


## Saber_Fatholahi

سلام دوست من اگه این دو خط
Dim perm As New System.Net.NetworkCredential("Username", "password")
        smtp.Credentials = perm

ننویسی خودش اتوماتیک تنظیمات وب کانفیگ می خونه 
موفق باشی

----------


## saeidcd

https://barnamenevis.org/showth...094#post915094

----------


## SAMARE

ازتون بابت مقاله كاملتون ممنونم
يه سوال داشتم براي اينكه ايميل ارسالي حتما وارد* اينباكس* بشه كسي راه حلي نداره؟؟؟

----------


## AhoO-sh

سلام 
خواهش میکنم کمک کنید 
خیلی وقته که درگیر این موضوعم و وقتم هم داره تموم میشه :خیلی عصبانی: 

من از این کد برای ارسال ایمیل استفاده میکنم 

 
try
{
MailMessage oMailMessage = new MailMessage();
oMailMessage.IsBodyHtml = true;
oMailMessage.Priority = MailPriority.Normal;
oMailMessage.DeliveryNotificationOptions = DeliveryNotificationOptions.Never;
MailAddress oMailAddress = null;
System.Text.Encoding.UTF8);
oMailAddress = new MailAddress("آدرس جی میلم@gmail.com", " ", System.Text.Encoding.UTF8);
oMailMessage.From = oMailAddress;
oMailMessage.Sender = oMailAddress;
 
oMailAddress = new MailAddress("آدرس گیرنده@yahoo.com");
oMailMessage.To.Add(oMailAddress);
 
oMailMessage.SubjectEncoding = System.Text.Encoding.UTF8;
oMailMessage.Subject = txtTitleMesage.Text;
oMailMessage.BodyEncoding = System.Text.Encoding.UTF8;
oMailMessage.Body = txtMesage.Text;
 
 
SmtpClient oSmtpClient = new SmtpClient("127.0.0.1");
oSmtpClient.Port = 25;
oSmtpClient.Credentials = new NetworkCredential("آدرس جی میلم@gmail.com", "پسوردم");
oSmtpClient.Send(oMailMessage);
lblMesage.Text = " ایمیل ارسال شد.";
}
catch (System.Net.Mail.SmtpException exp)
{
lblMesage.Text = exp.ToString(); 
}


در webconfig هم چیزی ننوشتم
ولی خطای زیر و میده


System.Net.Mail.SmtpFailedRecipientException: Mailbox unavailable. The server response was: 5.7.1 Unable to relay for Hnvs گیرنده آدرس @yahoo.com at System.Net.Mail.SmtpTransport.SendMail(MailAddress sender, MailAddressCollection recipients, String deliveryNotify, SmtpFailedRecipientException& exception) at System.Net.Mail.SmtpClient.Send(MailMessage message) at ContantUs.btnSend_Click(Object sender, EventArgs e) 

کاربر گرامی، لطفا جهت پاسخگویی آدرس پست الکترونیک یا شماره تماس خود را در متن پیام بنویسید. 
کاربر گرامی، لطفا جهت پاسخگویی آدرس پست الکترونیک یا شماره تماس خود را در متن پیام بنویسید. 
چندین بار هم این مقاله ها و خوندم ولی نفهمیدم 
در ضمن smtp , IIS هم تیک خورده 
دیگه نمی دونم باید چی کار کنم  :ناراحت:

----------


## AhoO-sh

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

System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
System.Net.NetworkCredential cred = new System.Net.NetworkCredential
("Your_Gmail_Account@gmail.com", "Your_Gmail_Password");
mail.To.Add("To_Address");
mail.Subject = "This is a test mail message";
mail.From = 
new System.Net.Mail.MailAddress(Your_Gmail_Account@gma  il.com);
mail.IsBodyHtml = true;mail.Body = "This is a test mail message";
System.Net.Mail.SmtpClient smtp = new 
System.Net.Mail.SmtpClient("smtp.gmail.com");
smtp.UseDefaultCredentials = false;
smtp.EnableSsl = true;
smtp.Credentials = cred;smtp.Port = 587;
smtp.Send(mail);

----------


## zahracomputer

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


MailMessage mail = newMailMessage();
mail.From=newMailAddress("z@yahoo.com");
mail.To.Add("zh@yahoo.com");
mail.Subject="This is a mail";
mail.Body="hello";
SmtpClient smtp = newSmtpClient("127.0.0.1");
try
{
smtp.Send(mail);
Label1.Text = "SUCCESSFULL";
}
catch (Exception ex)
{
Response.Write(ex.Message);
}

ولی ذر اولین مرحله خطای زیر را می دهد:
Failure sending mail. 
ایراد کار من
با تشکر

----------


## moein_sql

سلام.

اگه بخواهيم محتويات يه فايل متني رو در بدنه ايميل ارسال كنيم چه طور ميشه اين كارو كرد؟

راهنمايي استفاده از maildefinition class

----------


## moein_sql

سلام فهميدم اينطوري :


publicvoid SendMail(string to, string from, string subject, string filename, bool ishtml,Control owrer)
{
//define mail var
MailMessage mail = newMailMessage();
MailDefinition md = newMailDefinition();
ListDictionary replacements = newListDictionary();
SmtpClient smtp;
//set mail parameters
md.From = from;
md.Subject = subject;
md.BodyFileName = filename;
md.IsBodyHtml = ishtml;
md.Priority = MailPriority.Normal;
replacements.Add("<%To%>", to);
replacements.Add("<%From%>", md.From);
//prepare mail for send
mail = md.CreateMailMessage(to, replacements, owrer);
//send email with existing hostname and user pass
smtp = newSmtpClient("_hostname");
smtp.Credentials = new System.Net.NetworkCredential("_username", "_password");
try
{
//try to send mail
smtp.Send(mail);
}
catch (Exception ex)
{
//handle error 
tools.LogError("error.txt", this.ToString(), ex);
}
}

----------


## moein_sql

ضمنا فضاي نام System.Collections.Specialized را هم اضافه كنيد.

----------


## pbm_soy

سلام

چطوری می تونم ایمیل ارسال شده را چک کنم که رسیده یا نرسیده ؟؟؟
سعی کردم از خصوصیات Deliveryoption استفاده کنم ولی نشد

----------


## khoshsirat

سلام
کسی میدونه توی داتنت 4 چطور میشه ایمیل فارسی فرستاد
البته ارسال توسط کنترلهای PasswordRecovery و CreateUserWizard که ایمیل رو اتوماتیک میفرستند
منظورم اینه که توی MailDefinition اون فایل BodyFileName باید چطور باشه؟؟؟  :متفکر: 
لطفا هرکی بلده کمک کنه
خیلی ممنون

----------


## farzad.valve

> سلام
> کسی میدونه توی داتنت 4 چطور میشه ایمیل فارسی فرستاد
> البته ارسال توسط کنترلهای PasswordRecovery و CreateUserWizard که ایمیل رو اتوماتیک میفرستند
> منظورم اینه که توی MailDefinition اون فایل BodyFileName باید چطور باشه؟؟؟ 
> لطفا هرکی بلده کمک کنه
> خیلی ممنون


به توضیح صفحه اول مراجعه کن 
فکر کنم با تلفیق Body  و کد Mail.From بشه این کار رو کرد البته با کمی تغییر

----------


## محمد متاله

روش صحیح کار را با کدهای #C در اینجا ذکر می کنم

ابتدایک تابع تعریف می کنم که کار ارسال پیغام که حاوی title و body و احیانا فایل attach است را به آدرس مشخصی که در پارامتر وردی تابع قرار دارد می فرستد
مشاهده می فرمایید که برای ارسال ایمیل های فارسی می باست از سیستم UTF8 برای Encoding استفاده کنیم


protected void sendEmail(string title, string body, string attachedFile, string address)
{
MailMessage msg = new MailMessage();
msg.To.Add(address);
msg.SubjectEncoding = System.Text.Encoding.UTF8;
msg.BodyEncoding = System.Text.Encoding.UTF8;
msg.IsBodyHtml = true;
msg.Subject = title;
msg.Body = body;
 
string pathFiles = HttpContext.Current.Server.MapPath("~/files/") + attachedFile;
try
{
Attachment attachFile = new Attachment(pathFiles);
msg.Attachments.Add(attachFile);
}
catch (Exception)
{
}
 
SmtpClient smtp = new SmtpClient();
smtp.EnableSsl = true;
smtp.Send(msg);
}
 


توجه داشته باشید که توسط mappath محل فیزیکی فایل را بدست آورده ایم اگر خودتان آدرس فیزیکی فایل را به تابع پاس می دهید این کد را حذف کنید و اگر آدرس مجازی نسبت به ریشه سایت را به تابع پاس می دهید این تابع خودش آدرس فیزیکی فایل را پیدا می کند

*توجه: فرض کرده ام که فایل هایتان در پوشه ای به نام files می باشد.*

ممکن است که گاهی نیاز به attach کردن فایلی به ایمیل داشته باشید و گاهی هم نداشته باشید پس بهتر هست که از این تابع دو override ایجاد کنید. یکی بدون پارامتر برای فایل attach و دیگری با پارامتری برای attach کردن فایل سپس هر موقع که نیاز شد هر کدام ار تابع های مورد نظر را صدا بزنید

تابعی که پارامتر attachfile نمی گیرد به این صورت هست


protected void sendEmail(string title, string body, string address)
        {
            MailMessage msg = new MailMessage();
            msg.To.Add(address);
            msg.SubjectEncoding = System.Text.Encoding.UTF8;
            msg.BodyEncoding = System.Text.Encoding.UTF8;
            msg.IsBodyHtml = true;
            msg.Subject = title;
            msg.Body = body;
            SmtpClient smtp = new SmtpClient();
            smtp.EnableSsl = true;
            smtp.Send(msg);
        }


سوال اینجاست که این ایمیل از طرف چه کسی ارسال می شود

برای این کار می باستکدهای زیر را در web.config اضافه کنید و به جای * ها پسوردتان را قرار دهید 


<system.net>
    <mailSettings>
      <smtp from="yourmail@gmail.com">
        <network host="smtp.gmail.com" port="587" userName="yourmail@gmail.com" password="123456" />
      </smtp>
    </mailSettings>
  </system.net>

اگر ویژوال استودیو به تگ هایی که در web.config اضافه می کنید ایراد گرفت یعنی اینکه در جای صحیح قرار نگرفته 

این کدها را باید دقیقا در بین تگ </configuration><configuration> قرار دهید




> بنظر شما ، این که با این روش میشه به راحتی با آدرس  ایمیل دیگران اقدام به ارسال ایمیل نمود، یک ضعف فاحش نیست.






> سلام
> این ضعفی هست که توی پروتکل SMTP موجود هست . از طرفی تحقیقات پلیس فدرال آمریکا نشون داده که 85% هرزنامه ها از این طریق ارسال میشن و به همین دلیل موارد رو به IEEE گزارش داده و قراره توی تعاریف جدیدشون برطرف بشه.البته ناگفته نمونه که اکثر ایمیل های جعلی به اینصورت Bulk میشن.
>  ممنون از دوست خوبمون برای مقاله اش 
> موفق باشید




همچنین می بینید که شما می بایست در web.config تنظیمات ایمیلتان را انجام داده و حتما پسورد ایمیلتان را هم باید وارد کنید تا بتوانید ایمیلی ارسال کنید. در ضمن تنها نکته غیر امنیتی کدهایی که در بالا نوشته ام (البته برای سادگی این کار را کرده ام و خود شما که همگی استادید و مطوئنم که این مورد را که برای امنیت ذکر می کنم حتما رعایت می کنید ) این هست که پسورد در web.config می باشد و بهتر هست آن را در مد #C تان وارد کنید تا حتی مسئولان هاستتان هم نتوانند به پسوردتان دسترسی داشته باشند و احیانا سو استفاده کنند ولی به یاد داشته باشید که با استفاده از روش دوم (قرار دادن پسورد در کدهای #C) جایی برای تغییر پسورد در سایت قرار دهید چون در روش قبل به راحتی می توانستید پسوردتان را بدون مشکلی عوض کنید.

----------


## B@H@2R

با تشكر از آقا بابك بابت لطفي كه به همه علاقه منداي برنامه نويسي كرده.
من تمام اين مطالب رو متوجه شدم و جواب هم گرفتم ولي يه سوال كه برام گنگ مونده:
من يه سايت دارم كه ميخوام به بازديد كننده اجازه بدم بهم Email بده و قرار هم نيست كه authenthicate بشه.
يعني هر كي از راه رسيد و دلش خواست بهم mail بده.
حالا سوال اينه كه من بازم بايد Smtp.Credentials رو با مثلا username و Passwordخودم پر كنم و طرف وقتي mail ميزنه تو gmail خودم آدرس خودم رو ميبينم با متن بازديد كننده؟

SmtpClient Smtp = newSmtpClient("smtp.gmail.com");
Smtp.Credentials = newNetworkCredential("My Gmail", "My Gmail Password");

چون كسي حاضر نميشه تو يه سايت نا آشنا username و Password خودش رو وارد كنه و با اون mail بزنه.
توجه كنيد اساتيد صورت مساله اينه كه من فقط گيرندم و بازديد كننده ها به من mail ميزنن.

----------


## sali2010

سلام
خیلی ممنونم از مقاله ی بسیار ارزشمند شما
من خیلی برنامه نویس خوبی نیستم لطفا کمکم کنین
من از کد های شما در vb.net استفاده کردم اما در خط آخر به مشکل میخوره و Failure sending mail. رو میده: 
  Dim mail As New MailMessage()

        mail.From = New MailAddress("yaali1990@yahoo.com")
        mail.To.Add("funali.z8709@yahoo.com")

        mail.Subject = "This is an email"
        mail.Body = "this is the body content of the email."
        Dim smtp As New SmtpClient("dns1.mci.com", 25)
        smtp.Credentials = New NetworkCredential("yaali1990@yahoo.com", "******")
        smtp.Send(mail)
این کل دستوراتیه که من زدم،البته خط آخر در پرانتز گذاری درسته و اینجا پرانتز در اول خط رفته
همه ی دستورات در یک button نوشته شده
لطفا راهنماییم کنید دیوانم کرد!

----------


## sali2010

مشکل رو پیدا کردم،مشکل شرکت اینترنتی ای هست که از آن خدمات می گیرم.پورت های 25 و 587 رو بسته که ادعا میکنه کار ما نیست کار مخابراته! من دیال آپ هم نشد چون این پورت هارو این دفعه خود مخابرات بسته.اگر به این صریحی مطلبی برای دریافت ایمیل از طریق pop3 یا IMAP هست در جریانم بگذارید.
پورت های کختلف اب سیستم های مختلف برای ارسال ایمیل:
      POP3 - port 110

      IMAP - port 143

      SMTP - port 25

      HTTP - port 80

      Secure SMTP (SSMTP) - port 465

      Secure IMAP (IMAP4-SSL) - port 585

      IMAP4 over SSL (IMAPS) - port 993

      Secure POP3 (SSL-POP) - port 995

----------


## m.toosi

دلیل استفاده از ip در این خط چیه؟
Dim smtp As New SmtpClient("127.0.0.1")
اگر یک توضیحی بدید که در سرور های مختلف این مقدار متفاوت هست و یا ثابته؟

----------


## saha_h2001

با سلام
این آی پی یک مقدار ثابت بوده که سیستم را بصورت لوکال در نظر میگیرد

----------


## zh64zh64

دوست عزیز از اینکه زحمت تهیه این مقاله را کشیدیدواقعا سپاسگذارم

----------


## zahrazahra67

از مقاله بسیار خوبتون ممنونم .فوق العاده بودو خیلی کمک کرد بهم. فقط سوالی که دارم راجب به ارسال ایمیل در رابطه با ویِژگی to.add هست چطور میشه کاری کرد که به چند آدرس ایمیل را ارسال کرد و از چه کنترلی در برنامه برای ذخیره آدرسهای ایمیل استفاده کرد ؟ مثلا کاری مثل send to allانجام داد؟

----------


## HAMID484

سلام به همه دوستان . این تاپیک خیلی بهم کمک کرد . واقعا ممنون.
دوستانی که میخوان خیلی سریع یک ایمیل ساده بفرستن میتونن از نمونه کد زیر استفاده کنن. 
در کد زیر من از جیمیل خودم واسه خودم ایمیل فرستادم  :گیج:  
        private void button1_Click(object sender, EventArgs e)
        {
            MailMessage mail = new MailMessage();
            mail.From = new MailAddress("hamid484@gmail.com");
            mail.To.Add("hamid484@gmail.com");
            mail.Subject = "salam";
            mail.Body ="khobi?";


            SmtpClient smtp = new SmtpClient("Smtp.gmail.com", 25);
            smtp.Credentials = new NetworkCredential("hamid484@gmail.com", "رمز عبور");
            smtp.EnableSsl = true;
            smtp.Send(mail);
           
        }


یک نکته خیلی مهم که حتما بهش توجه باید کرد نوشتن این کد هست smtp.EnableSsl = true که باعث میشه برخی از خطاها ایجاد نشه.
همین یک خط کد کار منو راه انداخت

----------


## BARNAMEHAYEMAN

سلام ممنون از مطلبتون
دوست عزیز در این کد ارسال کننده و دریافت کننده یکی هست ؟نه؟
یه چیز دیگه این به چه معنایی هست؟
SmtpClient smtp = new SmtpClient("Smtp.gmail.com", 25);
و این ک اگر در برنامه erorr به وجود بیاد این قسمت رو لو میده و پسورد لو میره نه ؟

----------


## fardin_esmi

آقا بابک خالدیان ، انصافا دمت گرم. با این مقاله خیلی حال کردم.
موفق باشی.

----------


## S.ahmad.mirzai

با تشکر از زحمات شما عزیزان
بنده به یه مشکل عجیب برخوردم اونم این که با استفاده ازSMTP ClIENT ایمیل ارسال می کنم و برای آدرس های Gmail ارسال میشه ولی برای آدرس های Yahoo ایمل ارسال نمیشه
میشه کمکم کنید
با تشکر

----------


## S.ahmad.mirzai

بر عکس شما  واسه من برای Gmail ارسال میشه ولی برای Yahoo ارسال نمی شه
;-)

----------

