PDA

View Full Version : مقاله::مرجع کامل ارسال ایمیل در دات نت 2



babi_wd
شنبه 09 تیر 1386, 03:38 صبح
با سلام
مقاله ای که ارائه داده شده است حاصل ساعتها جستجو،مطالعه و ترجمه میباشد
و با توجه به نبود یک منبع کامل چه به صورت فارسی و چه به صورت انگلیسی در مورد ارسال ایمیل در دات نت 2 و استفاده برنامه نویسان از تکنیک های دات نت 1،امیدوارم این مجموعه حسن ختامی بر تمام سردرگمی های ارسال ایمیل در دات نت 2 باشد
امیدوارم این مقاله به عنوان مرجعی کامل،مشکل گشای برنامه نویسان فارسی زبان باشد
توجه:کلیه حقوق این مقاله متعلق به سایت DotNetSource.Com (http://www.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/smtp2000/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://babakh.persiangig.com/image/Tbl_1.jpg

توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/library/system.net.mail.mailmessage.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
شنبه 09 تیر 1386, 10:55 صبح
بنظر شما ، این که با این روش میشه به راحتی با آدرس ایمیل دیگران اقدام به ارسال ایمیل نمود، یک ضعف فاحش نیست.

peymannaji
شنبه 09 تیر 1386, 11:16 صبح
سلام دوست عزیز با سپاس از زحمت جنابعالی بخاطر تهیه مقاله ارزشمندتون ...

azmoodeh
شنبه 09 تیر 1386, 12:48 عصر
بنظر شما ، این که با این روش میشه به راحتی با آدرس ایمیل دیگران اقدام به ارسال ایمیل نمود، یک ضعف فاحش نیست.

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

babi_wd
شنبه 09 تیر 1386, 15:21 عصر
بخش دوم

کلاس MailAddress:

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


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


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


http://babakh.persiangig.com/image/Tbl_2.jpg

توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/library/system.net.mail.mailaddress.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("windows-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/library/system.net.mail.attachment.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
یک شنبه 10 تیر 1386, 00:45 صبح
بخش سوم

کلاس SmtpClient:

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


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


http://babakh.persiangig.com/image/Tbl_3.jpg

توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/library/system.net.mail.smtpclient.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) وجود دارد
پس از این دستور با پیغامی شبیه پیغام زیر مواجه میشوید


http://babakh.persiangig.com/image/Email_1.jpg

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



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

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

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


Auth login


http://babakh.persiangig.com/image/Email_3.jpg


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


http://babakh.persiangig.com/image/Email_3.jpg

پایان بخش سوم

babi_wd
یک شنبه 10 تیر 1386, 00:53 صبح
من برای این مقاله خیلی زحمت کشیدم
از استقبال کم دوستان که نه نظر دادن نه تشکر کردن دل سرد شدم
شاید به درد کسی نمیخوره؟!!
یا به خاطر ...

javad3151
یک شنبه 10 تیر 1386, 09:37 صبح
نه داداش ، خیلی ها از این مقاله شما استفاده می کنند و خواهند کرد
دمت گرم ، ادامه بده

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

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

babi_wd
دوشنبه 11 تیر 1386, 15:48 عصر
بخش چهارم


کلاس Alternate View:

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

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


http://babakh.persiangig.com/image/Tbl_4.jpg

توضیحات تکمیلی در
http://msdn2.microsoft.com/en-us/library/system.net.mail.alternateview.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>this 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>this 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/library/system.net.mail.linkedresource.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
دوشنبه 11 تیر 1386, 21:19 عصر
سلامخسته نباشید.دستون درد نکندمن میخواستم بدونم چگونه میشود این نمونه کدها را بر روی سیستم خودم امتحان کنم.مثلا میل ها به یک پوشه بر روی سیستم فرستاده شود.؟و نیاز نباشد که برنامه روی سرور امتحان شود.؟اگر با یک نمونه کد توضیح داده شود ممنون میشوم.

babi_wd
دوشنبه 11 تیر 1386, 21:58 عصر
سلامخسته نباشید.دستون درد نکند
ممنونم


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

fereshte22
دوشنبه 11 تیر 1386, 23:02 عصر
توی iis یک Default SMTP Virtual Server وجود دارد.چیز دیگری باید نصب کنیم؟چگونه؟
مثلا من کد زیر را امتحان میکنم


Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim mail As New 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 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)
End Sub


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

babi_wd
سه شنبه 12 تیر 1386, 00:36 صبح
خوب پست قبلم رو تصحیح میکنم و فکر میکنم این بهتر باشه
میتونید ایمیل ها رو به خود 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
سه شنبه 12 تیر 1386, 10:20 صبح
دوست من همیشه سعی کن به خاطر خدا ودر راه اون علمتو در اختیار دیگران قرار بدی ...

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

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


