PDA

View Full Version : نوشتن try/catch برای ارسال ایمیل



smt_414
یک شنبه 22 مهر 1386, 14:27 عصر
سلام
به همه دوستان
نوشتن try/catch برای ارسال ایمیل
برای ارسال ایمیل مقاله ای یکی از دوستان بسیار عزیز در سایت قرار داده بودن
سوالم بر طبق همونه

امکان بروز خطا در زمان ارسال ایمیل از طرف سرور به 3 صورت امکان داره
1- ایراد از طرف آی پی
2 –ایراد از طرف user/password
3-ایراد از طرف میل مقصد


حالا یه کد می خوام مثه این شبه کد نمی دونم چه شکلی باید این اکسپشن رو هدایت کنم





try
{
smtp.Send(mail);
if("ایراد ip")
return 0;
if("ایراد user/pass")
return 1;
if("ایراد mail")
return 2;
}
catch("بررسی خطا")
{
if(0)
{
.....
}
if(1)
{
....
}
if(2)
{
.....
}
}

با تشکر

PC2st
یک شنبه 22 مهر 1386, 20:32 عصر
در واقع میخواید یک Exception ایجاد کنید، بصورت زیر میشه:


try
{
smtp.Send(mail);
if("ایراد ip")
throw new Exception("0");
if("ایراد user/pass")
throw new Exception("1");
if("ایراد mail")
throw new Exception("2");
}

catch(Exception e)
{
switch(e.Message)
{
case "0":
...
break;
case "1":
...
break;
case "2":
...
break;
}
}

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

smt_414
یک شنبه 22 مهر 1386, 21:08 عصر
سلام
تشکر


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

مورد سوم رو بررسی کردم ، متوجه شدم که برنامه فقط وظیفه ارسال رو بر عهده داره نه اینکه این mail وجود داره یا نه و برا بررسی باید به mailserver رجوع کرد !

اما یه چیز : می خوام در هر لحظه و پس از فرستادن هر mail ، گزارشی دال بر ازسال بده(مقدار بازگشتی از تابع) که اینکار رو پس از اتمام ارسال تمام میل ها میکنه !:ناراحت:

PC2st
دوشنبه 23 مهر 1386, 01:56 صبح
این فقط یه شبه کد بود اگه فرصت دارید هر طور که میخواید تغیرش بدید
اگر احتیاج به تولید خطا داشتید، اینطور بهتره:


class AuthorizeException : Exception
{
...
}

class IpException : Exception
{
...
}

~~~~~~~~~~

try
{
smtp.Send(mail);
if("ایراد ip")
throw new IpException();
if("ایراد user/pass")
throw new AuthorizeException ();
}
catch(IpException e)
{
...
}
catch(AuthorizeException e)
{
...
}
catch
{
...
}
finally
{
...
}

بجای سه نقطه (...) پیدا سازی لازم رو انجام بدید.

متاسفانه در مورد سوال دوم اطلاعی ندارم.

smt_414
چهارشنبه 25 مهر 1386, 16:52 عصر
سلام
تشکر

بجای سه نقطه (...) پیدا سازی لازم رو انجام بدید.


چه شکلی ؟؟

PC2st
پنج شنبه 26 مهر 1386, 00:04 صبح
منظورتون نحوه پیاده سازی در حین ارث بری از کلاس Exception است؟ اگر منظورتون این باشه، نیازی به پیاده سازی نیست، مثلا:


class AuthorizeException : Exception
{
}

میتونید ازش به همان شکل فوق استفاده کنید، اگر هم که میخواید بشه یک متن و ... رو در حین fire کردن خطا بهش نسبت داد، باید سازنده ها رو مشخص کنید، مثلا:


class AuthorizeException : Exception
{
public AuthorizeException()
{
}

public AuthorizeException(string message) : base(message)
{
}

// و سایر کارها
}

سایر سازنده ها رو هم میتونید به همین صورت (مثل فوق) براش مشخص کنید،
اگر هم لازم داشتید اعضای جدیدی به کلاس AuthorizeException اضافه کنید.

smt_414
دوشنبه 13 اسفند 1386, 22:11 عصر
سلام
در ارسال ایمیل به صورت انبوه (to,cc,bcc) چطور می توان در هر لحظه بررسی کرد که ایمیل به کدام آدرس در حال ارسال است
و یا ساده تر در هر لحظه بررسی کرد که به کدام آدرس ایمیل ارسال شد
می خوام به این طریق بررسی کنم که به چه آدرس هایی ایمیل ارسال شده و به چه آدرس هایی ارسال نشده است
با تشکر

H2K
دوشنبه 13 اسفند 1386, 23:14 عصر
سلام
در ارسال ایمیل به صورت انبوه (to,cc,bcc) چطور می توان در هر لحظه بررسی کرد که ایمیل به کدام آدرس در حال ارسال است
و یا ساده تر در هر لحظه بررسی کرد که به کدام آدرس ایمیل ارسال شد
می خوام به این طریق بررسی کنم که به چه آدرس هایی ایمیل ارسال شده و به چه آدرس هایی ارسال نشده است
با تشکر


والا من چند وقت پیش بهم چین چیزى احتیاج داشتم اما تنها چیزى که به فکرم رسید این بود که هر بر برِ هر کدام(to,cc,bcc) میفرسته یه فایل txt درست میکنم که باز میکنه اونجا اضافه میکنه راحت اون فایل txt رو تو یه لیست نشون میده ، حالا حتما راه ساده تر یا صحیح ترى هست که دوستان بدونن:لبخندساده: