PDA

View Full Version : سوال: مشکل در ارسال ایمیل همراه با فایل در جی میل The operation has timed out.



ostovarit
یک شنبه 04 مهر 1389, 18:04 عصر
سلام و خسته نباشید
من برای ارسال ایمیل از جی میل استفاده میکنم موقع ارسال ایمیل همراه attch فایل به ارور :
The operation has timed out. بر میخورم و عملیات ارسال متوقف میشود ... برای ارسال فایل های کوچک و کم حجم مشکلی ندارم ... ( کد درسته)

طبق تحقیقاتم جی میل تا حجم 25 مگ رو ساپورت میکنه :
http://mail.google.com/support/bin/answer.py?hl=en&answer=8770

چکار کنم این مشکل پیش نیاد و سرور بهم TimeOut نده ؟؟... من برای ارسال از پورت 587 و smtp.gmail.com استفاده میکنم ... با اکانت های به جز جی میل هم باز همین داستان هست ...

با تشکر

debugger
یک شنبه 04 مهر 1389, 19:27 عصر
سورستان را پیغام خصوصی برام بفرستید تا ویرایش کنم

behzadk
یک شنبه 04 مهر 1389, 21:14 عصر
با سلام
این مشکل از برنامه نویسی شما نیست این محدویت رو gmail خودش ایجاد کرده اما دقیقا نمی دونم برای ماست یا برای کلیه افراد در جهان با vpn تست کنی دقیق تر متوجه میشی
موفق باشی

ostovarit
یک شنبه 04 مهر 1389, 22:14 عصر
با سلام
این مشکل از برنامه نویسی شما نیست این محدویت رو gmail خودش ایجاد کرده اما دقیقا نمی دونم برای ماست یا برای کلیه افراد در جهان با vpn تست کنی دقیق تر متوجه میشی
موفق باشی

بحث جی میل به کنار من با 7-8 تا دیگه میل سرور و ایمیل هاست تست کردم دقیقا همین مسئله وجود داره ...

نرم افزار OutLook آیا این مشکل رو داره؟! ...................... اگر یک محدودیتی وجود داشته باشه باید برای همه باشه ....

cheshm6k
دوشنبه 05 مهر 1389, 00:54 صبح
از کدوم متد واسه ارسال استفاده میکنید ؟

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

موفق باشید.

ostovarit
دوشنبه 05 مهر 1389, 01:00 صبح
از کدوم متد واسه ارسال استفاده میکنید ؟

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

موفق باشید.

تشکر از توجهت ...
من از متد Send استفاده کردم متد SendAsync رو دیدم دو تا پارامتر میخواد پارامتر دوم (userToken) رو چی باید بهش بدم؟
با تشکر

cheshm6k
دوشنبه 05 مهر 1389, 01:10 صبح
یه object تعریف کن و MailMessageت رو مقدارش قرار بده. حالا اونو قرار بده بعنوان پارامتر دوم.

ostovarit
دوشنبه 05 مهر 1389, 01:22 صبح
یه object تعریف کن و MailMessageت رو مقدارش قرار بده. حالا اونو قرار بده بعنوان پارامتر دوم.

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

http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.sendasync.aspx

یک سوال دیگه که پیش اومد واسم اینکه من کد ارسال رو در یک BackgroundWorker گذاشتم و در طول زمان ارسال یک پروگرس بار روند پیشرفت عملیات رو نمایش میده ... با استفاده از متدی که شما فرمودید کار ارسال سریع انجام میشه ( توسط نرم افزار ) و نرم افزار آماده کار میشه ... اما در Send و Recive های اینترنتم همچنان در حال ارسال هستم و کار تمام نشده ( در عمل) ... برای اینکه از اتمام کار با خبر بشم و تا تموم شدن کامل ارسال به کاربر اجازه فعالیت ندم و پس از تمام شدن پیام مناسبی رو به کاربر نشون بدم از کدام متد یا ایونت این قضیه رو چک کنم ؟

واقعا از کمکت ممنونم

cheshm6k
دوشنبه 05 مهر 1389, 01:57 صبح
چطوری بگم که خودت نخونده باشی . مثل تفاوت فراخوانی تابع بصورت معمولی با فراخوانی همون تابع در قالب یک thread. یا فرق بین تابع showDialog فرم با show . در اولی اجرای خط بعدی برنامه منوط به اتمام تابع هست اما در دومی کار ادامه پیدا میکنه و در پشت پرده عملیات انجام میشه . علت اینکه احساس میکنی کار زود انجام میشه همینه، اما در واقع ....