موفق باشی..

babi_wd
سه شنبه 12 تیر 1386, 15:40 عصر
دوست من همیشه سعی کن به خاطر خدا ودر راه اون علمتو در اختیار دیگران قرار بدی ...
اگه اینطور نبود و انگیزه ای جز کمک به بقیه نداشتم اینجا ارائه نمیدادم
و مقاله رو برای خودم نگه میداشتم
چون هدف اولیه من یاد گیری خودم بوده،و خواستم دیگران هم بهره ای ببرن


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

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


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

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

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


موفق باشی..

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

babi_wd
چهارشنبه 13 تیر 1386, 16:22 عصر
بخش پنجم

تنظیم اولویت (Priority) ایمیل:

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


http://babakh.persiangig.com/image/Tbl_5.jpg

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



[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:


http://babakh.persiangig.com/image/Email_4.jpg

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

babi_wd
یک شنبه 17 تیر 1386, 23:27 عصر
بخش پایانی


پیکر بندی 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
دوشنبه 01 مرداد 1386, 22:59 عصر
کاشکی علم اونقدر پیشرفت کرده بود که از تو اینترنت می تونستم بپرم و بغلت کنم و دستتو ببوسم که همچین مطلبی رو جمع آوری و ترجمه کردی. واقعا دستت درد نکنه. خسته نباشی عزیز

hamid_isf_1360
دوشنبه 30 مهر 1386, 03:04 صبح
آقا واقعا عالی بود دستت درد نکه
خدا به وقتت برکت بده

smirabolg
دوشنبه 30 مهر 1386, 09:59 صبح
من لم یشکر الخالق لم یشکر المخلوق

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

na3er-faraji
دوشنبه 30 مهر 1386, 10:00 صبح
واقعا جالب بود . تا به حال مقاله ای به این کاملی در مورد ارسال ایمیل ندیده بودم . خواهشا در پایان به صورت pdf قرار بدید چون به درد خیلی ها میخوره . بازم تشکر

سید مسعود موحد
دوشنبه 30 مهر 1386, 11:47 صبح
آقا خیلی عالی بود به قول دوستمون اگر pdf هم بکنید و قرا بدهید روی سایت برای دانلود که عالی میشود

JackJumper.Net
سه شنبه 15 آبان 1386, 01:24 صبح
سلام، خسته نباشید.

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

kamvah
چهارشنبه 19 دی 1386, 16:15 عصر
آیا این امکان وجود دارد که از کامپیوتر کاربر فایلی در ایمیل Attach شود بدون اینکه از کامپوننت (component) , انتخاب فایل<INPUT> استفاده شود؟

DotNet_King
پنج شنبه 20 دی 1386, 23:05 عصر
سلام، خسته نباشید.

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

آقای راد راجع به این موضوع توضیح کاملی نوشتند.
می تونید به این آدرس رجوع کنید
http://barnamenevis.org/forum/showthread.php?t=83592&highlight=ip+dedicate&page=3
متاسفانه ip dedicate می خواد که پولیه!!

DotNet_King
پنج شنبه 20 دی 1386, 23:17 عصر
قبل از هر چیز لازم می دونم بابت این مقاله تون از شما تشکر کنم. واقعا یه رفرنس بی نظیره!
همچنین خدمت اون دوستانی که کم لطفی کردن باید عرض کنم! که تشکر اینترنتی اونقدر ارزش نداره که یه نفر این همه متن رو ترجمه کنه ! شما لطف داشتید که این مطالب رو، جمع آوری کردید و اینجا گذاشتید تا بقیه ازش استفاده کنند.:تشویق:




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



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

manitack
شنبه 22 دی 1386, 20:19 عصر
کارتون عالی بود :تشویق::تشویق::تشویق:
امیدوارم مدیران محترم رتبه بالایی به این تاپیک بدن و حتی اون رو در بخش ویژه قرار بدن. عده زیادی از کاربران با دیدن این تاپیک کامل سورپرایز (خوشبحال) میشند.:کف:

shahabm58
یک شنبه 23 دی 1386, 17:06 عصر
با تشکر از زحمات شما بابت این مقاله ارزشمند .
یک نکته ای که باقی ماند اینکه ما اگر بخواهیم یک میل به شکل خبر نامه بفرستیم چگونه عمل کنیم .

babi_wd
یک شنبه 23 دی 1386, 22:55 عصر
از لطف تمام دوستان کمال تشکر رو دارم.


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

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

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

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

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


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

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


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



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


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


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

Behrouz_Rad
یک شنبه 23 دی 1386, 23:24 عصر
تا اونجا که سواد ما میرسه نه.مگه آقای راد راه حلی داشته باشن
نه بابک جان. امکانش وجود نداره.

scorpion_man
دوشنبه 24 دی 1386, 03:51 صبح
با سلام به همه دوستان
آقا واقعا عالی بود واقعیتش من چند ساله دارم از سایتا با کد ایمیل میزنم ولی تا حالا تا این حد وارد کلاسش نشده بودم واقعا دستت درد نکنه خیلی خیلی آموزنده بود خیلی استفاده کردم
موفق و پیروز باشید

Arian_61
سه شنبه 02 بهمن 1386, 10:55 صبح
سلام
من هم به نوبه خودم لازم می دونم از زحمتی که کشیدید تشکر و قدردانی کنم.
خیلی عالی بود به قول دوستمون اگر pdf هم بکنید و قرا بدهید روی سایت برای دانلود که عالی میشود
موفق باشید

mahdi_farhani
سه شنبه 02 بهمن 1386, 18:24 عصر
با اینکه دیر رسیدم ، ولی خوب اینم خودش یه جور تشکره . مطالب آموزش خالدی به صورت PDF

araz_pashazadeh
یک شنبه 12 اسفند 1386, 21:44 عصر
با عرض سلام و خسته نباشید...
واقعا دست شما درد نکنن مقله خیلی عالی بود.
من مقاله شما را خواندم و از این قسمتش که گفتن می تونم بدون اتصال به انترنت ایمیل بفرستم واقعا تعجب کردم چطور ممکن؟
اگه امکانش هست در این مورد هم توضیح بدین.
من این کارو کردم ولی نشد شما گفته بودین که اگر ایمیل درست ارسال بشه باید داخل این مسیر باشه 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.PickupDirec toryFromIis;
smtp.Send(mail);
}
}
ممنون میشم اگه راهنماییم کنید

