PDA

View Full Version : آموزش: ارسال خطاهای رخ داده در سایت به ایمیل شما



actros
چهارشنبه 20 دی 1391, 04:45 صبح
نمی دونم قبلا کسی به این مساله اشاره کرده یا نه به هر حال..

یکی از دغدغه های برنامه نویس ها خطاهایی هست که بعد از تحویل پروژه به مشتری رخ میده.هر چقدر هم خوب پروژه رو دیباگ کنیم بالاخره ممکنه خطاهایی باشه که تو محیط develop خودشو نشون نده(مخصوصا وب فرم ها که ذاتا Testability پائینی دارن) اگه ما بتونیم همه خطاهایی که حین کارکرد برنامه رخ میده رو کنار هم مشاهده کنیم،کمک زیادی تو برطرف کردن مشکل و ارتقا عملکرد سایت می کنه.
بعضی از این خطاها مطالبی رو به ما یادآوری می کنن که تو حین ساخت پروژه بهشون نپرداختیم و اصلا تصور بروز چینین خطایی رو نداشتیم.
بیشتر از این فکر نکنم نیازی به توضیح باشه.بهتره بریم سراغ اصل مطلب:

خوب طبق معمول تو مواردی که قصد ایجاد یک کارکرد در سطح کل سایت رو داریم دست به دامن global.asax می شیم :دی
مراحا کار:
1- فایل global.asax رو باز کنید و یا اگه ندارید یکیشو بسازید.
2- Namespace ئه System.Net.Mail رو جهت ارسال ایمیل ایپورت کنید.مثل همیشه جای Namespace بالای صفحه ست.VB و #C یکیه :
<%@ Import Namespace="System.Net.Mail" %>
3- متد زیر رو به فایل گلوبال اضافه کنید:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
If HttpContext.Current.Server.GetLastError() IsNot Nothing Then
Dim myException As Exception = HttpContext.Current.Server.GetLastError().GetBaseE xception()
Dim mailSubject As String = "Error in page " & Request.Url.ToString()
Dim message As String = String.Empty
message &= "<strong>Message</strong><br />" & myException.Message & "<br />"
message &= "<strong>StackTrace</strong><br />" & myException.StackTrace & "<br />"
message &= "<strong>Query String</strong><br />" & Request.QueryString.ToString() & "<br />"
Dim myMessage As New MailMessage("from email", "to email", mailSubject, message)
myMessage.IsBodyHtml = True
Dim mysmtp As New SmtpClient
mysmtp.Host = "هاست شماsmtp آدرس"
mysmtp.Credentials = New Net.NetworkCredential("YourSiteEmail", "password")
mysmtp.Send(myMessage)
End If
End Sub
#C:
public void Application_Error(object sender, EventArgs e)
{
if (HttpContext.Current.Server.GetLastError() != null) {
Exception myException = HttpContext.Current.Server.GetLastError().GetBaseE xception();
string mailSubject = "Error in page " + Request.Url.ToString();
string message = string.Empty;
message += "<strong>Message</strong>" + myException.Message + "";
message += "<strong>StackTrace</strong>" + myException.StackTrace + "";
message += "<strong>Query String</strong>" + Request.QueryString.ToString() + "";
MailMessage myMessage = new MailMessage("from email", "to email", mailSubject, message);
myMessage.IsBodyHtml = true;
SmtpClient mysmtp = new SmtpClient();
mysmtp.Host = "Your smtp";
mysmtp.Credentials = new Net.NetworkCredential("هاست شماsmtp آدرس", "password");
mysmtp.Send(myMessage);
}
}

4- تموم شد برای تست می تونید یه صفحه که تو سایتتون وجود نداره رو درخواست کنید.
پیشنهاد می کنم یه اکانت جیمیل مختص این کار بسازید تا کل خطاهای سایتهاتون رو یکجا ببینید :دی

