PDA

View Full Version : سوال: ارسال ایمیل از طریق برنامه



navid1n2000
چهارشنبه 07 اردیبهشت 1390, 10:49 صبح
سلام
من میخوام از طریق برنامه م ایمیل ارسال کنم
خیلی جستجو کردم اما به جایی نرسیدم
اگه میشه یه نمونه کار یا یه راه کار اساسی بدین

mostafa_golden
چهارشنبه 07 اردیبهشت 1390, 10:55 صبح
سلام
من میخوام از طریق برنامه م ایمیل ارسال کنم
خیلی جستجو کردم اما به جایی نرسیدم
اگه میشه یه نمونه کار یا یه راه کار اساسی بدین

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

نیما حتمی
چهارشنبه 07 اردیبهشت 1390, 11:11 صبح
با سلام این برنامه شما اررور زیرو می ده میشه راهنمایی کنید؟
69208

Amir Oveisi
چهارشنبه 07 اردیبهشت 1390, 11:18 صبح
از چه mail server ای برای ارسال email استفاده می کنید؟
ظاهرا mail server شما با https کار می کنه اما شما EnableSsl رو true نکردید.
این نمونه کد با استفاده از google mail server و gmail account ایمیل ارسال می کنه:
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress("gmail address", "company name");
mailMessage.To.Add("target email address");
mailMessage.Subject = "subject";
mailMessage.Body = "message";
mailMessage.IsBodyHtml = false;
NetworkCredential credential = new NetworkCredential("gmail address", "gmail password");
smtp.UseDefaultCredentials = false;
smtp.Credentials = credential;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Port = 587;
smtp.EnableSsl = true;

smtp.Host = "smtp.gmail.com";
smtp.Send(mailMessage);

اگر هم از mail server دیگه ای استفاده می کنید مقادیر لازم رو با توجه به config سرور خودتون تغییر بدید.
موفق باشید :)

navid1n2000
چهارشنبه 07 اردیبهشت 1390, 11:58 صبح
از چه mail server ای برای ارسال email استفاده می کنید؟
ظاهرا mail server شما با https کار می کنه اما شما EnableSsl رو true نکردید.
این نمونه کد با استفاده از google mail server و gmail account ایمیل ارسال می کنه:
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress("gmail address", "company name");
mailMessage.To.Add("target email address");
mailMessage.Subject = "subject";
mailMessage.Body = "message";
mailMessage.IsBodyHtml = false;
NetworkCredential credential = new NetworkCredential("gmail address", "gmail password");
smtp.UseDefaultCredentials = false;
smtp.Credentials = credential;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Port = 587;
smtp.EnableSsl = true;

smtp.Host = "smtp.gmail.com";
smtp.Send(mailMessage);

اگر هم از mail server دیگه ای استفاده می کنید مقادیر لازم رو با توجه به config سرور خودتون تغییر بدید.
موفق باشید :)

یعنی من همینو توی کد دکمه بنویسم حله؟؟؟؟؟؟؟

Amir Oveisi
چهارشنبه 07 اردیبهشت 1390, 12:23 عصر
اگر میخواید که با استفاده از gmail account اتون ایمیل بفرستید، بله
در غیر این صورت باید بر اساس تنظیمات mail server مورد نظرتون، مقادیری مثل port، host، credentials و ... رو تغییر بدید.
اما روش کلی ارسال ایمیل با پروتکل smtp به این شکل هست، همونطور که نمونه برنامه ای هم یکی از دوستان در پست های قبلی قرار دادند.

نیما حتمی
چهارشنبه 07 اردیبهشت 1390, 12:37 عصر
میشه بگین میل سرورچیه؟کجاست؟چطور تنظیمش کنم؟

navid1n2000
چهارشنبه 07 اردیبهشت 1390, 12:42 عصر
مثلا میل سرور یاهو اینه : smtp.yahoomail.com
یا gmail: smtp.gmail.com

نیما حتمی
چهارشنبه 07 اردیبهشت 1390, 12:48 عصر
نمی دونم چرا من نمی تونم میل ارسال کنم؟از ایمیل (gmail)استفاده می کنم ولی نمی شه/

navid1n2000
چهارشنبه 07 اردیبهشت 1390, 13:19 عصر
از چه mail server ای برای ارسال email استفاده می کنید؟
ظاهرا mail server شما با https کار می کنه اما شما EnableSsl رو true نکردید.
این نمونه کد با استفاده از google mail server و gmail account ایمیل ارسال می کنه:
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress("gmail address", "company name");
mailMessage.To.Add("target email address");
mailMessage.Subject = "subject";
mailMessage.Body = "message";
mailMessage.IsBodyHtml = false;
NetworkCredential credential = new NetworkCredential("gmail address", "gmail password");
smtp.UseDefaultCredentials = false;
smtp.Credentials = credential;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Port = 587;
smtp.EnableSsl = true;

