Bodyauswertung

This commit is contained in:
Digital Data - Marlon Schreiber
2019-01-23 17:59:18 +01:00
parent 60ed01009a
commit 79d864c676
74 changed files with 126423 additions and 1072 deletions

View File

@@ -32,8 +32,8 @@ Public Class ClassCurrent
Public Shared CURRENT_MAIL_MESSAGE As Message
Public Shared CURRENT_TEMP_MAIL_PATH As String
Public Shared CURRENT_MAIL_BODY As String
Public Shared CURRENT_MAIL_BODY_Substr1 As String = ""
Public Shared CURRENT_MAIL_BODY_ALL As String
Public Shared CURRENT_MAIL_BODY_ANSWER1 As String = ""
Public Shared CURRENT_MAIL_BODY_Substr2 As String = ""
Public Shared CURRENT_MAIL_SUBJECT As String = ""
Public Shared CURRENT_MAIL_PROCESS_NAME As String
@@ -57,4 +57,7 @@ Public Class ClassCurrent
Public Shared MessageError As Boolean = False
Public Shared TEMP_FILES As List(Of String) = New List(Of String)
Public Shared TEMP_HTML_RESULTS As List(Of String) = New List(Of String)
Public Shared CURRENT_DEBUG_LOCAL_EMAIL As String
End Class

View File

@@ -43,7 +43,8 @@
<OptionInfer>On</OptionInfer>
</PropertyGroup>
<ItemGroup>
<Reference Include="DigitalData.Modules.Database">
<Reference Include="DigitalData.Modules.Database, Version=1.0.0.4, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\DDMonorepo\Modules.Database\bin\Debug\DigitalData.Modules.Database.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.Logging">

View File

@@ -3,8 +3,11 @@ Imports DigitalData.Modules.Logging
Public Class clsDatabase
Public connectionString As String
Private Logger As Logger
Private MyLogger As LogConfig
Sub New(LogConf As LogConfig, ConStr As String)
Logger = LogConf.GetLogger
MyLogger = LogConf
Init(ConStr)
End Sub
Public Function Init(ConString As String)
@@ -26,6 +29,7 @@ Public Class clsDatabase
TIMER_INTERVALL = DTCONFIG.Rows(0).Item("CHECK_INTERVALL_MINUTES")
End If
End If
MyLogger.Debug = LOG_ERRORS_ONLY
DT_ECM_BASE_CONFIG = Return_Datatable("select * from TBDD_BASECONFIG")
Try
WM_DRIVE = DT_ECM_BASE_CONFIG.Rows(0).Item("WM_DRIVE")

View File

@@ -16,30 +16,33 @@ Public Class clsEmailIMAP
Try
Logger.Info(String.Format("Working on IMAP_COLLECT....."))
Logger.Debug(String.Format("Working on IMAP_COLLECT....."))
Dim client As New ImapClient(MAIL_SERVER, MAIL_PORT)
Dim oClient As New ImapClient(MAIL_SERVER, MAIL_PORT)
'If LOG_ERRORS_ONLY = False Then
' Dim emaillogger As New Independentsoft.Email.Logger(My.Application.Info.DirectoryPath & "\Log\IDSoftMailLog.txt")
' AddHandler emaillogger.WriteLog, AddressOf OnWriteLog
'client.Logger = emaillogger
'End If
client.ValidateRemoteCertificate = False
client.Connect()
client.Login(MAIL_USER, MAIL_USER_PW)
client.SelectFolder("Inbox")
Dim envelopes As Envelope() = client.ListMessages()
For i As Integer = 0 To envelopes.Length - 1
If Not IsNothing(envelopes(i).Subject) Then
oClient.ValidateRemoteCertificate = False
oClient.Connect()
oClient.Login(MAIL_USER, MAIL_USER_PW)
oClient.SelectFolder("Inbox")
Dim oEnvelopes As Envelope() = oClient.ListMessages()
Dim oCount As Integer = 0
For i As Integer = 0 To oEnvelopes.Length - 1
If Not IsNothing(oEnvelopes(i).Subject) Then
'If envelopes(i).Subject.ToString.ToUpper.Contains("[PROCESSMANAGER]") Or envelopes(i).Subject.ToString.ToUpper.Contains("[ADDI]") Then
Logger.Info($"Working on email: UniqueID: {envelopes(i).UniqueID} - Subject:{envelopes(i).Subject} - Date {envelopes(i).Date.ToString}")
Dim message As Mime.Message = client.GetMessage(envelopes(i).UniqueID)
If Not IsNothing(message) Then
MAIL_LIST.Add(message)
Logger.Info($"Working on email: UniqueID: {oEnvelopes(i).UniqueID} - Subject:{oEnvelopes(i).Subject} - Date {oEnvelopes(i).Date.ToString}")
Dim oMessage As Mime.Message = oClient.GetMessage(oEnvelopes(i).UniqueID)
If Not IsNothing(oMessage) Then
oCount += 1
MAIL_LIST.Add(oMessage)
End If
'End If
End If
Next
client.Disconnect()
oClient.Disconnect()
Logger.Debug($"{oCOUNT.ToString} messages will be worked..")
Logger.Debug("IMAP_COLLECT finished!")
Return True
Catch ex As Exception

View File