اگه هاست ندارید می تونید از smtp رایگان گوگل استفاده کنید (کافیه یه جیمیل داشته باشید)

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
If HttpContext.Current.Server.GetLastError() IsNot Nothing Then
Dim myException As Exception = HttpContext.Current.Server.GetLastError().GetBaseE xception()
Dim mailSubject As String = "Error in page " & Request.Url.ToString()
Dim message As String = String.Empty
message &= "<strong>Message</strong><br />" & myException.Message & "<br />"
message &= "<strong>StackTrace</strong><br />" & myException.StackTrace & "<br />"
message &= "<strong>Query String</strong><br />" & Request.QueryString.ToString() & "<br />"

Dim myMessage As New MailMessage
myMessage.Subject = "Error in page " & Request.Url.ToString()
myMessage.Body = message
myMessage.From = New MailAddress("from email", "display name")
myMessage.To.Add(New MailAddress("ایمیل شما"))
myMessage.IsBodyHtml = True
Dim mysmtp As New SmtpClient
mysmtp.Host = "smtp.gmail.com"
mysmtp.Credentials = New Net.NetworkCredential("Yourgmailadress", "gmailpass")
mysmtp.Port = 587
mysmtp.EnableSsl = True
mysmtp.Send(myMessage)
End If
End Sub

public void Application_Error(object sender, EventArgs e)
{
if (HttpContext.Current.Server.GetLastError() != null) {
Exception myException = HttpContext.Current.Server.GetLastError().GetBaseE xception();
string mailSubject = "Error in page " + Request.Url.ToString();
string message = string.Empty;
message += "<strong>Message</strong>" + myException.Message + "";
message += "<strong>StackTrace</strong>" + myException.StackTrace + "";
message += "<strong>Query String</strong>" + Request.QueryString.ToString() + "";

MailMessage myMessage = new MailMessage();
myMessage.Subject = "Error in page " + Request.Url.ToString();
myMessage.Body = message;
myMessage.From = new MailAddress("from email", "display name");
myMessage.To.Add(new MailAddress("ایمیل شما"));
myMessage.IsBodyHtml = true;
SmtpClient mysmtp = new SmtpClient();
mysmtp.Host = "smtp.gmail.com";
mysmtp.Credentials = new Net.NetworkCredential("Yourgmailadress", "gmailpass");
mysmtp.Port = 587;
mysmtp.EnableSsl = true;
mysmtp.Send(myMessage);
}
}

fakhravari
چهارشنبه 20 دی 1391, 08:57 صبح
در فایل گلوبال میتوانید خطا ها را دنبال کنید. application eroor

komeil64
چهارشنبه 20 دی 1391, 09:32 صبح
ارسال ایمیل و توی کجای گلوبال بنویسیم؟

fakhravari
چهارشنبه 20 دی 1391, 12:01 عصر
void Application_Error(object sender, EventArgs e)
{

}
یه تابع بینیسید

actros
چهارشنبه 20 دی 1391, 16:33 عصر
در فایل گلوبال میتوانید خطا ها را دنبال کنید. application eroor
کل پست من در همین رابطه بود مهندس http://www.pic4ever.com/images/89.gif

ارسال ایمیل و توی کجای گلوبال بنویسیم؟
یه فایل گلوبال که بسازی خودش متد Application_Error رو داره.اطلاعاتی که گذاشتم رو بهش اضافه کن
کدی که گذاشتم خودش ایمیل رو ارسال می کنه

fakhravari
چهارشنبه 20 دی 1391, 17:00 عصر
:قهقهه: راست میگیا

javad_mjt
چهارشنبه 20 دی 1391, 21:59 عصر
بهتر هست برای لاگ کردن خطاها از elmah استفاده کنید

website.expert
پنج شنبه 21 دی 1391, 09:12 صبح
بهتر هست برای لاگ کردن خطاها از elmah استفاده کنید

ممنون میشم اگه یه مقدار توضیح بدید.

FazelMan
دوشنبه 30 بهمن 1391, 11:16 صبح
ممنون میشم اگه یه مقدار توضیح بدید.
امیدوارم این سایت کمکتون کنه!
http://www.dotnettips.info/post/240/%D9%85%D8%B9%D8%B1%D9%81%DB%8C-elmah