Fehler in meinem Code?

21/03/2008 - 17:14 von Stefan Theobald | Report spam
Hallo,

ich möchte gerne aus meinem Programm eine E-Mail mit Fehlern versenden.

Ich habe aber das Problem, dass es einmal soweit klappt - aber die Fehler im
Body der Mail fehlen, obwohl ich die doch in einer Schleife reinsetze.

Zum anderen hàngt sich das Programm wohl in diesem Abschnitt auf.

Kann einer mal einen Blick drauf werfen, und mir sagen was ich falsch mache?
Ich finde den Fehler nicht.


Gruß
Stefan


Private Sub Fehlerprotokoll_versenden()

If TextBox_EMAIL_Mailserver.Text.Length > 0 = True And _
TextBox_EMAIL_Absender.Text.Length > 0 = True And _
TextBox_EMAIL_Empfaenger.Text.Length > 0 = True Then

Dim Anzahl_Warnungen_aktuell As Integer =
ListBox_Warnungen.Items.Count
Dim Anzahl_Fehler_aktuell As Integer =
ListBox_Fehler.Items.Count

'Prüfen, ob wir inzwischen mehr Warnungen / Fehler haben.
'Wenn JA, wird geprüft, ob Mailversand gewünscht ist.
'Ist Mailversand gewünscht wird eine Mail versendet!

If Anzahl_Warnungen_aktuell > Anzahl_Warnungen = True Or _
Anzahl_Fehler_aktuell > Anzahl_Fehler = True Then

Dim MailClient As New Net.Mail.SmtpClient

MailClient.Host = TextBox_EMAIL_Mailserver.Text

Dim MailNachricht As New System.Net.Mail.MailMessage()

MailNachricht.From = New
System.Net.Mail.MailAddress(TextBox_EMAIL_Absender.Text, "Programm")
MailNachricht.To.Add(New
System.Net.Mail.MailAddress(TextBox_EMAIL_Empfaenger.Text,
TextBox_EMAIL_Empfaenger.Text))
MailNachricht.BodyEncoding = System.Text.Encoding.Default


If CheckBox_EMAIL_fuer_Warnungen.Checked = True And _
Anzahl_Warnungen_aktuell > Anzahl_Warnungen = True Then

MailNachricht.Subject = "Es sind neue WARNUNGEN im
Programm XXX aufgetreten!"

Dim Warnungseintrag As String

For Each Warnungseintrag In ListBox_Warnungen.Items
MailNachricht.Body = MailNachricht.Body &
Warnungseintrag & Chr(13)
Next

Try
MailClient.Send(MailNachricht)
Catch ex As Exception
'Nur in INFO reingestellt, da wir sonst eine
Endlos-Schleife hàtten!
Ereignisanzeige_Programm.WriteEntry("ACHTUNG: E-Mail
mit Warnungen konnte nicht versendet werden!- " & ex.Message,
EventLogEntryType.Information)
Exit Sub
End Try

End If


If CheckBox_EMAIL_fuer_Fehler.Checked = True And _
Anzahl_Fehler_aktuell > Anzahl_Fehler Then

MailNachricht.Subject = "Es sind neue FEHLER im Programm
aufgetreten!"

Dim Fehlereintrag As String

For Each Fehlereintrag In ListBox_Fehler.Items
MailNachricht.Body = MailNachricht.Body &
Fehlereintrag & Chr(13)
Next

Try
MailClient.Send(MailNachricht)
Catch ex As Exception
'Nur in INFO reingestellt, da wir sonst eine
Endlos-Schleife hàtten!
Ereignisanzeige_Programm.WriteEntry("ACHTUNG: E-Mail
mit Fehlern konnte nicht versendet werden! - " & ex.Message,
EventLogEntryType.Information)
Exit Sub
End Try

'Zàhler hochsetzen...
Anzahl_Warnungen = Anzahl_Warnungen_aktuell
Anzahl_Fehler = Anzahl_Fehler_aktuell

End If

End If

Call Ereignisse_einlesen()

End If
 

Lesen sie die antworten

#1 Stefan Falz [MVP]
21/03/2008 - 21:56 | Warnen spam
Hallo Stefan,

"Stefan Theobald" schrieb

ich möchte gerne aus meinem Programm eine E-Mail mit Fehlern versenden.



http://www.aspnetzone.de/articles/W...NET20.aspx
(Klappt grundsötzlich auch mit WinForms Anwendungen, ggfs. muss man aber
anstelle der lokalen SMTP Queue den Direktversand, dann evtl. auch mit
SMTP Authentification verwenden).

If TextBox_EMAIL_Mailserver.Text.Length > 0 = True And _
TextBox_EMAIL_Absender.Text.Length > 0 = True And _
TextBox_EMAIL_Empfaenger.Text.Length > 0 = True Then



?

If TextBox_EMAIL_Mailserver.Text.Length > 0 AndAlso _
TextBox_EMAIL_Absender.Text.Length > 0 AndAlso _
TextBox_EMAIL_Empfaenger.Text.Length > 0 Then
...
End if

If Anzahl_Warnungen_aktuell > Anzahl_Warnungen = True Or _
Anzahl_Fehler_aktuell > Anzahl_Fehler = True Then



Auch hier: ?

If Anzahl_Warnungen_aktuell > Anzahl_Warnungen OrElse _
Anzahl_Fehler_aktuell > Anzahl_Fehler Then

If CheckBox_EMAIL_fuer_Warnungen.Checked = True And _
Anzahl_Warnungen_aktuell > Anzahl_Warnungen = True Then



Wieso wird die Mailnachricht zwar vorher erzeugt, dann aber nur
versendet, wenn die Checkbox gesetzt ist? (Auch hier lass mal das
" = True" weg.)

Dim Warnungseintrag As String

For Each Warnungseintrag In ListBox_Warnungen.Items
MailNachricht.Body = MailNachricht.Body & Warnungseintrag & Chr(13)
Next



Hier würde ich eine lokale Variable nehmen und deren Inhalt dann nach
der Zusammenstellung des Inhalts an MailNachricht.Body übergeben.

Dim MailBody As String = String.Empty

For Each Warnungseintrag In ListBox_Warnungen.Items
MailBody &= Warnungseintrag & Environment.NewLine
Next

MailNachricht.Body = MailBody

Try
MailClient.Send(MailNachricht)
Catch ex As Exception
'Nur in INFO reingestellt, da wir sonst eine Endlos-Schleife hàtten!



? Wieso Endlosschleife?

Entschlack den Code mal ein wenig, pass die Einrückungen an (sonst
ist das hier extrem schlecht lesbar) und arbeite evtl. mit kürzeren
Variablennamen (lokale Variablen verwenden ist nicht grundsàtzlich
schlecht :)

Tschau, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET
http://www.asp-solutions.de/ - Consulting, Development
http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

Ähnliche fragen