smtp.Host = "smtp.gmail.com";
smtp.Send(mailMessage);

اگر هم از mail server دیگه ای استفاده می کنید مقادیر لازم رو با توجه به config سرور خودتون تغییر بدید.
موفق باشید :)

برا من این ارور رو میده :
ContextSwitchDeadlock was detected
Message: The CLR has been unable to transition from COM context 0x2086f0 to COM context 0x208860 for 60 seconds. The thread that owns the destination context/apartment is most likely either doing a non pumping wait or processing a very long running operation without pumping Windows messages. This situation generally has a negative performance impact and may even lead to the application becoming non responsive or memory usage accumulating continually over time. To avoid this problem, all single threaded apartment (STA) threads should use pumping wait primitives (such as CoWaitForMultipleHandles) and routinely pump messages during long running operations.
تورو خدا راهنمایی کنین
اینم کدمه :

System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(txtFrom.Text, "company name");
mailMessage.To.Add(txtTo.Text);
mailMessage.Subject = txtSubject.Text;
mailMessage.Body = txtBody.Text;
mailMessage.IsBodyHtml = false;
NetworkCredential credential = new NetworkCredential(txtUserName.Text, txtPassword.Text);
smtp.UseDefaultCredentials = false; smtp.Credentials = credential;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Port = int.Parse(txtHostPort.Text);
smtp.EnableSsl = true;
smtp.Host = comboBox1.Text;
smtp.Send(mailMessage);
MessageBox.Show("Mail Hass Been sent to:" + "\n " + maill.ToString());

Amir Oveisi
چهارشنبه 07 اردیبهشت 1390, 13:54 عصر
کدتون رو داخل تگ c# نذاشتین و من اصلا متوجه نشدم جی هست کدی که نوشتید.
پیشنهاد می کنم یک پروژه جدید بسازید و در اون این کدی که گذاشم رو تست کنید ببینید چه نتیجه ای میده.

Amir Oveisi
چهارشنبه 07 اردیبهشت 1390, 14:08 عصر
میشه بگین میل سرورچیه؟کجاست؟چطور تنظیمش کنم؟
میل سرور همونطور که از اسمش پیداست،سخت افزاری (معمولا یک کامپیوتر) هست که نقش mail transfer agent یا MTA رو داره (با استفاده از نرم افزار) و این امکان رو به شما میده که بتونین با پروتکل هایی که براش تعریف شده (مثل smpt) ایمیل ارسال یا دریافت کنید. حالا ممکنه host ای که شما خریداری کردید یا سرور ای که خودتون دارید، قابلیت mail server بودن رو داشته باشه. (مثلا ویندوز سرور 2008 قابلیت فعال کردن سرویس smpt رو داره) در اینصورت میتونید از سرور خودتون (یا سرور host تون) بعنوان mail server استفاده کنید. در غیر اینصورت میتونین از mail server های دیگه ای مثل yahoomail یا gmail و ... استفاده کنید و که رایگان هستند و یا از mail server های commercial استفاده کنید و بابتش هزینه بپردازید.
برای توضیحات بیشتر این مطلب رو بخونید لطفا:
http://en.wikipedia.org/wiki/Message_transfer_agent#cite_note-1

navid1n2000
چهارشنبه 07 اردیبهشت 1390, 15:10 عصر
try
{
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
MailMessage mailMessage = newMailMessage();
mailMessage.From = newMailAddress(txtFrom.Text, "company name");
mailMessage.To.Add(txtTo.Text);
mailMessage.Subject = txtSubject.Text;
mailMessage.Body = txtBody.Text;
mailMessage.IsBodyHtml = false;
NetworkCredential credential = newNetworkCredential(txtUserName.Text, txtPassword.Text);
smtp.UseDefaultCredentials = false; smtp.Credentials = credential;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Port = int.Parse(txtHostPort.Text);
smtp.EnableSsl = true;
smtp.Host = comboBox1.Text;
smtp.Send(mailMessage);
MessageBox.Show("Mail Hass Been sent to:" + "\n " + maill.ToString());
}
catch (Exception)
{
MessageBox.Show("Mail Hass Not Been sent to:" + "\n " + maill.ToString());
}