از رویداد SendCompeleted استفاده کن، قبل از تابع sendAsync این رویداد رو اضافه کن. به اینصورت :


SmtpServer.SendCompleted += newSendCompletedEventHandler(SmtpServer_SendComple ted);


بعد از ایجاد رویداد، با چک کردن خصوصیت UserState ،میتونی موفقیت یا عدم موفقیت رو بررسی کنی، به این صورت:


void SmtpServer_SendCompleted(object sender, AsyncCompletedEventArgs e)
{
if ((MailMessage)e.UserState == null)
MessageBox.Show("Failed");
else
MessageBox.Show("Sent");
}


موفق باشی.

ostovarit
دوشنبه 05 مهر 1389, 13:58 عصر
چطوری بگم که خودت نخونده باشی . مثل تفاوت فراخوانی تابع بصورت معمولی با فراخوانی همون تابع در قالب یک thread. یا فرق بین تابع showDialog فرم با show . در اولی اجرای خط بعدی برنامه منوط به اتمام تابع هست اما در دومی کار ادامه پیدا میکنه و در پشت پرده عملیات انجام میشه . علت اینکه احساس میکنی کار زود انجام میشه همینه، اما در واقع ....


از رویداد SendCompeleted استفاده کن، قبل از تابع sendAsync این رویداد رو اضافه کن. به اینصورت :


SmtpServer.SendCompleted += newSendCompletedEventHandler(SmtpServer_SendComple ted);
بعد از ایجاد رویداد، با چک کردن خصوصیت UserState ،میتونی موفقیت یا عدم موفقیت رو بررسی کنی، به این صورت:


void SmtpServer_SendCompleted(object sender, AsyncCompletedEventArgs e)
{
if ((MailMessage)e.UserState == null)
MessageBox.Show("Failed");
else
MessageBox.Show("Sent");
}
موفق باشی.

با تشکر از مطالب مفیدی که انتشار دادید
من مطابق توضیحات شما عمل کردم ارسال مشکلی نداره ایوینت ایجاد شده و چک میشه اما با اینکه ارسال انجام شده باز پیغام failed رو میده .... به نظر شما ایراد از کجا میتونه باشه ؟

cheshm6k
دوشنبه 05 مهر 1389, 21:03 عصر
ارسال انجام میشه ؟

اگه شرط رو به همین صورت چک کرده باشی و ارسال انجام میشه(یعنی میل رو دریافت میکنی) ، چیزی که به ذهنم میرسه اینه که مقدار آبجکتی که بعنوان پارامتر دوم تعیین کردی ، برابر شی MailMessageت قرار نداده باشی . اگه اینطور نیست کدتو واسم بفرست ببینم مشکل از کجاست .

ostovarit
دوشنبه 05 مهر 1389, 21:30 عصر
ارسال انجام میشه ؟

اگه شرط رو به همین صورت چک کرده باشی و ارسال انجام میشه(یعنی میل رو دریافت میکنی) ، چیزی که به ذهنم میرسه اینه که مقدار آبجکتی که بعنوان پارامتر دوم تعیین کردی ، برابر شی MailMessageت قرار نداده باشی . اگه اینطور نیست کدتو واسم بفرست ببینم مشکل از کجاست .

ارسال هیچ مشکلی نداره ...
من این پارامتر های متد رو نفهمیدم!
اولین پارامتر متد SendAsync رو اون نمونه ای که از MailMessage ساختم دادم ... دومی رو چی بدم؟؟ ...

cheshm6k
دوشنبه 05 مهر 1389, 21:35 عصر
فرض کنیم اسم شی MailMessageت هست mailMsg،حالا تعریف پارامتر دوم میشه :

object obj = mailMsg;

ostovarit
سه شنبه 06 مهر 1389, 00:56 صبح
از راهنمایی هایی که کردید ممنونم مشکل ارسال ایمیل به طور کامل حل شد ...

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


یا dll و روشی رو میشناسید که بشه باهاش ایمیل ها رو نمایش داد و این مشکل رو نداشته باشه؟

با تشکر از همه دوستان مخصوصا جناب cheshm6k (http://barnamenevis.org/forum/member.php?u=23667) که تا اینجا کار ما رو همراهی کردند ...