@@ -19,30 +19,36 @@ Public Class clsEmail
Public Function POP3_COLLECT() As Boolean
Try
Logger.Debug(String.Format("Working on POP3_COLLECT....."))
Dim client As New Pop3Client(MAIL_SERVER, MAIL_PORT)
Dim oClient As New Pop3Client(MAIL_SERVER, MAIL_PORT)
client.ValidateRemoteCertificate = False
client.Connect()
oClient.ValidateRemoteCertificate = False
oClient.Connect()
Logger.Debug(String.Format("..connected!"))
client.Login(MAIL_USER, MAIL_USER_PW)
oClient.Login(MAIL_USER, MAIL_USER_PW)
Dim messageInfo As MessageInfo() = client.List()
Dim oMessageInfo As MessageInfo() = oClient.List()
Dim oCOUNT As Integer = 0
For i As Integer = 0 To oMessageInfo.Length - 1
For i As Integer = 0 To messageInfo.Length - 1
Dim message As Message = client.GetMessage(messageInfo(i).Index)
MAIL_LIST.Add(message)
Try
Logger.Debug(String.Format("Message [{0}] added", message.Subject))
Catch ex As Exception
End Try
Dim oMessage As Message = oClient.GetMessage(oMessageInfo(i).Index)
Dim oMsgId_AlreadyExists As Boolean = False
For Each pulled_msg As Message In MAIL_LIST
If pulled_msg.MessageID = oMessage.MessageID Then
oMsgId_AlreadyExists = True
End If
Next
If oMsgId_AlreadyExists = False Then
oCOUNT += 1
MAIL_LIST.Add(oMessage)
Logger.Debug(String.Format("Message [{0}] added to working Mail_List", oMessage.Subject))
End If
'client.Delete(messageInfo(i).Index)
Next
client.Disconnect()
Logger.Debug(String.Format(" POP3_COLLECT finished!"))
Logger.Debug($"{oCOUNT.ToString} messages will be worked..")
oClient.Disconnect()
Logger.Debug(String.Format("POP3_COLLECT finished!"))
Return True
Catch ex As Exception
Logger.Error(ex)

View File

@@ -174,7 +174,6 @@ Public Class clsWindream_allgemein
Return objektTypenStr
Catch ex As Exception
Logger.Error(ex)
Return objektTypenStr
End Try

View File