Amir Oveisi
پنج شنبه 08 اردیبهشت 1390, 10:03 صبح
یک پروژه جدید بسازید که کدهای دیگه ای تو برنامتون نباشه بعد این کد رو اونجا استفاده کنید ببینید چه نتیجه ای میده.

navid1n2000
شنبه 10 اردیبهشت 1390, 08:41 صبح
من توی اینجا میخوام از یه ایمیل یاهوو میل بفرستم، آیا این هاست درسته برای یاهوو: smtp.yahoo.com

navid1n2000
شنبه 10 اردیبهشت 1390, 09:36 صبح
من درست کردم
مشکل من با یاهوو بود که اون طوری که من فهمیدم نمیشه با یاهو فرستاد
با gmail حل شده
فقط در مورد ضمائم مشکل دارم
یه تکست باکس گذاشتم که براوس کنن فایلشونو و از این دستور استفاده می کنم :
maill.Attachments.Add(new Attachment(txtAtach.Text.Trim()));
اما ایمیل نمیره

niyaz4872
شنبه 10 اردیبهشت 1390, 11:02 صبح
این پی دی اف را بخوان

navid1n2000
یک شنبه 01 خرداد 1390, 21:15 عصر
مشکل من اینه که اینجایی که دارم برنامه می نویسم از یک isp میل سرور خریدن،و نمی دونم چه smtp port رو بذارم هم 25 رو امتحان کردم هم 587 رو اما کار نکرد،باید چکار کنم؟؟

Amir Oveisi
دوشنبه 02 خرداد 1390, 09:50 صبح
از mail server provider اتون درخواست کنید تا بهتون بگن

S.Reza
دوشنبه 02 خرداد 1390, 14:11 عصر
از چه mail server ای برای ارسال email استفاده می کنید؟
ظاهرا mail server شما با https کار می کنه اما شما EnableSsl رو true نکردید.
این نمونه کد با استفاده از google mail server و gmail account ایمیل ارسال می کنه:
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient();
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress("gmail address", "company name");
mailMessage.To.Add("target email address");
mailMessage.Subject = "subject";
mailMessage.Body = "message";
mailMessage.IsBodyHtml = false;
NetworkCredential credential = new NetworkCredential("gmail address", "gmail password");
smtp.UseDefaultCredentials = false;
smtp.Credentials = credential;
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Port = 587;
smtp.EnableSsl = true;

smtp.Host = "smtp.gmail.com";
smtp.Send(mailMessage);

اگر هم از mail server دیگه ای استفاده می کنید مقادیر لازم رو با توجه به config سرور خودتون تغییر بدید.
موفق باشید :)

سلام اقا امیر

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

ایا راه حلی وجود دارد که ما بتوانیم ایمیل های دریافتی رو از طریق نرم افزار بخوانیم ؟ لطفا اگر پی دی اف یا مرجعی در این مورد سراغ دارید معرفی بفرمائید

ممنون

haghft
دوشنبه 02 خرداد 1390, 18:01 عصر
برای یاهو از این آدرس باید استفاده کنی:smtp.mail.yahoo.com با پورت 587 بدون ssl
در مورد gmail: پورت 587 آدرس smtp.gmail.com گواهینامه ssl روشن اگه کار نکرد پورت های 25 و 26 رو امتحان کن.

S.Reza
سه شنبه 03 خرداد 1390, 14:57 عصر
سلام اقا امیر

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

ایا راه حلی وجود دارد که ما بتوانیم ایمیل های دریافتی رو از طریق نرم افزار بخوانیم ؟ لطفا اگر پی دی اف یا مرجعی در این مورد سراغ دارید معرفی بفرمائید

ممنون

کسی نیست پاسخ سوالم را بدهد

navid1n2000
سه شنبه 03 خرداد 1390, 20:50 عصر
از mail server provider اتون درخواست کنید تا بهتون بگن

بهمون میگن؟معمولا چنده؟

navid1n2000
سه شنبه 03 خرداد 1390, 20:52 عصر
برای یاهو از این آدرس باید استفاده کنی:smtp.mail.yahoo.com با پورت 587 بدون ssl
در مورد gmail: پورت 587 آدرس smtp.gmail.com گواهینامه ssl روشن اگه کار نکرد پورت های 25 و 26 رو امتحان کن.

برای ایمیل سرور هایی که از isp میگیرن چی؟؟؟؟؟؟
من 25 و 26 رو هم امتحان کردم
پورت یاهو هم کار نکرد،مثل اینکه پولیه
این ssl چطور خاموش یا روشن میشه؟

