diff --git a/app/ClassWMResulthandler/ClassWMResulthandler.vbproj b/app/ClassWMResulthandler/ClassWMResulthandler.vbproj index 8443c6a..8c19dd9 100644 --- a/app/ClassWMResulthandler/ClassWMResulthandler.vbproj +++ b/app/ClassWMResulthandler/ClassWMResulthandler.vbproj @@ -43,6 +43,9 @@ On + + P:\Projekte DIGITAL DATA\DIGITAL DATA - Entwicklung\DLL_Bibliotheken\Email .NET\Bin\Independentsoft.Email.dll + P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll False diff --git a/app/ClassWMResulthandler/clsEmail.vb b/app/ClassWMResulthandler/clsEmail.vb index 0d430a1..511ff8b 100644 --- a/app/ClassWMResulthandler/clsEmail.vb +++ b/app/ClassWMResulthandler/clsEmail.vb @@ -1,4 +1,8 @@ -Imports System.Net.Mail + +Imports System +Imports Independentsoft.Email +Imports Independentsoft.Email.Smtp +Imports Independentsoft.Email.Mime Public Class clsEmail Private Shared MailAktiv As Boolean = False @@ -26,65 +30,151 @@ Public Class clsEmail ' Return False ' End Try ' End Function - Public Shared Function Send_EMail(ByVal MailBetreff As String, ByVal vBody As String, MailEmpfaenger As String, MailFrom As String, MAilSMTP As String, MailUser As String, MailUser_PW As String, SSL As Boolean, - Optional attment As String = "", Optional test As Boolean = False) - '#### E-MAIL NACHRICHT VERSENDEN - Try - Dim empfaenger As String() - If MailEmpfaenger.Contains(";") Then - empfaenger = MailEmpfaenger.Split(";") - Else - ReDim Preserve empfaenger(0) - empfaenger(0) = MailEmpfaenger - End If - 'Für jeden Empfänger eine Neue Mail erzeugen - For Each _mailempfaenger As String In empfaenger - 'Neue Nachricht erzeugen: - Dim message As New MailMessage(MailFrom, _mailempfaenger, MailBetreff, - "" & vBody & "") '& "
" & - '"
Domain: " & Environment.UserDomainName & - '"
Gesendet am: " & My.Computer.Clock.LocalTime.ToShortDateString & "-" & - 'My.Computer.Clock.LocalTime.ToLongTimeString & + 'Public Shared Function Send_EMail(ByVal MailBetreff As String, ByVal vBody As String, MailEmpfaenger As String, MailFrom As String, MAilSMTP As String, MailUser As String, MailUser_PW As String, SSL As Boolean, + ' Optional attment As String = "", Optional test As Boolean = False) + ' '#### E-MAIL NACHRICHT VERSENDEN + ' Try + ' Dim empfaenger As String() + ' If MailEmpfaenger.Contains(";") Then + ' empfaenger = MailEmpfaenger.Split(";") + ' Else + ' ReDim Preserve empfaenger(0) + ' empfaenger(0) = MailEmpfaenger + ' End If + ' 'Für jeden Empfänger eine Neue Mail erzeugen + ' For Each _mailempfaenger As String In empfaenger + ' 'Neue Nachricht erzeugen: + ' Dim message As New MailMessage(MailFrom, _mailempfaenger, MailBetreff, + ' "" & vBody & "") '& "
" & + ' '"
Domain: " & Environment.UserDomainName & + ' '"
Gesendet am: " & My.Computer.Clock.LocalTime.ToShortDateString & "-" & + ' 'My.Computer.Clock.LocalTime.ToLongTimeString & - ' create and add the attachment(s) */ + ' ' create and add the attachment(s) */ + ' If attment <> String.Empty Then + ' If System.IO.File.Exists(attment) Then + ' Dim Attachment As Attachment = New Attachment(attment) + ' message.Attachments.Add(Attachment) + ' End If + ' End If + + ' With message + ' .IsBodyHtml = True + ' End With + + ' 'Einen SMTP Client erzeugen und Anmeldungsinformationen hinterlegen + ' Dim emailClient As New SmtpClient(MAilSMTP) + ' emailClient.EnableSsl = SSL + ' 'Email mit Authentifizierung + ' Dim SMTPUserInfo As New System.Net.NetworkCredential(MailUser, MailUser_PW) ', My.Settings.vDomain) + ' emailClient.UseDefaultCredentials = False + ' emailClient.Credentials = SMTPUserInfo + ' emailClient.Port = 25 + ' clsLogger.Add("==> Email erfolgreich an " & _mailempfaenger & " versendet!", False) + ' clsLogger.Add("==> Text: " & vBody, False) + ' clsLogger.Add("", False) + ' '*Send the message */ + + ' emailClient.Send(message) + ' If test = True Then + ' MsgBox("The testmail was send successfully", MsgBoxStyle.Information) + ' End If + ' Next + ' Return True + ' Catch ex As Exception + ' clsLogger.Add(ex.Message, True, "cls.SendEmail") + ' If test = True Then + ' MsgBox("Unexpected error in Send Testmail: " & ex.Message, MsgBoxStyle.Critical) + ' End If + ' Return False + ' End Try + 'End Function + Public Shared Function Email_Send_Independentsoft(ByVal mailSubject As String, ByVal mailBody As String, mailto As String, + mailfrom As String, mailsmtp As String, mailport As Integer, mailUser As String, mailPW As String, + SSL As Boolean, Optional attment As String = "") + Dim empfaenger As String() + If mailto.Contains(";") Then + empfaenger = mailto.Split(";") + Else + ReDim Preserve empfaenger(0) + empfaenger(0) = mailto + End If + Dim _error As Boolean = False + 'Für jeden Empfänger eine Neue Mail erzeugen + For Each _mailempfaenger As String In empfaenger + + Try + Dim message As New Message() + message.From = New Mailbox(mailfrom, mailfrom) + message.[To].Add(New Mailbox(_mailempfaenger)) + message.Subject = mailSubject + + Dim textBodyPart As New BodyPart() + textBodyPart.ContentType = New ContentType("text", "plain", "utf-8") + textBodyPart.ContentTransferEncoding = ContentTransferEncoding.QuotedPrintable + textBodyPart.Body = mailBody + message.BodyParts.Add(textBodyPart) If attment <> String.Empty Then If System.IO.File.Exists(attment) Then - Dim Attachment As Attachment = New Attachment(attment) - message.Attachments.Add(Attachment) + Dim attachment1 As New Attachment("c:\testfolder\test.docx") + If attment.ToLower.EndsWith("pdf") Then + attachment1.ContentType = New ContentType("application", "pdf") + ElseIf attment.ToLower.EndsWith("jpg") Then + attachment1.ContentType = New ContentType("application", "jpg") + ElseIf attment.ToLower.EndsWith("docx") Then + attachment1.ContentType = New ContentType("application", "MS-word") + End If + message.BodyParts.Add(attachment1) End If End If + Dim client As SmtpClient + Try + client = New SmtpClient(mailsmtp, mailport) + Catch ex As Exception + clsLogger.AddError(ex.Message, "clsEmail.SendMail(Create Client)") + _error = True + Continue For + End Try - With message - .IsBodyHtml = True - End With + Try + client.Connect() + Catch ex As Exception + clsLogger.AddError(ex.Message, "clsEmail.SendMail(Client.Connect)") + _error = True + Continue For - 'Einen SMTP Client erzeugen und Anmeldungsinformationen hinterlegen - Dim emailClient As New SmtpClient(MAilSMTP) - emailClient.EnableSsl = SSL - 'Email mit Authentifizierung - Dim SMTPUserInfo As New System.Net.NetworkCredential(MailUser, MailUser_PW) ', My.Settings.vDomain) - emailClient.UseDefaultCredentials = False - emailClient.Credentials = SMTPUserInfo - emailClient.Port = 25 - clsLogger.Add("==> Email erfolgreich an " & _mailempfaenger & " versendet!", False) - clsLogger.Add("==> Text: " & vBody, False) - clsLogger.Add("", False) - '*Send the message */ + End Try + client.StartTls() + Try + client.Login(mailUser, mailPW) + Catch ex As Exception + clsLogger.AddError(ex.Message, "clsEmail.SendMail(Client.Login)") + _error = True + client.Disconnect() + Continue For + End Try + Try + client.Send(message) + Catch ex As Exception + clsLogger.AddError(ex.Message, "clsEmail.SendMail(Client.Send)") + _error = True + client.Disconnect() + Continue For + End Try + client.Disconnect() - emailClient.Send(message) - If test = True Then - MsgBox("The testmail was send successfully", MsgBoxStyle.Information) - End If - Next - Return True - Catch ex As Exception - clsLogger.Add(ex.Message, True, "cls.SendEmail") - If test = True Then - MsgBox("Unexpected error in Send Testmail: " & ex.Message, MsgBoxStyle.Critical) - End If + Catch ex As Exception + clsLogger.AddError(ex.Message, "clsEmail.SendMail()") + _error = True + End Try + Next + clsLogger.WriteLog() + + If _error = True Then Return False - End Try + Else + Return True + End If End Function - End Class diff --git a/app/ClassWMResulthandler/clsLogger.vb b/app/ClassWMResulthandler/clsLogger.vb index d05e030..ec14232 100644 --- a/app/ClassWMResulthandler/clsLogger.vb +++ b/app/ClassWMResulthandler/clsLogger.vb @@ -85,13 +85,13 @@ Public Class clsLogger End If 'Präfixe schreiben If _error = True And Funktion <> "" Then - msg = ">> Achtung Fehler in Funktion '" & Funktion & "'" & vbNewLine & "Fehlermeldung: " + msg = ">> Unexpected error in function '" & Funktion & "': " ElseIf _error = True Then - msg = ">> Achtung Fehler:" & vbNewLine & "Fehlermeldung: " + msg = ">> Unexpected error: " End If 'Präfix und Meldung zusammenstellen msg &= text - log_string &= msg + log_string &= Now.ToString & " " & msg End Sub Public Shared Sub AddError(ByVal error_string As String, Optional ByVal Funktion As String = "") If Inited = False Then @@ -101,12 +101,12 @@ Public Class clsLogger 'Zuerst mal die Details schreiben WriteLog() 'Nun den eigentlichen Fehler loggen - Dim msg As String + Dim msg As String = Now.ToString 'Präfixe schreiben If Funktion <> "" Then - msg = ">> Achtung Fehler in Funktion '" & Funktion & "'" & vbNewLine & "Fehlermeldung: " + msg &= ">> Unexpected error in function '" & Funktion & "': " Else - msg = ">> Achtung Fehler:" & vbNewLine & "Fehlermeldung: " + msg &= ">> Unexpected error: " End If 'Präfix und Meldung zusammenstellen msg &= error_string @@ -145,6 +145,12 @@ Public Class clsLogger Public Shared Sub WriteLog() Try + If log_string = Nothing Then + Exit Sub + End If + If log_string = String.Empty Then + Exit Sub + End If 'Veruch das Log zu öffnen Dim fs As FileStream = New FileStream(LogFilename, FileMode.OpenOrCreate, FileAccess.Write) ' --- Stream öffnen diff --git a/app/ClassWMResulthandler/clsProfil.vb b/app/ClassWMResulthandler/clsProfil.vb index 8cf0ecf..22493f4 100644 --- a/app/ClassWMResulthandler/clsProfil.vb +++ b/app/ClassWMResulthandler/clsProfil.vb @@ -156,6 +156,7 @@ Public Class clsProfil Dim MAIL_USER As String = "" Dim MAIL_USER_PW As String = "" Dim MAIL_SSL As Boolean = False + Dim MAIL_PORT As String = "25" For Each emailrow As DataRow In ClassWMResulthandler.clsCURRENT.DT_TBDD_EMAIL.Rows If emailrow.Item("GUID") = CInt(EMAIL_PROFIL) Then @@ -164,6 +165,7 @@ Public Class clsProfil MAIL_USER = emailrow.Item("EMAIL_USER") MAIL_USER_PW = emailrow.Item("EMAIL_PW") MAIL_SSL = emailrow.Item("SSL_AUTH") + MAIL_PORT = emailrow.Item("PORT") End If Next @@ -192,7 +194,7 @@ Public Class clsProfil Email_Betreff = clsDateiverarbeitung.REGEX_REPLACE(WMdok, Email_Betreff) Email_Body = clsDateiverarbeitung.REGEX_REPLACE(WMdok, Email_Body) Dim FILENAME = ClassWMResulthandler.clsCURRENT.WDLAUFWERK & ":" & WMdok.aPath - clsEmail.Send_EMail(Email_Betreff, Email_Body, Email_Empfänger, MAILFROM, MAILSMTP, MAIL_USER, MAIL_USER_PW, MAIL_SSL, FILENAME) + clsEmail.Email_Send_Independentsoft(Email_Betreff, Email_Body, Email_Empfänger, MAILFROM, MAILSMTP, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_SSL, FILENAME) Else @@ -471,7 +473,7 @@ Public Class clsProfil Dim MAIL_USER As String = "" Dim MAIL_USER_PW As String = "" Dim MAIL_SSL As Boolean = False - + Dim MAIL_PORT As Integer For Each emailrow As DataRow In ClassWMResulthandler.clsCURRENT.DT_TBDD_EMAIL.Rows If emailrow.Item("GUID") = CInt(EMAIL_PROFIL) Then @@ -480,6 +482,7 @@ Public Class clsProfil MAIL_USER = emailrow.Item("EMAIL_USER") MAIL_USER_PW = emailrow.Item("EMAIL_PW") MAIL_SSL = emailrow.Item("SSL_AUTH") + MAIL_PORT = emailrow.Item("PORT") End If Next @@ -501,7 +504,7 @@ Public Class clsProfil Return False End If - clsEmail.Send_EMail(Email_Betreff, Email_Body, Email_Empfänger, MAILFROM, MAILSMTP, MAIL_USER, MAIL_USER_PW, MAIL_SSL, ClassWMResulthandler.clsCURRENT.CONCATTED_FILE) + clsEmail.Email_Send_Independentsoft(Email_Betreff, Email_Body, Email_Empfänger, MAILFROM, MAILSMTP, MAIL_PORT, MAIL_USER, MAIL_USER_PW, MAIL_SSL, ClassWMResulthandler.clsCURRENT.CONCATTED_FILE) Else diff --git a/app/ResultHandler_Konfig/My Project/AssemblyInfo.vb b/app/ResultHandler_Konfig/My Project/AssemblyInfo.vb index f223c3c..7e4f09e 100644 --- a/app/ResultHandler_Konfig/My Project/AssemblyInfo.vb +++ b/app/ResultHandler_Konfig/My Project/AssemblyInfo.vb @@ -8,7 +8,7 @@ Imports System.Runtime.InteropServices ' Die Werte der Assemblyattribute überprüfen - + @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - + diff --git a/app/ResultHandler_Konfig/frmMain.vb b/app/ResultHandler_Konfig/frmMain.vb index acaa125..d053baa 100644 --- a/app/ResultHandler_Konfig/frmMain.vb +++ b/app/ResultHandler_Konfig/frmMain.vb @@ -640,10 +640,7 @@ Public Class frmMain Sub Manual(ID As Integer) 'Try Dim notcompleted As Boolean = False - - ClassWMResulthandler.clsLogger.Add("", False) ClassWMResulthandler.clsLogger.Add("## Start Durchlauf WindreamResultHandler - " & Now & " ## ", False) - ClassWMResulthandler.clsLogger.Add("", False) 'windream initialisieren If ClassWMResulthandler.clsDatatabase.Init(My.Settings.SQLSERVER_CS) = True Then If _windream.Init() = True Then @@ -783,8 +780,12 @@ Public Class frmMain Dim PWPlain = wrapper.DecryptData(EMAIL_PWTextBox.Text) - ClassWMResulthandler.clsEmail.Send_EMail("Testmail DD Windream-ResultHandler", "This is the body (text will be replaced within profile)", txtTestmail.Text, - EMAIL_FROMTextBox.Text, EMAIL_SMTPTextBox.Text, EMAIL_USERTextBox.Text, PWPlain, CheckBoxSSL.CheckState, "", True) + If ClassWMResulthandler.clsEmail.Email_Send_Independentsoft("Testmail DD Windream-ResultHandler", "This is the body (text will be replaced within profile)", txtTestmail.Text, + EMAIL_FROMTextBox.Text, EMAIL_SMTPTextBox.Text, PORTTextBox.Text, EMAIL_USERTextBox.Text, PWPlain, CheckBoxSSL.CheckState, "") = True Then + MsgBox("Email was send successfully.", MsgBoxStyle.Information) + Else + MsgBox("Could not send the testmail. Please check the log.", MsgBoxStyle.Exclamation) + End If End If End Sub