babi_wd
یک شنبه 12 اسفند 1386, 22:42 عصر
سلام
کد هاتون بین تگ کد نیست.چیزی ازش نمی فهمم
مشکلی نیست.چون ایمیل شما ارسال نمیشه.به این پوشه انتقال داده میشه تا در اولین زمان ممکن اونارو بفرسته.شما از همین پوشه ایمیل هاتون رو دنبال کنید.
در ضمن این مورد برای تمرین ذکر شده

araz_pashazadeh
دوشنبه 13 اسفند 1386, 14:35 عصر
ممنون از لطفتون کدها مو این با ر به صورت کامل تر می زارم

c#_web
سه شنبه 14 اسفند 1386, 08:29 صبح
من هم ایمیلهایم به پوشه queue میرود. علت چیست ؟
برای اینکه حتماً ایمیل به گیرنده برسد چه کار بکنم؟
آیا خطا از برنامه نویسی است یا علتهای دیگری دارد ؟
اگر به حالت عادی (smtp.Send(mail را بزنم خطای failure to send email را میدهد.
من باید در برنامه ام حتماً خروجی اش را ببینم چون کارفرما باید نتیجه عملی آنرا ببیند. لطفاً راهنمایی کنید چه کار کنم؟
ممنون.

babi_wd
سه شنبه 14 اسفند 1386, 23:10 عصر
من هم ایمیلهایم به پوشه queue میرود. علت چیست ؟
توضیح دادم که.این روش یه جور تست خروجیه.


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

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

اگر به حالت عادی (smtp.Send(mail را بزنم خطای failure to send email را میدهد.
خوب،یعنی میل سروری نداره که ایمیل رو بفرسته.یا هر نوع ایرادی که تو ارسال ایمیل باشه


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

c#_web
چهارشنبه 15 اسفند 1386, 11:25 صبح
من مشخصات smtp را روی سیستم خودم ست کرده ام . اما این خطا را داده . نمیدانم چه اطلاعات دیگری باید وارد کنم؟
اگر در شرکتی که کار میکنم بخواهم از سرور آنها استفاده کنم ، mail server را در کجا باید صدا بزنم یا در کدهایم در کجا و آدرس چه چیزی را باید بنویسم؟

babi_wd
چهارشنبه 15 اسفند 1386, 19:58 عصر
من مشخصات smtp را روی سیستم خودم ست کرده ام . اما این خطا را داده . نمیدانم چه اطلاعات دیگری باید وارد کنم؟
اگر در شرکتی که کار میکنم بخواهم از سرور آنها استفاده کنم ، mail server را در کجا باید صدا بزنم یا در کدهایم در کجا و آدرس چه چیزی را باید بنویسم؟
1)مقاله رو به دقت بخونید
2)اطلاعات خودتون رو کمی بیشتر کنید

rezarafiee
چهارشنبه 08 خرداد 1387, 16:28 عصر
با نوشتن کد زیر برای ارسال ایمیل
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
چهارشنبه 08 خرداد 1387, 18:23 عصر
مشکل از آنتی ویروس بود که با غیرفعال کردن آن مساله حل شد

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

babi_wd
شنبه 11 خرداد 1387, 22:24 عصر
بله.این کارم میتونی بکنی.
بخونی و به کالکشن اضافه کنی

gheysar14
یک شنبه 12 خرداد 1387, 16:35 عصر
بله.این کارم میتونی بکنی.
بخونی و به کالکشن اضافه کنی

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




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
یک شنبه 12 خرداد 1387, 16:50 عصر
حالا من یه مشکلی دارم و اونم اینه که ایمیل افرادی که در دیتابیس من قرار دارند از mailserver های مختلفی هست و موقع فرستادن میل با error های مختلفی روبرو میشم. مثل Mailbox Unavailable یا Timeout Operation . به نظر دوستان مشکل از چی میتونه باشه؟

gheysar14
دوشنبه 13 خرداد 1387, 17:32 عصر
مشکل spam در ارسال ایمیل چی جوری حل میشه؟ ):

kezack
جمعه 17 خرداد 1387, 12:22 عصر
:گریه:با سلام من کد زیر را در صفحه ای داخل سایتی نوشتم و آپلود کردم ولی با یک خطا مواجه
شدم لطفا کمکم کنید.
اینم کد برنامه ام
************************************************** **********
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/configuration/sendusing"]
= 2;
objmail.Fields
["http://schemas.microsoft.com/cdo/configuration/smtpserverport"] = 25;
objmail.Fields
["http://schemas.microsoft.com/cdo/configuration/smtpauthenticate"] = 1;
objmail.Fields
["http://schemas.microsoft.com/cdo/configuration/sendusername"] =
System.Configuration.ConfigurationSettings.AppSett ings["SMTPusername"];
objmail.Fields
["http://schemas.microsoft.com/cdo/configuration/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/configuration/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
شنبه 18 خرداد 1387, 14:00 عصر
با سلام خدمت دوستان گرامی و تشکر فراوان بابت این مطلب بسیار مفید
من از قطعه کد زیر برای ارسال ایمیل استفاده می کنم:


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
شنبه 18 خرداد 1387, 17:36 عصر
بنظر شما ، این که با این روش میشه به راحتی با آدرس ایمیل دیگران اقدام به ارسال ایمیل نمود، یک ضعف فاحش نیست.

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

shahroozj
سه شنبه 04 تیر 1387, 15:38 عصر
سلام
با تشكر از تمامي دوستاني كه زحمت كشيدن و اين تاپيك را ايجاد كردن مخصوصا از babak خان عزيز
مي خواستم بدونم آيا نحوه استفاده از pop3 در دات نت را هم به اين واضحي و شفافي داريد ؟ اگر زحمتي نيست امكانش هست كه اينجا بگذاريد ؟
با تشكر و خسته نباشيد

یک برنامه نویس
پنج شنبه 24 مرداد 1387, 13:23 عصر
من برای این مقاله خیلی زحمت کشیدم
از استقبال کم دوستان که نه نظر دادن نه تشکر کردن دل سرد شدم
شاید به درد کسی نمیخوره؟!!
یا به خاطر ...

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

ASKaffash
شنبه 02 شهریور 1387, 12:17 عصر
من برای این مقاله خیلی زحمت کشیدم
از استقبال کم دوستان که نه نظر دادن نه تشکر کردن دل سرد شدم
شاید به درد کسی نمیخوره؟!!
یا به خاطر ...

سلام
بابت زحمات جنابعالی تشکر ویژه می کنم انشاالله همیشه موفق باشید.
من همه کارهائی که در مقاله گفته اید را در سورس ذیل انجام داده ام ولی خطای غیر امن بودن ارتباط را میدهد بنظر شما مشکل کجاست :
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 = new MailAddress("A@gmail.Com", "Mr A");
MailAddress To = new MailAddress("B@C.Com", "Mr B");
MailMessage MM = new MailMessage(From, To);
MM.Subject = "Subject ...";
MM.Body = "Body ...";
MM.Attachments.Add(new Attachment(@"C:\FileName.txt"));
SmtpClient Smtp = new SmtpClient("Smtp.gmail.Com", 25);
Smtp.Credentials = new NetworkCredential("A@gmail.Com", "******");
Smtp.Send(MM);

ASKaffash
شنبه 02 شهریور 1387, 14:09 عصر
خودم جوابش رو پیدا کردم این دوخط را کم دارد :


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

mzarmehri
دوشنبه 22 مهر 1387, 19:29 عصر
با سلام:
من از كد شما استفاده كردم ولي خطاي زير را مي دهد مي شه راهنماييم كنيد :
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
دوشنبه 18 آذر 1387, 12:16 عصر
سلام
از شما بخاطر مقاله خوبتون تشکر می کنم
اگر ممکنه یک صفحه که بوسیله اون بشه میلی فرستاد همرا با CC و ... به عنوان ضمیمه قرار بدهید

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

babi_wd
دوشنبه 18 آذر 1387, 23:16 عصر
سلام
از شما بخاطر مقاله خوبتون تشکر می کنم
اگر ممکنه یک صفحه که بوسیله اون بشه میلی فرستاد همرا با CC و ... به عنوان ضمیمه قرار بدهید

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


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

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

msadgd
سه شنبه 19 آذر 1387, 11:25 صبح
سلام. عيد همگي مبارك.
بابك جان از لطفت ممنونم.
ايميلها به گوگل سريع ارسال ميشه (حداكثر 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
سه شنبه 19 آذر 1387, 16:48 عصر
dim email as string=textbox1.text
mail.to.add("'" & email & "'")



وقتی متغیرت از جنس string هست و آرگومان تابع add هم همینطور، اینا رو برای چی گذاشتی؟

babi_wd
پنج شنبه 21 آذر 1387, 00:23 صبح
لطفا راه حل های جلوگیری از اسپم شدن رو طبق تجربه خودتون بگید.در یاهو بیشتر!!!

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

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

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

m1vahid
دوشنبه 25 آذر 1387, 00:04 صبح
سلام به همگی
دست همتون درد نکنه کارتون درسته
آقا بابک دستت درد نکنه انشاال... موفق بشی

Saber_Fatholahi
دوشنبه 25 آذر 1387, 11:25 صبح
لطفا راه حل های جلوگیری از اسپم شدن رو طبق تجربه خودتون بگید.در یاهو بیشتر!!!
دوست عزیز اگه اجازه بدین با اجازه آقا بابک گل منم یه تجربه کوچولو دارم میگم امیدوارم کاربردی باشه
من حالتی رو امتحان کردم که اسپم نشد اینکه در واقع آدرس ایمیل فرستنده همون آدرس کاربر اصلی سایت بود که از میل سرور استفاده می کرد مثلا info@schoolfarhang.com اما زمانی که این ایمیل تغییر دادم و در واقع نوعی ایمیل اشتباهی می شد و ایمیل ارسالی اسپم می شد

cemohsen
پنج شنبه 28 آذر 1387, 21:41 عصر
با سلام
اول از زحمات دوست عزیزمون که این مقاله کامل رو آماده کردن تشکر می کنم و براشون آرزوی موفقیت دارم
من خودم این مشکل رو داشتم و خیلی توی اینترنت دنبال مطالب خوب گشتم و خوشبختانه توی سایت های 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
جمعه 29 آذر 1387, 00:24 صبح
میل رو ارسال کردم بیشتر از24 ساعت طول کشید
باید مشکلو پیدا کنی ، چون من اصلاً همچین مشکلی ندارم ، و همیشه میلهام به inbox میره

Himalaya
یک شنبه 15 دی 1387, 13:54 عصر
سلام...فرض کنید من تو درایو 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
یک شنبه 30 فروردین 1388, 11:48 صبح
چطوری میشه عکس رو در قالب متن(body) میل ارسال کرد؟
با استفاده از Fck editor به عنئان editor body
ممنون

taghi.km
دوشنبه 31 فروردین 1388, 12:55 عصر
با تشکر از مطالب مفیدتون :تشویق:

علیرضا مداح
شنبه 05 اردیبهشت 1388, 17:26 عصر
سلام دوست عزیز،
پیشنهاد می کنم ویدئوی جناب Chris Pels را در این خصوص مشاهده نمایید:
[How Do I:] Use ASP.NET to Send Email from a Web Site (http://www.asp.net/learn/videos/video-416.aspx)
،/

Jafar Mohammadi
دوشنبه 04 خرداد 1388, 19:56 عصر
سلام
ضمن تشکر از دوست عزیزمون به خاطر مطلب مفیدشون، من در انجام یه پروژه با مشکل برخوردم که به شکل زیر هست:
من با 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
دوشنبه 04 خرداد 1388, 21:22 عصر
با عرض سلام
آقا با وجود اینکه هنوز مقاله شما رو نخوندم لازم دیدم که به این با تمام وجود
این کار شما رو ارج بنهم واز شما تشکر کنم
ان شاالله به حق فاطمه (س) همیشه موفق باشی

sina_daneshjo
دوشنبه 04 خرداد 1388, 23:51 عصر
عالی و کاملا پیشرفته شامل بسیاری از مطالب حرفه ای مورد نیاز
همگی موفق باشید

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

من با برنامه FastEmail (http://fastemail.ir) کار میکنم ولی به دلیل مشکلاتی که دارد خواستم خودم بنویسم.

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

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

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

persianspam
یک شنبه 11 مرداد 1388, 11:57 صبح
جوابش رو گیر آوردم دوستان. ممنون

VB.NET2005
یک شنبه 11 مرداد 1388, 14:11 عصر
پیشنهاد میکنم با این کار کنید :



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

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

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

ali.akhbary
شنبه 24 مرداد 1388, 21:27 عصر
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
شنبه 24 مرداد 1388, 22:09 عصر
دوستان من در رابطه با ارسال ایمیل یه مشکل عجیب دارم
ایمیل به یاهو ارسال میشه اما به gmail ارسال نمیشه
کسی می تونه کمکم کنه
کدا رو چندین بار بررسی کردم اما مشکلی نداره .اگه مشکل داشت یه یاهو هم نمی فرستاد
:عصبانی++:

ali.akhbary
شنبه 31 مرداد 1388, 10:56 صبح
دوستان من در رابطه با ارسال ایمیل یه مشکل عجیب دارم
ایمیل به یاهو ارسال میشه اما به gmail ارسال نمیشه
کسی می تونه کمکم کنه
کدا رو چندین بار بررسی کردم اما مشکلی نداره .اگه مشکل داشت یه یاهو هم نمی فرستاد
:عصبانی++:

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

Saber_Fatholahi
پنج شنبه 05 شهریور 1388, 14:43 عصر
سلام
دوستان من مقاله جناب خالدیان به صورت PDF در این آدرس قرار دادم اگه دوست داشتین دانلود کنین
امیدوارم بدرد بخوره
ارسال ایمیل در دات نت 2.0 (http://www.payawebshomal.com/ArticleDetails.aspx?ArticleID=20)

mzosan817
شنبه 21 شهریور 1388, 13:09 عصر
من از اين کد براي ارسال ايميل استفاده مي کنم ولي خطا ميده:عصبانی:
خيلي وقته درگيرشم ممنون ميشم کمکم کنيد:عصبانی++:
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
شنبه 21 شهریور 1388, 15:37 عصر
پس user و pass کو؟

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

amirsajjadi
شنبه 21 شهریور 1388, 19:49 عصر
http://barnamenevis.org/forum/showpost.php?p=802229&postcount=3

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

melika#malek
یک شنبه 29 شهریور 1388, 00:47 صبح
سلام
babi_wd عزیز لطف می کنید قسمت Attachment رو برای من بطور کامل حتی با نام یک سرور میل داخلش بگذارین. یه طوریکه واقعاً بشه بدون هیچ تغییری در کد با این کد ایمیل فرستاد.
بهش نیاز فوری دارم ولی هر کدی رو نوشتم جواب نمیده.
با تشکر فراوان از شما...

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

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

sr_Hosseini
جمعه 08 آبان 1388, 17:38 عصر
با سلام و ضمن تشکر از دوستان سوالی داشتم
می خوام کاربران ایمیل در سایتم بتونن اکانت ایجاد کنن ! یعنی به کدی نیاز دارم که با میل سرور ارتباط برقرار کنه و اکانت جدید ایجاد کنه. با این توضیح که از hmailServer استفاده میکنم.

قبلاً از همکاری دوستان سپاسگذارم.

ali.akhbary
سه شنبه 19 آبان 1388, 08:41 صبح
با سلام و ضمن تشکر از دوستان سوالی داشتم
می خوام کاربران ایمیل در سایتم بتونن اکانت ایجاد کنن ! یعنی به کدی نیاز دارم که با میل سرور ارتباط برقرار کنه و اکانت جدید ایجاد کنه. با این توضیح که از hmailServer استفاده میکنم.

قبلاً از همکاری دوستان سپاسگذارم.


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

SAMARE
چهارشنبه 27 آبان 1388, 14:43 عصر
سلام دوستان عزیز
کد مربوط به دریافت ایمیل در asp.net رو کسی داره؟؟؟

SAMARE
چهارشنبه 27 آبان 1388, 19:42 عصر
كسي نيست؟؟؟

shocraneh
جمعه 29 آبان 1388, 01:58 صبح
چند تا سوال
smtp آیا ip ای که از طریق هاست بهش می رسیم
این جوری فهمیدم که user و pass خودمونو باید بهش بدیم آخه پسورد خودمونو چرا؟؟ غیر منطقیه

Alghoochi
جمعه 29 آبان 1388, 11:01 صبح
چند تا سوال
smtp آیا ip ای که از طریق هاست بهش می رسیم
این جوری فهمیدم که user و pass خودمونو باید بهش بدیم آخه پسورد خودمونو چرا؟؟ غیر منطقیه
smtp آدرسی ایه که شما باید برای ارسال ایمیل از اون استفاده کنید. مثلا smtp گوگل smtp.gmail.com
اگه بدون یوزر و پسورد میشد ایمیل فرستاد هرکسی می تونست از پهنای باند سایت شما استفاده کنه و ایمیل بفرسته

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

Saber_Fatholahi
شنبه 30 آبان 1388, 13:00 عصر
میل من رو yahoo فرقی نمی کنه smtp مال yahoo باشه یا gmail ( yahoo:smtp.yahoo.comاست ؟؟؟
ولی آخه من مقاله رو که خوندم این جوری متوجه شدم که بستکی به هاستی داره که ازش استفاده می کنی و دوستمون راهحل هم برای رسیدن به اون ip ارائه داده بود ؟؟؟
بابت پسورد منظورم اینه که پسورد میل خودم رو بهش بدم یا این پسورد مربوط به یه چیز دیگه میشه ؟؟
با تشکر فراوان
دوست عزیز شما روی میل سرور خودت یه ایمیل میسازی مثلا info@yoursite.com , کلمه عبور شما هم میدین 12345
حالا فقط کافیه واسه یوزر و پسورد اونهاو وارد کنین + نام میل سرور شما یا ادرس ip مربوطه
موفق باشید

hobab-theme
جمعه 11 دی 1388, 02:23 صبح
با تنظیم یک باره آنها در 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
جمعه 11 دی 1388, 12:08 عصر
گلم خودش اتوماتیک ازینا میخونه

hobab-theme
دوشنبه 14 دی 1388, 10:31 صبح
گلم خودش اتوماتیک ازینا میخونه
ممنون
آیا منظور شما اینه که جای یوزر و پسورد رو تو صفحه خالی بزاریم ؟
من این کار رو کردم ولی عمل نمی کنه
میشه لطفاً یه نمونه بذارید ؟
بازم ممنون

Saber_Fatholahi
دوشنبه 14 دی 1388, 12:00 عصر
عزیز توی کدوم صفحه؟ لطفا واضحتر بگو تا واست توضیحات کافی بدم

hobab-theme
دوشنبه 14 دی 1388, 14:41 عصر
توی صفحه محتوا
این قسمت

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
سه شنبه 15 دی 1388, 10:59 صبح
سلام دوست من اگه این دو خط

Dim perm As New System.Net.NetworkCredential("Username", "password")
smtp.Credentials = perm

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

saeidcd
یک شنبه 02 اسفند 1388, 14:58 عصر
http://barnamenevis.org/forum/showthread.php?p=915094#post915094

SAMARE
دوشنبه 03 اسفند 1388, 14:08 عصر
ازتون بابت مقاله كاملتون ممنونم
يه سوال داشتم براي اينكه ايميل ارسالي حتما وارد اينباكس بشه كسي راه حلي نداره؟؟؟

AhoO-sh
سه شنبه 31 فروردین 1389, 15:13 عصر
سلام
خواهش میکنم کمک کنید
خیلی وقته که درگیر این موضوعم و وقتم هم داره تموم میشه:عصبانی++:

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



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
سه شنبه 31 فروردین 1389, 16:32 عصر
من با این کد موفق به ارسال ایمیل شدم


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
شنبه 12 تیر 1389, 09:32 صبح
سلام و خسته نباشید
من کدهای فوق را به شکل زیر استفاده کردم



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
چهارشنبه 06 مرداد 1389, 01:51 صبح
سلام.

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

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

moein_sql
چهارشنبه 06 مرداد 1389, 02:20 صبح
سلام فهميدم اينطوري :




public void SendMail(string to, string from, string subject, string filename, bool ishtml,Control owrer)
{
//define mail var
MailMessage mail = new MailMessage();
MailDefinition md = new MailDefinition();
ListDictionary replacements = new ListDictionary();
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 = new SmtpClient("_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
چهارشنبه 06 مرداد 1389, 02:22 صبح
ضمنا فضاي نام System.Collections.Specialized را هم اضافه كنيد.

pbm_soy
شنبه 22 آبان 1389, 16:53 عصر
سلام

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

khoshsirat
شنبه 22 آبان 1389, 18:54 عصر
سلام
کسی میدونه توی داتنت 4 چطور میشه ایمیل فارسی فرستاد
البته ارسال توسط کنترلهای PasswordRecovery و CreateUserWizard که ایمیل رو اتوماتیک میفرستند
منظورم اینه که توی MailDefinition اون فایل BodyFileName باید چطور باشه؟؟؟ :متفکر:
لطفا هرکی بلده کمک کنه
خیلی ممنون

farzad.valve
شنبه 14 خرداد 1390, 11:25 صبح
سلام
کسی میدونه توی داتنت 4 چطور میشه ایمیل فارسی فرستاد
البته ارسال توسط کنترلهای PasswordRecovery و CreateUserWizard که ایمیل رو اتوماتیک میفرستند
منظورم اینه که توی MailDefinition اون فایل BodyFileName باید چطور باشه؟؟؟ :متفکر:
لطفا هرکی بلده کمک کنه
خیلی ممنون
به توضیح صفحه اول مراجعه کن
فکر کنم با تلفیق Body و کد Mail.From بشه این کار رو کرد البته با کمی تغییر

محمد متاله
جمعه 03 تیر 1390, 02:23 صبح
روش صحیح کار را با کدهای #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 (yourmail@gmail.com)">
<network host="smtp.gmail.com" port="587" userName="yourmail@gmail.com (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
سه شنبه 15 شهریور 1390, 20:36 عصر
با تشكر از آقا بابك بابت لطفي كه به همه علاقه منداي برنامه نويسي كرده.
من تمام اين مطالب رو متوجه شدم و جواب هم گرفتم ولي يه سوال كه برام گنگ مونده:
من يه سايت دارم كه ميخوام به بازديد كننده اجازه بدم بهم 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
شنبه 02 مهر 1390, 17:33 عصر
سلام
خیلی ممنونم از مقاله ی بسیار ارزشمند شما
من خیلی برنامه نویس خوبی نیستم لطفا کمکم کنین
من از کد های شما در 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
دوشنبه 04 مهر 1390, 18:58 عصر
مشکل رو پیدا کردم،مشکل شرکت اینترنتی ای هست که از آن خدمات می گیرم.پورت های 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
دوشنبه 14 آذر 1390, 01:26 صبح
دلیل استفاده از ip در این خط چیه؟
Dim smtp As New SmtpClient("127.0.0.1")
اگر یک توضیحی بدید که در سرور های مختلف این مقدار متفاوت هست و یا ثابته؟

saha_h2001
شنبه 19 آذر 1390, 01:47 صبح
با سلام
این آی پی یک مقدار ثابت بوده که سیستم را بصورت لوکال در نظر میگیرد

zh64zh64
سه شنبه 13 دی 1390, 13:12 عصر
دوست عزیز از اینکه زحمت تهیه این مقاله را کشیدیدواقعا سپاسگذارم

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

HAMID484
سه شنبه 08 اسفند 1391, 18:13 عصر
سلام به همه دوستان . این تاپیک خیلی بهم کمک کرد . واقعا ممنون.
دوستانی که میخوان خیلی سریع یک ایمیل ساده بفرستن میتونن از نمونه کد زیر استفاده کنن.
در کد زیر من از جیمیل خودم واسه خودم ایمیل فرستادم :گیج:
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
پنج شنبه 17 اسفند 1391, 23:50 عصر
سلام ممنون از مطلبتون
دوست عزیز در این کد ارسال کننده و دریافت کننده یکی هست ؟نه؟
یه چیز دیگه این به چه معنایی هست؟
SmtpClient smtp = new SmtpClient("Smtp.gmail.com", 25);
و این ک اگر در برنامه erorr به وجود بیاد این قسمت رو لو میده و پسورد لو میره نه ؟

fardin_esmi
جمعه 03 خرداد 1392, 16:16 عصر
آقا بابک خالدیان ، انصافا دمت گرم. با این مقاله خیلی حال کردم.
موفق باشی.

S.ahmad.mirzai
دوشنبه 21 مرداد 1392, 17:50 عصر
با تشکر از زحمات شما عزیزان
بنده به یه مشکل عجیب برخوردم اونم این که با استفاده ازSMTP ClIENT ایمیل ارسال می کنم و برای آدرس های Gmail ارسال میشه ولی برای آدرس های Yahoo ایمل ارسال نمیشه
میشه کمکم کنید
با تشکر

S.ahmad.mirzai
دوشنبه 21 مرداد 1392, 17:59 عصر
بر عکس شما واسه من برای Gmail ارسال میشه ولی برای Yahoo ارسال نمی شه
;-)