@@ -5,8 +5,11 @@ Imports DigitalData.EMLProfiler.ClassCurrent
Imports System.IO
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.Database
Imports System.Threading
Public Class clsWorkEmail
Private Shared Logger As Logger
Private MyLogger As LogConfig
Private _email As clsEmail
Private _Database As clsDatabase
Private _windream As clsWindream_allgemein
@@ -14,36 +17,62 @@ Public Class clsWorkEmail
Private _firebird As Firebird
Private _worked_email As Boolean = False
Sub New(LogConf As LogConfig, ConStr As String, FB_DATASOURCE As String, FB_DATABASE As String, FB_USER As String, FB_PW As String)
Logger = LogConf.GetLogger
_email = New clsEmail(LogConf)
_Database = New clsDatabase(LogConf, ConStr)
_windream = New clsWindream_allgemein(LogConf)
_windream_index = New clsWindream_Index(LogConf)
_firebird = New Firebird(LogConf, FB_DATASOURCE, FB_DATABASE, FB_USER, FB_PW)
Try
Logger = LogConf.GetLogger
MyLogger = LogConf
If LogConf.Debug = False Then
Logger.Info("Detail-Log is on")
End If
_email = New clsEmail(LogConf)
_Database = New clsDatabase(LogConf, ConStr)
_windream = New clsWindream_allgemein(LogConf)
_windream_index = New clsWindream_Index(LogConf)
If FB_DATASOURCE <> String.Empty Then
_firebird = New Firebird(LogConf, FB_DATASOURCE, FB_DATABASE, FB_USER, FB_PW)
End If
Catch ex As Exception
Logger.Error(ex)
End Try
End Sub
Public Function WORK_MAIL(msg As Message)
Try
CURRENT_MAIL_BODY = ""
CURRENT_MAIL_BODY_Substr1 = ""
CURRENT_MAIL_BODY_ALL = ""
CURRENT_MAIL_BODY_ANSWER1 = ""
CURRENT_MAIL_BODY_Substr2 = ""
CURRENT_MAIL_MESSAGE = msg
CURRENT_MAIL_SUBJECT = msg.Subject.ToUpper
If IsNothing(CURRENT_MAIL_SUBJECT) Then
CURRENT_MAIL_SUBJECT = ""
End If
SAVE2TEMP()
If CURRENT_MAIL_SUBJECT.Contains("[PROCESSMANAGER]") Then
PROCESS_MANAGER_IN()
ElseIf msg.Subject.Contains("[ADDI]") Then
Else
Logger.Debug(String.Format("No relation configured for this email - Subject[{0}]", msg.Subject))
COMMON_EMAIL_IN
Dim oTempMailExists As Boolean = SAVE2TEMP()
'Checking wether Mail can be opened
Dim oTempMailAccessible As Boolean = False
If oTempMailExists = True Then
Try
Dim oFS As FileStream = File.OpenRead(CURRENT_TEMP_MAIL_PATH)
oTempMailAccessible = True
Catch ex As Exception
Logger.Warn($"Could not read the Temp-Mail. Insufficient rights? Message: {ex.Message}")
End Try
If oTempMailAccessible = True Then
If CURRENT_MAIL_SUBJECT.Contains("[PROCESSMANAGER]") Then
PROCESS_MANAGER_IN()
ElseIf msg.Subject.Contains("[ADDI]") Then
Else
Logger.Debug(String.Format("No relation configured for this email - Subject[{0}]", msg.Subject))
COMMON_EMAIL_IN()
End If
INSERT_HISTORY()
End If
End If
INSERT_HISTORY
Catch ex As Exception
Logger.Error(ex)
'clsLogger.Add("Unexpected Error in WORK_MAIL: " & ex.Message & "MESSAGE_ID: " & msg.MessageID)
@@ -65,10 +94,11 @@ Public Class clsWorkEmail
WM_OBJEKTTYPE = row("WM_OBJEKTTYPE")
WM_IDX_BODY_TEXT = row("WM_IDX_BODY_TEXT")
WM_IDX_BODY_SUBSTR_LENGTH = row("WM_IDX_BODY_SUBSTR_LENGTH")
oDel_email = row("DELETE_MAIL")
COPY2HDD(row("COPY_2_HDD"), row("PATH_EMAIL_TEMP"), row("PATH_EMAIL_ERRORS"), False)
EXTRACT_BODY()
oDel_email = row("DELETE_MAIL")
Next
If CURRENT_MAIL_SUBJECT.Contains("[PROCESSMANAGER][EA]") Then
@@ -76,9 +106,9 @@ Public Class clsWorkEmail
Logger.Debug(String.Format("Message referencing to EASY-APPROVAL...."))
CURRENT_MAIL_PROCESS_NAME = "DD EasyApproval via Mail"
If CURRENT_MAIL_BODY_Substr1 <> "" Then
If CURRENT_MAIL_BODY_ANSWER1 <> "" Then
MessageError = False
If GET_DOC_INFO() = True Then
If GET_WMDOC_INFO() = True Then
If DT_STEPS.Rows.Count > 0 Then
WORK_POLL_STEPS()
Else
@@ -87,7 +117,10 @@ Public Class clsWorkEmail
End If
End If
EMAIL_DELETE(oDel_email)
If ClassCurrent.CURRENT_DEBUG_LOCAL_EMAIL = "" Then
EMAIL_DELETE(oDel_email)
End If
End If
Return True
Catch ex As Exception
@@ -127,26 +160,67 @@ Public Class clsWorkEmail
EXTRACT_BODY()
oDel_email = row("DELETE_MAIL")
Next
EMAIL_DELETE(oDel_email)
If ClassCurrent.CURRENT_DEBUG_LOCAL_EMAIL = "" Then
EMAIL_DELETE(oDel_email)
End If
Return True
Catch ex As Exception
Logger.Error(ex)
'Logger.Debug("Unexpected Error in PROCESS_MANAGER_IN: " & ex.Message & "MESSAGE_ID: " & CURRENT_MAIL_MESSAGE.MessageID)
Return False
'Logger.Debug("Unexpected Error in PROCESS_MANAGER_IN: " & ex.Message & "MESSAGE_ID: " & CURRENT_MAIL_MESSAGE.MessageID)
Return False
End Try
End Function
Private Function SAVE2TEMP()
Try
Dim oTempFilename As String = Path.Combine(Path.GetTempPath, CURRENT_MAIL_MESSAGE.GetFileName)
Dim oTempPath As String = Path.Combine(Path.GetTempPath, "DD_EmailProfiler")
If Directory.Exists(oTempPath) = False Then
Directory.CreateDirectory(oTempPath)
End If
Dim oFileEntries As String() = Directory.GetFiles(oTempPath)
' Process the list of files found in the directory.
Dim oFileName As String
For Each oFileName In oFileEntries
Try
File.Delete(oFileName)
Catch ex As Exception
End Try
Next oFileName
Dim oResult As Boolean = False
Dim oTempFilename As String = Path.Combine(oTempPath, CURRENT_MAIL_MESSAGE.GetFileName)
Dim oCounter As Integer = 1
If File.Exists(oTempFilename) = True Then
File.Delete(oTempFilename)
Do While File.Exists(oTempFilename)
oCounter += 1
oTempFilename = Path.Combine(oTempPath, oCounter & "_" & CURRENT_MAIL_MESSAGE.GetFileName)
Loop
End If
CURRENT_MAIL_MESSAGE.Save(oTempFilename, True)
CURRENT_TEMP_MAIL_PATH = oTempFilename
Logger.Debug($"Email saved to Temppath {CURRENT_TEMP_MAIL_PATH}")
oCounter = 0
Dim oCancel As Boolean
Do While File.Exists(CURRENT_TEMP_MAIL_PATH) = False
Thread.Sleep(1000)
oCounter += 1
If oCounter > 10 Then
Logger.Warn("It took to long to save the mail to Temppath!")
oCancel = True
Exit Do
End If
Loop
If oCancel = True Then
oResult = False
Else
If File.Exists(CURRENT_TEMP_MAIL_PATH) Then
oResult = True
End If
End If
'Datei in Array zum Templöschen speichern
TEMP_FILES.Add(oTempFilename)
Return oResult
Catch ex As Exception
Logger.Error(ex)
CURRENT_TEMP_MAIL_PATH = Nothing
@@ -184,116 +258,190 @@ Public Class clsWorkEmail
End Try
End Function
Private Function EXTRACT_BODY()
Dim oDTFunctionRegex As DataTable = _Database.Return_Datatable("SELECT * FROM TBDD_FUNCTION_REGEX WHERE FUNCTION_NAME = 'EMAIL_PROFILER - BODY REMOVE NewLine'")
If CURRENT_TEMP_MAIL_PATH <> Nothing Then
If File.Exists(CURRENT_TEMP_MAIL_PATH) Then
Dim msg_email As New Independentsoft.Email.Mime.Message(CURRENT_TEMP_MAIL_PATH)
If IsNothing(msg_email.Body) Then
Dim oAllBodyParts As New BodyPartCollection()
oAllBodyParts.Add(msg_email.BodyParts)
oAllBodyParts.Add(GetChildren(msg_email.BodyParts))
TEMP_HTML_RESULTS.Clear()
Dim oDTFunctionRegex As DataTable = _Database.Return_Datatable("SELECT * FROM TBDD_FUNCTION_REGEX WHERE FUNCTION_NAME IN ('EMAIL_PROFILER - RemoveHTMLText','EMAIL_PROFILER - BODY REMOVE NewLine','EMAIL_PROFILER - BODY_ANSWER_GROUP')")
For Each bodyPart As BodyPart In oAllBodyParts
If bodyPart.ContentType IsNot Nothing AndAlso bodyPart.ContentType.Type = "text" AndAlso bodyPart.ContentType.SubType = "plain" Then
Logger.Debug(String.Format("BODY1-Text is....#{0}", bodyPart.Body))
If CURRENT_MAIL_BODY <> bodyPart.Body Then
CURRENT_MAIL_BODY = bodyPart.Body
End If
ElseIf bodyPart.ContentType IsNot Nothing AndAlso bodyPart.ContentType.Type = "text" AndAlso bodyPart.ContentType.SubType = "html" Then
Logger.Debug(String.Format("bodyhtml....#{0}", bodyPart.Body))
If CURRENT_MAIL_BODY = "" Then
CURRENT_MAIL_BODY = bodyPart.Body
Logger.Debug(String.Format("bodyhtml....#{0}", bodyPart.Body))
Dim msg_email As New Independentsoft.Email.Mime.Message(CURRENT_TEMP_MAIL_PATH)
If IsNothing(msg_email.Body) Then
Dim oAllBodyParts As New BodyPartCollection()
oAllBodyParts.Add(msg_email.BodyParts)
oAllBodyParts.Add(GetChildren(msg_email.BodyParts))
End If
End If
Next
Else
CURRENT_MAIL_BODY = msg_email.Body
For Each bodyPart As BodyPart In oAllBodyParts
If bodyPart.ContentType IsNot Nothing AndAlso bodyPart.ContentType.Type = "text" AndAlso bodyPart.ContentType.SubType = "plain" Then
Logger.Debug(String.Format("BODY1-Text is....#{0}", bodyPart.Body))
If CURRENT_MAIL_BODY_ALL <> bodyPart.Body Then
CURRENT_MAIL_BODY_ALL = bodyPart.Body
End If
ElseIf bodyPart.ContentType IsNot Nothing AndAlso bodyPart.ContentType.Type = "text" AndAlso bodyPart.ContentType.SubType = "html" Then
Logger.Debug(String.Format("bodyhtml....#{0}", bodyPart.Body))
If CURRENT_MAIL_BODY_ALL = "" Then
CURRENT_MAIL_BODY_ALL = bodyPart.Body
Logger.Debug(String.Format("bodyhtml....#{0}", bodyPart.Body))
End If
End If
Else
Logger.Warn($"If cause 2: {CURRENT_TEMP_MAIL_PATH} not existing")
End If
Next
Else
Logger.Warn($"EXTRACT_BODY If cause 1: CURRENT_TEMP_MAIL_PATH is NOTHING")
CURRENT_MAIL_BODY_ALL = msg_email.Body
End If
If CURRENT_MAIL_BODY_ALL.StartsWith("<html") Then
Try
Dim pattern1 As String = ""
For Each oRow As DataRow In oDTFunctionRegex.Rows
If oRow.Item("FUNCTION_NAME") = "EMAIL_PROFILER - RemoveHTMLText" Then
pattern1 = oRow.Item("REGEX")
End If
Next
If pattern1 = String.Empty Then
Exit Try
End If
' Instantiate the regular expression object.
Dim r As Regex = New Regex(pattern1, RegexOptions.Multiline)
' Match the regular expression pattern against a text string.
Dim m As Match = r.Match(CURRENT_MAIL_BODY_ALL)
Dim oClearedBodyText = CURRENT_MAIL_BODY_ALL
Do While m.Success
oClearedBodyText = oClearedBodyText.Replace(m.Value, "")
'Dim g As Group = m.Groups(1)
'If g.ToString.StartsWith("&") = False Then
' TEMP_HTML_RESULTS.Add(g.ToString())
'End If
m = m.NextMatch()
Loop
Logger.Info($"Cleared bodytext is: {oClearedBodyText}")
CURRENT_MAIL_BODY_ALL = Trim(oClearedBodyText)
Catch ex As Exception
End Try
'If TEMP_HTML_RESULTS.Count = 0 Then
' Logger.Warn("HTML Recognition via Regex could not create a match within this mail - So the answer will interpreted as empty!")
'End If
End If
Try
'Dim oAllBodyParts As New BodyPartCollection()
'oAllBodyParts.Add(CURRENT_MAIL_MESSAGE.BodyParts)
'oAllBodyParts.Add(GetChildren(CURRENT_MAIL_MESSAGE.BodyParts))
'For Each bodyPart As BodyPart In oAllBodyParts
' If bodyPart.ContentType IsNot Nothing AndAlso bodyPart.ContentType.Type = "text" AndAlso bodyPart.ContentType.SubType = "plain" Then
' Logger.Debug(String.Format("BODY1-Text is....#{0}", bodyPart.Body))
' CURRENT_MAIL_BODY = bodyPart.Body
' ElseIf bodyPart.ContentType IsNot Nothing AndAlso bodyPart.ContentType.Type = "text" AndAlso bodyPart.ContentType.SubType = "html" Then
' Logger.Debug(String.Format("bodyhtml....#{0}", bodyPart.Body))
' If CURRENT_MAIL_BODY = "" Then
' CURRENT_MAIL_BODY = bodyPart.Body
' Logger.Debug(String.Format("bodyhtml....#{0}", bodyPart.Body))
' End If
' End If
'Next
CURRENT_MAIL_BODY = Trim(CURRENT_MAIL_BODY)
If CURRENT_MAIL_BODY = String.Empty Then
If CURRENT_MAIL_BODY_ALL = String.Empty Then
Logger.Warn("Mailbody is empty. Email can not be processed! - Please check the html-structure")
Logger.Info("EXCEPTION - Mailbody is empty.Email can not be processed! - Please check the html-structure")
MessageError = True
Return False
Else
Logger.Debug($"Length of Body is [{CURRENT_MAIL_BODY_ALL.Length}] - Body Text is [{CURRENT_MAIL_BODY_ALL}]")
End If
Dim oFirstindex = CURRENT_MAIL_BODY.IndexOf(Chr(13))
If IsNothing(oFirstindex) Then
oFirstindex = CURRENT_MAIL_BODY.IndexOf(Chr(10))
End If
Logger.Debug(String.Format("firstindex....[{0}]", oFirstindex))
Try
CURRENT_MAIL_BODY_Substr1 = CURRENT_MAIL_BODY.Substring(0, oFirstindex)
CURRENT_MAIL_BODY_Substr1 = RTrim(LTrim(CURRENT_MAIL_BODY_Substr1))
Catch ex As Exception
Logger.Warn("Error in Substring 144: " & ex.Message)
Logger.Warn("CURRENT_MAIL_BODY: " & CURRENT_MAIL_BODY)
Logger.Warn("oFirstindex: " & oFirstindex)
CURRENT_MAIL_BODY_Substr1 = ""
End Try
Logger.Debug(String.Format("MailBody-Substring:...[{0}]", CURRENT_MAIL_BODY_Substr1))
'now trying to get the text before Masterline
If WM_IDX_BODY_TEXT <> String.Empty And WM_IDX_BODY_SUBSTR_LENGTH <> 0 And oDTFunctionRegex.Rows.Count = 1 Then
Dim pattern As String = oDTFunctionRegex.Rows(0).Item("REGEX")
' Instantiate the regular expression object.
Dim r As Regex = New Regex(pattern, RegexOptions.Multiline)
' Match the regular expression pattern against a text string.
Dim m As Match = r.Match(CURRENT_MAIL_BODY)
If m.Success Then
If Not IsNothing(m.Value) Then
If m.Value.Length > WM_IDX_BODY_SUBSTR_LENGTH Then
Try
Logger.Debug($"Getting the Substring of body - Length: {WM_IDX_BODY_SUBSTR_LENGTH}...")
CURRENT_MAIL_BODY_Substr2 = m.Value.Substring(0, WM_IDX_BODY_SUBSTR_LENGTH)
Catch ex As Exception
Logger.Warn("Error in Substring 168: " & ex.Message)
Logger.Warn("m.Value: " & m.Value)
Logger.Warn("WM_IDX_BODY_SUBSTR_LENGTH: " & WM_IDX_BODY_SUBSTR_LENGTH.ToString)
CURRENT_MAIL_BODY_Substr2 = ""
End Try
Else
Logger.Info($"m.Value.Length < WM_IDX_BODY_SUBSTR_LENGTH, so simply m.Value will be taken...")
CURRENT_MAIL_BODY_Substr2 = m.Value
End If
End If
CURRENT_MAIL_BODY_ALL = CURRENT_MAIL_BODY_ALL.Replace(vbLf, "")
Dim oSplit = CURRENT_MAIL_BODY_ALL.Split(Environment.NewLine)
Dim oCount As Integer = 0
Dim oReadLength As Integer = 0
Dim oAnswer2 As String
For Each ostr As String In oSplit
ostr = ostr.Replace(vbCrLf, "")
If ostr = String.Empty Then
Continue For
End If
oCount += 1
If oCount = 1 Then
CURRENT_MAIL_BODY_ANSWER1 = ostr
Else
If oCount = 2 Then
CURRENT_MAIL_BODY_Substr2 = ostr
Else
If ((oReadLength + ostr.Length) >= WM_IDX_BODY_SUBSTR_LENGTH) Or ostr.StartsWith("##") Then
Exit For
End If
CURRENT_MAIL_BODY_Substr2 = CURRENT_MAIL_BODY_Substr2 & vbNewLine & ostr
End If
oReadLength += ostr.Length
End If
Next
Logger.Debug(String.Format("MailBody-Substring After RecognizeString:...[{0}]", CURRENT_MAIL_BODY_Substr2))
'Dim oFirstindex = CURRENT_MAIL_BODY_ALL.IndexOf(Chr(13))
'If IsNothing(oFirstindex) Then
' oFirstindex = CURRENT_MAIL_BODY_ALL.IndexOf(Chr(10))
'End If
'Logger.Debug(String.Format("firstindex....[{0}]", oFirstindex))
'If oFirstindex = -1 Then
' Logger.Warn("Could not find the first carriage-return in Mail-Body. Email can not be processed!")
' MessageError = True
' Return False
'End If
'If CURRENT_MAIL_BODY_ALL.StartsWith("<html") Then
' If TEMP_HTML_RESULTS.Count > 0 Then
' End If
'Else
' Try
' CURRENT_MAIL_BODY_ANSWER1 = CURRENT_MAIL_BODY_ALL.Substring(0, oFirstindex)
' CURRENT_MAIL_BODY_ANSWER1 = RTrim(LTrim(CURRENT_MAIL_BODY_ANSWER1))
' Catch ex As Exception
' Logger.Warn("Error in Substring 144: " & ex.Message)
' Logger.Warn("CURRENT_MAIL_BODY: " & CURRENT_MAIL_BODY_ALL)
' Logger.Warn("oFirstindex: " & oFirstindex)
' CURRENT_MAIL_BODY_ANSWER1 = ""
' End Try
'End If
Logger.Debug(String.Format("MailBody-ANSWER1:...[{0}]", CURRENT_MAIL_BODY_ANSWER1))
Logger.Debug(String.Format("MailBody-ANSWER2:...[{0}]", CURRENT_MAIL_BODY_Substr2))
'now trying to get the text before Masterline
'If WM_IDX_BODY_TEXT <> String.Empty And WM_IDX_BODY_SUBSTR_LENGTH <> 0 And oDTFunctionRegex.Rows.Count >= 1 Then
' If CURRENT_MAIL_BODY_ALL.StartsWith("<html") Then
' Dim oTempBodyString As String = ""
' oCount = 0
' For Each _oAnswer1 In TEMP_HTML_RESULTS
' If oCount = 0 Then
' oTempBodyString = _oAnswer1
' Else
' oTempBodyString &= vbNewLine & _oAnswer1
' End If
' oCount += 1
' Next
' CURRENT_MAIL_BODY_Substr2 = oTempBodyString
' Else
' Dim pattern As String = oDTFunctionRegex.Rows(0).Item("REGEX")
' ' Instantiate the regular expression object.
' Dim r As Regex = New Regex(pattern, RegexOptions.Multiline)
' ' Match the regular expression pattern against a text string.
' Dim m As Match = r.Match(CURRENT_MAIL_BODY_ALL)
' If m.Success Then
' If Not IsNothing(m.Value) Then
' If m.Value.Length > WM_IDX_BODY_SUBSTR_LENGTH Then
' Try
' Logger.Debug($"Getting the Substring of body - Length: {WM_IDX_BODY_SUBSTR_LENGTH}...")
' CURRENT_MAIL_BODY_Substr2 = m.Value.Substring(0, WM_IDX_BODY_SUBSTR_LENGTH)
' Catch ex As Exception
' Logger.Warn("Error in Substring 168: " & ex.Message)
' Logger.Warn("m.Value: " & m.Value)
' Logger.Warn("WM_IDX_BODY_SUBSTR_LENGTH: " & WM_IDX_BODY_SUBSTR_LENGTH.ToString)
' CURRENT_MAIL_BODY_Substr2 = ""
' End Try
' Else
' Logger.Info($"m.Value.Length [{m.Value.Length}] < WM_IDX_BODY_SUBSTR_LENGTH [{WM_IDX_BODY_SUBSTR_LENGTH}], so simply m.Value [{m.Value}] will be taken...")
' CURRENT_MAIL_BODY_Substr2 = m.Value
' End If
' End If
' End If
' Logger.Debug(String.Format("MailBody-Substring After RecognizeString:...[{0}]", CURRENT_MAIL_BODY_Substr2))
' End If
'End If
If CURRENT_MAIL_BODY_ANSWER1 = String.Empty Then
Logger.Warn("CURRENT_MAIL_BODY_ANSWER1 is String.Empty: So the answer will interpreted as empty!")
End If
Catch ex As Exception
Logger.Error(ex)
'clsLogger.Add("Unexpected Error in COPY2HDD: " & ex.Message & "MESSAGE_ID: " & CURRENT_MAIL_MESSAGE.MessageID, True)
@@ -351,8 +499,8 @@ Public Class clsWorkEmail
$"'{CURRENT_MAIL_MESSAGE.MessageID.Replace("<", "").Replace(">", "")}'," &
$"'{CURRENT_MAIL_MESSAGE.Subject}'," &
$"'{CURRENT_MAIL_MESSAGE.Date}'," &
$"'{CURRENT_MAIL_BODY}'," &
$"'{CURRENT_MAIL_BODY_Substr1}'," &
$"'{CURRENT_MAIL_BODY_ALL}'," &
$"'{CURRENT_MAIL_BODY_ANSWER1}'," &
$"'{CURRENT_MAIL_BODY_Substr2}')"
_Database.Execute_non_Query(ins)
@@ -366,8 +514,8 @@ Public Class clsWorkEmail
$"'{CURRENT_MAIL_MESSAGE.From.EmailAddress}'," &
$"'{CURRENT_MAIL_MESSAGE.Subject}'," &
$"'{CURRENT_MAIL_MESSAGE.Date}'," &
$"'{CURRENT_MAIL_BODY}'," &
$"'{CURRENT_MAIL_BODY_Substr1}'," &
$"'{CURRENT_MAIL_BODY_ALL}'," &
$"'{CURRENT_MAIL_BODY_ANSWER1}'," &
$"'{CURRENT_MAIL_BODY_Substr2}'," &
$"'{ATTMT1}')"
_firebird.ExecuteNonQuery(ins)
@@ -403,7 +551,7 @@ Public Class clsWorkEmail
KEYWORDS_SPLIT = POLL_KEYWORDS.Split(";")
For Each str As String In KEYWORDS_SPLIT
If CURRENT_MAIL_BODY_Substr1.ToUpper = str.ToUpper Then
If CURRENT_MAIL_BODY_ANSWER1.ToUpper = str.ToUpper Then
_worked_email = True
Logger.Info(String.Format("Found Keyword '{0}' in MessageBody", str))
Dim sql As String = String.Format("SELECT * FROM TBEMLP_POLL_INDEXING_STEPS WHERE STEP_ID = {0} AND ACTIVE = 1", POLL_STEP_GUID)
@@ -431,6 +579,7 @@ Public Class clsWorkEmail
IndexFile(WM_VECTOR_LOG, msg, False)
End If
'Now indexing the Body-Message Index
If CURRENT_MAIL_BODY_Substr2 <> String.Empty And WM_IDX_BODY_TEXT <> String.Empty Then
IndexFile(WM_IDX_BODY_TEXT, CURRENT_MAIL_BODY_Substr2, True)
End If
@@ -511,22 +660,22 @@ Public Class clsWorkEmail
End If
End Function
Private Function GET_DOC_INFO()
Private Function GET_WMDOC_INFO()
Try
Dim DOC_ID = REGEX_CHECK_DOC_ID(CURRENT_MAIL_SUBJECT)
If Not IsNothing(DOC_ID) Then
Dim DT_BASE_ATTR As DataTable = _Database.Return_DatatableCS("SELECT * FROM BaseAttributes WHERE dwDocID = " & DOC_ID, WM_CON_STRING)
If Not IsNothing(DT_BASE_ATTR) Then
If DT_BASE_ATTR.Rows.Count = 1 Then
CURRENT_DOC_ID = DOC_ID
Dim sql = String.Format("Select[dbo].[FNDD_GET_WINDREAM_FILE_PATH]({0},'{1}')", CURRENT_DOC_ID, WM_DRIVE)
CURRENT_DOC_PATH = _Database.Execute_Scalar(sql)
Logger.Debug("CURRENT_DOC_PATH: " & CURRENT_DOC_PATH)
Dim oDOC_ID = REGEX_CHECK_DOC_ID(CURRENT_MAIL_SUBJECT.Replace("10636", "133092").Replace("10644", "133092"))
If Not IsNothing(oDOC_ID) Then
Dim oDT_BASE_ATTR As DataTable = _Database.Return_DatatableCS("SELECT * FROM BaseAttributes WHERE dwDocID = " & oDOC_ID, WM_CON_STRING)
If Not IsNothing(oDT_BASE_ATTR) Then
If oDT_BASE_ATTR.Rows.Count = 1 Then
CURRENT_DOC_ID = oDOC_ID
Dim oSql = String.Format("Select[dbo].[FNDD_GET_WINDREAM_FILE_PATH]({0},'{1}')", CURRENT_DOC_ID, WM_DRIVE)
CURRENT_DOC_PATH = _Database.Execute_Scalar(oSql)
Logger.Debug("CURRENT_DOC_PATH is: " & CURRENT_DOC_PATH)
CURRENT_WM_DOC = Nothing
Dim WMDOC As WMObject
Dim oWMDOC As WMObject
Try
WMDOC = _windream.oSession.GetWMObjectByPath(WMEntity.WMEntityDocument, CURRENT_DOC_PATH.Substring(2))
CURRENT_WM_DOC = WMDOC
oWMDOC = _windream.oSession.GetWMObjectByPath(WMEntity.WMEntityDocument, CURRENT_DOC_PATH.Substring(2))
CURRENT_WM_DOC = oWMDOC
Return True
Catch ex As Exception
Logger.Warn("error while creating WMObject in (GET_DOC_INFO): " & ex.Message)
@@ -534,7 +683,7 @@ Public Class clsWorkEmail
End Try
Else
Logger.Warn("No record found for dwDocID " & DOC_ID)
Logger.Warn("No record found for dwDocID " & oDOC_ID)
Return False
End If

