Dieses Snippet sendet die Fehlermeldungen, die Ihr Programm auswirft, automatisch an Ihre E-Mail-Adresse, damit Sie diese analysieren können. Alternativ ist es auch möglich, diese Meldungen in einer txt-Datei zu speichern.
Achtung: Dazu ist ein E-Mail-Zweitkonto notwendig, von dem aus die Nachrichten versendet werden.
//using System.Net;
//using System.Net.Mail;
//using System.IO;
private void fehler(Exception ex)
{
//Variablen initialisieren
string Name = "Max"; //Wichtig für die Fehlermeldung an den Benutzer
//Um eine E-Mail an Ihr Konto zu schicken, benötigen Sie einen zweiten Account, von dem Sie aus die Nachricht versenden
string EMailadresse = "beispiel@gmail.com"; //E-Mail-Adresse, von der aus die Nachricht gesendet wird
string Passwort = "passwort"; //Passwort der E-Mail-Adresse, von der aus die Nachricht gesendet wird
string Host = "smtp.googlemail.com"; //SMTP-Server des E-Mailanbieters (http://www.patshaping.de/hilfen_ta/pop3_smtp.htm)
int Port = 587; //Port des E-Mailanbieters
string EMailadresse_Empfänger = "beispiel2@gmail.com"; //E-Mail-Adresse, an die die Nachricht gesendet wird
//Zusammenfassung der Fehlermeldung
string Fehlermeldung = ex.ToString();
Fehlermeldung = Fehlermeldung.Replace(": ", "\r\n" + "\r\nBeschreibung: ");
Fehlermeldung = Fehlermeldung.Replace(" ", "\r\nOrt: ");
string Ausgabe = "Meldung: " + Fehlermeldung + "\r\n\r\n" +
"Uhrzeit: " + DateTime.Now.ToString("HH:mm:ss") + "\r\n" +
"Datum: " + DateTime.Now.ToString("dddd") + ", den " + DateTime.Now.ToString("dd.MM.yyyy") + "\r\n" +
"Version: " + System.Windows.Forms.Application.ProductVersion;
//MessageBox an den Benutzer
DialogResult dr = MessageBox.Show("Es ist folgender Fehler aufgetreten:" + "\r\n" + ex.Message + "\r\n\r\n" +
"Möchten Sie die Fehlermeldung an \"" + Name + "\" senden?", "Fehler", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
if (dr == DialogResult.Yes)
{
try
{
//E-Mail wird versendet
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
MailAddress from = new MailAddress(EMailadresse);
mail.To.Add(EMailadresse_Empfänger);
mail.From = from;
mail.Subject = "Fehlermeldung: " + System.Windows.Forms.Application.ProductName;
mail.Body = Ausgabe;
SmtpClient client = new SmtpClient(Host, Port);
client.EnableSsl = true;
System.Net.NetworkCredential nc = new NetworkCredential(EMailadresse, Passwort);
client.Credentials = nc;
client.Send(mail);
MessageBox.Show("Der Bericht wurde erfolgreich versendet!", "Fehlerbericht wurde gesendet", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
}
catch
{
//Ein Fehler beim Versenden ist aufgetreten
DialogResult dr2 = MessageBox.Show("Die Fehlermeldung konnte nicht versendet werden!" + "\r\n" +
"Möchten Sie stattdessen die Fehlermeldung speichern?", "Fehler", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
if (dr2 == DialogResult.Yes)
{
//Die Fehlermeldung wird gespeichert
SaveFileDialog sfd = new SaveFileDialog();
sfd.InitialDirectory = "C:/";
sfd.Filter = "Textdatei (*.txt)|*.txt";
sfd.Title = "Dateispeicherort angeben";
sfd.FileName = DateTime.Now.ToString("dd.MM.yyyy_HH-mm-ss") + " Fehler " + System.Windows.Forms.Application.ProductName;
if (sfd.ShowDialog() == DialogResult.OK)
{
FileStream fs;
StreamWriter sw;
string dateiname = sfd.FileName;
fs = new FileStream(dateiname, FileMode.Create);
sw = new StreamWriter(fs);
sw.Write(Ausgabe);
sw.Close();
}
}
}
}
else
{
DialogResult dr3 = MessageBox.Show("Möchten Sie stattdessen die Fehlermeldung speichern?", "Fehlermeldung speichern", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
if (dr3 == DialogResult.Yes)
{
//Die Fehlermeldung wird gespeichert
SaveFileDialog sfd = new SaveFileDialog();
sfd.InitialDirectory = "C:/";
sfd.Filter = "Textdatei (*.txt)|*.txt";
sfd.Title = "Dateispeicherort angeben";
sfd.FileName = DateTime.Now.ToString("dd.MM.yyyy_HH-mm-ss") + " Fehler " + System.Windows.Forms.Application.ProductName;
if (sfd.ShowDialog() == DialogResult.OK)
{
FileStream fs;
StreamWriter sw;
string dateiname = sfd.FileName;
fs = new FileStream(dateiname + ".txt", FileMode.Create);
sw = new StreamWriter(fs);
sw.Write(Ausgabe);
sw.Close();
}
}
}
}
//So verwenden Sie die Methode innerhalb eines Catch-Blocks
private void button1_Click(object sender, EventArgs e)
{
try
{
}
catch (Exception ex)
{
fehler(ex);
}
}
2 Kommentare zum Snippet