Announcement

Collapse
No announcement yet.

Mail wird erst beim beenden des Programms versandt

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Mail wird erst beim beenden des Programms versandt

    Ich habe folgenden Code hinter einem Button, der bei Betätigung eine Mail versenden soll. Eigenartiger Weise wird die Mail jedoch erst beim beenden des Programms versandt.

    Hier der hinter dem Button liegende Code:

    Code:
    Private Sub cmdSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSend.Click
    
    If txtBoxScanArticel.Text = Nothing Then
    
    MsgBox("Bitte Materialnummer eingeben!")
    
    Else
    
    If MsgBox("Nachricht absenden?", vbYesNo + vbQuestion, "Bitte Eingaben prüfen!") = 6 Then
    
    Dim SMTPServer As New SmtpClient()
    Dim sendTo As New MailAddress(System.IO.File.ReadAllText(ProgramPath & "\resources\config\" & txtBoxScanArticel.Text & "_mail.txt"))
    Dim sendFrom As MailAddress = New MailAddress(My.Settings.SendFrom)
    Dim message As New MailMessage(sendFrom, sendTo)
    Dim Hinweis As String = "------------------------------------------------------------" & vbCrLf & "Diese Mail wurde automatisch erzeugt, bitte nicht antworten!"
    
    message.IsBodyHtml = False
    message.Subject = "Materialanforderung - Arbeitsplatz: "
    
    'message.Body = (System.IO.File.ReadAllText(ProgramPath & "\resources\config\" & txtBoxScanArticel.Text & "_desc.txt")) & vbCrLf & vbCrLf & "Bemerkungen: " & vbCrLf & RtxtBoxRemark.Text & vbCrLf & vbCrLf & Hinweis
    
    message.Body = lblDescription.Text & vbCrLf & vbCrLf & "Bemerkungen: " & vbCrLf & RtxtBoxRemark.Text & vbCrLf & vbCrLf & Hinweis
    
    ' Use the same account in app.config to authenticate.
    'Dim basicAuthenticationInfo As New System.Net.NetworkCredential("[email protected]", "YourPassword")
    
    SMTPServer.Host = My.Settings.Mailserver
    SMTPServer.UseDefaultCredentials = True
    'SMTPServer.Credentials = basicAuthenticationInfo
    'SMTPServer.EnableSsl = True
    
    Try
    
    SMTPServer.Send(message)
    MsgBox("Nachricht erfolgreich versand!")
    
    Catch ex As Exception
    
    MsgBox("Senden fehlgeschlagen!" & vbCrLf & vbCrLf & ex.Message.ToString)
    
    End Try
    
    lblDescription.Text = "Materialbeschreibung"
    txtBoxScanArticel.Clear()
    RtxtBoxRemark.Clear()
    PictureBoxArticle.SizeMode = PictureBoxSizeMode.StretchImage
    PictureBoxArticle.Image = System.Drawing.Image.FromFile(ProgramPath & "\resources\default\default.jpg")
    Exit Sub
    Else
    
    MsgBox("Nachricht wurde nicht versand!")
    
    End If
    
    End If
    
    End Sub
    Hat jemand einen Tipp woran es liegen kann?

  • #2
    Ich glaube zwar nicht dass es daran liegt, aber mache mal nach
    SMTPServer.Send(message) ein Application.DoEvents rein.

    Comment


    • #3
      versuch es mal damit. Es könnte an deinem SMTP Server liegen. Er wartet evtl. bis alle Nachrichten vorliegen die du senden willst und du ein QUIT absetzt. Heißt bis die Verbindung explizit wieder geschlossen wird. Vielleicht passiert dass bei dir wirklich erst bei Schließen des Programmes, da die SMTP Klasse so eine Art Pooling besitzt:
      Code:
      Private Sub cmdSend_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdSend.Click
      
      If txtBoxScanArticel.Text = Nothing Then
      
      MsgBox("Bitte Materialnummer eingeben!")
      
      Else
      
      If MsgBox("Nachricht absenden?", vbYesNo + vbQuestion, "Bitte Eingaben prüfen!") = 6 Then
      Using SMTPServer As New SmtpClient()
      Dim sendTo As New MailAddress(System.IO.File.ReadAllText(ProgramPath & "\resources\config\" & txtBoxScanArticel.Text & "_mail.txt"))
      Dim sendFrom As MailAddress = New MailAddress(My.Settings.SendFrom)
      Dim message As New MailMessage(sendFrom, sendTo)
      Dim Hinweis As String = "------------------------------------------------------------" & vbCrLf & "Diese Mail wurde automatisch erzeugt, bitte nicht antworten!"
      
      message.IsBodyHtml = False
      message.Subject = "Materialanforderung - Arbeitsplatz: "
      
      'message.Body = (System.IO.File.ReadAllText(ProgramPath & "\resources\config\" & txtBoxScanArticel.Text & "_desc.txt")) & vbCrLf & vbCrLf & "Bemerkungen: " & vbCrLf & RtxtBoxRemark.Text & vbCrLf & vbCrLf & Hinweis
      
      message.Body = lblDescription.Text & vbCrLf & vbCrLf & "Bemerkungen: " & vbCrLf & RtxtBoxRemark.Text & vbCrLf & vbCrLf & Hinweis
      
      ' Use the same account in app.config to authenticate.
      'Dim basicAuthenticationInfo As New System.Net.NetworkCredential("[email protected]", "YourPassword")
      
      SMTPServer.Host = My.Settings.Mailserver
      SMTPServer.UseDefaultCredentials = True
      'SMTPServer.Credentials = basicAuthenticationInfo
      'SMTPServer.EnableSsl = True
      
      Try
      
      SMTPServer.Send(message)
      MsgBox("Nachricht erfolgreich versand!")
      
      Catch ex As Exception
      
      MsgBox("Senden fehlgeschlagen!" & vbCrLf & vbCrLf & ex.Message.ToString)
      
      End Try
      End Using
      lblDescription.Text = "Materialbeschreibung"
      txtBoxScanArticel.Clear()
      RtxtBoxRemark.Clear()
      PictureBoxArticle.SizeMode = PictureBoxSizeMode.StretchImage
      PictureBoxArticle.Image = System.Drawing.Image.FromFile(ProgramPath & "\resources\default\default.jpg")
      Exit Sub
      Else
      
      MsgBox("Nachricht wurde nicht versand!")
      
      End If
      
      End If
      
      End Sub
      Der Using Block bewirkt dass die SMTP Klasse wirklich zerstört wird und damit auch der QUIT abgesetzt wird.
      Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

      Comment


      • #4
        Super, vielen Dank.

        Der Using Block hat das Problem gelöst, die Mail wird nun direkt nach dem Betätigen des entsprechenden Buttons gesendet.

        Comment


        • #5
          gerade bei Klassen die Verbindungen kapseln solltest du immer in Betracht ziehen Using zu verwenden, da diese Klassen oft Ressourcen aus dem Unmanaged Speicherbereich belegen und dort ein sauberes Freigeben von Vorteil ist. Wie du hier siehst quasi unerlässlich!
          Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

          Comment

          Working...
          X