View File

@@ -13,7 +13,7 @@ Public Class clsWorker
Private _wrapper As clsEncryption
Private _POLL_PROFILEID As Integer = 0
Dim cs As String
Sub New(LogConf As LogConfig, ConStr As String, POLL_PROFILEID As Integer, FB_DATASOURCE As String, FB_DATABASE As String, FB_USER As String, FB_PW As String)
Sub New(LogConf As LogConfig, ConStr As String, POLL_PROFILEID As Integer, FB_DATASOURCE As String, FB_DATABASE As String, FB_USER As String, FB_PW As String, Optional localeml As String = "")
Logger = LogConf.GetLogger
_email = New clsEmail(LogConf)
_emailIMAP = New clsEmailIMAP(LogConf)
@@ -24,12 +24,23 @@ Public Class clsWorker
_workmail = New clsWorkEmail(LogConf, ConStr, FB_DATASOURCE, FB_DATABASE, FB_USER, FB_PW)
_wrapper = New clsEncryption("!35452didalog=", LogConf)
_POLL_PROFILEID = POLL_PROFILEID
ClassCurrent.CURRENT_DEBUG_LOCAL_EMAIL = localeml
End Sub
Public Sub Start_WorkingProfiles()
Public Sub Debug_Local_Email()
Try
Catch ex As Exception
End Try
End Sub
Public Sub Start_WorkingProfiles(Optional LocalEmail As Boolean = False)
Try
TEMP_FILES.Clear()
If _Database.Init(cs) = True Then
Logger.Debug("now windream_init...... ")
Logger.Debug("now windream_init... ")
If _windream.Init = True Then
Logger.Debug("windream_initialized!")
@@ -45,8 +56,8 @@ Public Class clsWorker
If Not IsNothing(DT_PROFILES) Then
If DT_PROFILES.Rows.Count > 0 Then
Logger.Debug("count of active profiles: " & DT_PROFILES.Rows.Count.ToString)
For Each DR As DataRow In DT_PROFILES.Rows
CURRENT_PROFILE_GUID = DR.Item("GUID")
For Each oDR_Profile As DataRow In DT_PROFILES.Rows
CURRENT_PROFILE_GUID = oDR_Profile.Item("GUID")
DT_POLL_PROCESS = Nothing
Dim sql = String.Format("SELECT * FROM TBEMLP_POLL_PROCESS WHERE PROFILE_ID = {0} AND ACTIVE = 1", CURRENT_PROFILE_GUID)
DT_POLL_PROCESS = _Database.Return_Datatable(sql)
@@ -70,9 +81,9 @@ Public Class clsWorker
MAIL_USER = ""
MAIL_USER_PW = ""
CURRENT_POLL_TYPE = DR.Item("POLL_TYPE")
Logger.Info(String.Format("Working on profile: ({0}-{1}-{2}) ", DR.Item("GUID"), DR.Item("PROFILE_NAME"), CURRENT_POLL_TYPE))
CURRENT_EMAIL_GUID = DR.Item("EMAIL_CONF_ID")
CURRENT_POLL_TYPE = oDR_Profile.Item("POLL_TYPE")
Logger.Info(String.Format("Working on profile: ({0}-{1}-{2}) ", oDR_Profile.Item("GUID"), oDR_Profile.Item("PROFILE_NAME"), CURRENT_POLL_TYPE))
CURRENT_EMAIL_GUID = oDR_Profile.Item("EMAIL_CONF_ID")
Dim EMAIL_PROF_TABLE As DataTable = DT_TBDD_EMAIL
'Presuming the DataTable has a column named Date.
@@ -105,12 +116,19 @@ Public Class clsWorker
If MAIL_SERVER <> "" Then
Dim pollresult As Boolean = False
Select Case CURRENT_POLL_TYPE
Case "POP"
pollresult = _email.POP3_COLLECT()
Case "IMAP"
pollresult = _emailIMAP.IMAP_COLLECT()
End Select
If LocalEmail = True Then
pollresult = True
Dim oMessage As New Message(CURRENT_DEBUG_LOCAL_EMAIL)
MAIL_LIST.Add(oMessage)
Else
Select Case CURRENT_POLL_TYPE
Case "POP"
pollresult = _email.POP3_COLLECT()
Case "IMAP"
pollresult = _emailIMAP.IMAP_COLLECT()
End Select
End If
If pollresult = False Then
Logger.Warn(String.Format("Error while polling emails...."))
@@ -129,7 +147,7 @@ Public Class clsWorker
Logger.Warn("For the Email-Profile ID " & CURRENT_EMAIL_GUID & " no record could be found!")
End If
_Database.Execute_non_Query("UPDATE TBEMLP_POLL_PROFILES SET LAST_TICK = GETDATE() WHERE GUID = " & DR.Item("GUID").ToString)
_Database.Execute_non_Query("UPDATE TBEMLP_POLL_PROFILES SET LAST_TICK = GETDATE() WHERE GUID = " & oDR_Profile.Item("GUID").ToString)
Else
Logger.Warn("For the Email-Profile ID " & CURRENT_EMAIL_GUID & " no record could be found! Check wether Email-Profile is active!")
End If