navid1n2000
سه شنبه 03 خرداد 1390, 21:13 عصر
برای یاهو از این آدرس باید استفاده کنی:smtp.mail.yahoo.com با پورت 587 بدون ssl
در مورد gmail: پورت 587 آدرس smtp.gmail.com گواهینامه ssl روشن اگه کار نکرد پورت های 25 و 26 رو امتحان کن.

من در مورد یاهو این روش شما رو پیاده کردم اما این پیامو داد : + Server does not support secure connections."}

haghft
سه شنبه 03 خرداد 1390, 21:24 عصر
من در مورد یاهو این روش شما رو پیاده کردم اما این پیامو داد : + Server does not support secure connections."}
خب گفتم که باید ssl خاموش باشه بدین نحو:
smtp.EnableSsl = false;
ایمیل هم میتونید بگیرید با استفاده از پروتکل های IMAP یا POP3 اون سرورها.

navid1n2000
سه شنبه 03 خرداد 1390, 23:16 عصر
وقتی دارم از اون ایمیل سرور که از یه isp خریدیم می زنم این پیامو میده :The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.0 <navidnikpey@aol.com>: Recipient address rejected: Authentication Required"
و وقتی ssl رو true می کنم اینو میگه : میگه که secure اشتباهه

navid1n2000
چهارشنبه 04 خرداد 1390, 12:16 عصر
مشکلمو چطور حل کنم؟؟؟؟؟؟؟؟؟؟؟

haghft
چهارشنبه 04 خرداد 1390, 13:31 عصر
شما از چه میل سروری داری استفاده میکنی؟

navid1n2000
چهارشنبه 04 خرداد 1390, 20:54 عصر
شما از چه میل سروری داری استفاده میکنی؟
دقیقا نپرسیدم
اما دامنه ش اسم وب سایت شرکتمونه : athena.ir@

misoft.ir
چهارشنبه 04 خرداد 1390, 23:26 عصر
سلام

در دو حالت رایجتر یا از جیمیل استفاده میکنند یا از یاهو میل.
برای هر دوتاشون هم مستندات کافی در سایت های تابعه این دو سرویس دهنده وجود داره. مثلا کافیه جستجو کنید : gmail smtp server
که در لحظه نوشتن این پست اولین لینک جستجو در گوگل لینک فوق هست.
http://mail.google.com/support/bin/answer.py?answer=13287
در این صفحه به زیبایی و در قالب یک جدول شماره پورت و اینکه آیا نیاز به SSL داره یا نه و نیز نام سرور رو نوشته.

راجع به فرستادن ایمیل:
فرستادن ایمیل در دات نت با استفاده از SMTP انجام میشه که یه مقاله در این رابطه در همین سایت هست که به دو زبان VB و سی شارپ همراه با مثال توضیح داده.

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

private void SendEmail(string Mailto, string Body, bool IsHtml)
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress("آدرس ایمیل شما", "نام شما یا شرکت شما یا هر چیز دیگه ای");
mail.Bcc.Add("آدرس ایمیل BCC که اختیاری هست");

mail.Subject = "موضوع ایمیل شما";
mail.BodyEncoding = System.Text.Encoding.UTF8;
mail.HeadersEncoding = System.Text.Encoding.UTF8;


mail.IsBodyHtml = IsHtml;
mail.Body = Body;
SmtpClient smtp = new SmtpClient("Smtp.gmail.Com", 587);
smtp.UseDefaultCredentials = false;
smtp.EnableSsl = true;
smtp.Credentials = new NetworkCredential("ایمیل شما", "رمز ایمیل شما");
object user_State = mail;
try
{
smtp.SendCompleted += new SendCompletedEventHandler(SmtpClient_OnCompleted);
smtp.SendAsync(mail, user_State);
}
catch (Exception ex)
{

}
}



غیر از اون مقاله ای که اشاره کردم کتاب "Apress.Visual.CSharp.2010.Recipes.A.Problem.Soluti on.Approach" میتونه خیلی مفید باشه.
صفحه 500 این کتاب راجع به فرستادن ایمیل هست. ضمن اینکه دوستانی که قصد ارسال ایمیل دارن، احتمالا نیاز به چک کردن اتصال اینترنت نیز دارند که در همین کتاب توضیح داده.

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

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

haghft
پنج شنبه 05 خرداد 1390, 09:21 صبح
دقیقا نپرسیدم
اما دامنه ش اسم وب سایت شرکتمونه : athena.ir@
خب شما اطلاعات مربوط به آدرس سرور و پورت و استفاده از ssl رو از مسئول مربوطه بپرسید.چون کانفیگ میل سرورها متفاوته شاید برای جلوگیری از اسپم اصلا از یه پورت دیگه استفاده میکنن.