shorten subject to 100 chars when writing mail to disk, clean up, wip mail container

This commit is contained in:
Jonathan Jenne 2022-08-04 10:30:32 +02:00
parent 9013adbabd
commit 4717f2d737
6 changed files with 138 additions and 82 deletions

View File

@ -99,7 +99,6 @@
<Import Include="System.Threading.Tasks" />
</ItemGroup>
<ItemGroup>
<Compile Include="Class1.vb" />
<Compile Include="frmMain.vb">
<SubType>Form</SubType>
</Compile>

View File

@ -1,3 +0,0 @@
Public Class Class1
End Class

View File

@ -6,72 +6,68 @@ Imports MailBox = Limilabs.Mail.Headers.MailBox
Imports Limilabs.Client.IMAP
Public Class ClassCurrent
Public Shared WM_CON_STRING As String
Public Shared WM_DRIVE As String
Public Shared TIMER_INTERVALL As Integer = 5
Public Shared Property WM_CON_STRING As String
Public Shared Property WM_DRIVE As String
Public Shared Property TIMER_INTERVALL As Integer = 5
Public Shared LOG_INITIALIZED As Boolean = False
Public Shared CURRENT_FILEIN_WD As String
Public Shared CURRENT_IMPORT_ID As Integer
Public Shared Property CURRENT_EMAIL_GUID As Integer
Public Shared Property CURRENT_PROFILE_GUID As Integer
Public Shared Property DTCONFIG As DataTable
Public Shared Property DT_ECM_BASE_CONFIG As DataTable
Public Shared Property PATH_TEMP As String
Public Shared Property PATH_ERROR As String
Public Shared CURRENT_EMAIL_GUID As Integer
Public Shared CURRENT_PROFILE_GUID As Integer
Public Shared DTCONFIG As DataTable
Public Shared DT_ECM_BASE_CONFIG As DataTable
Public Shared PATH_TEMP As String
Public Shared PATH_ERROR As String
Public Shared Property MAIL_BODY_FONT As String = ""
Public Shared Property MAIL_FROM As String = ""
Public Shared Property MAIL_SERVER As String = ""
Public Shared Property MAIL_USER As String = ""
Public Shared Property MAIL_USER_PW As String = ""
Public Shared Property MAIL_PORT As Integer = 995
Public Shared Property MAIL_INBOX_NAME As String = "Inbox"
Public Shared Property MAIL_ARCHIVE_FOLDER As String = ""
Public Shared Property MAIL_AUTHTYPE As String
Public Shared Property DT_POLL_PROCESS As DataTable
Public Shared Property DT_STEPS As DataTable
Public Shared Property DT_INDEXING_STEPS As DataTable
Public Shared MAIL_BODY_FONT As String = ""
Public Shared MAIL_FROM As String = ""
Public Shared MAIL_SERVER As String = ""
Public Shared MAIL_USER As String = ""
Public Shared MAIL_USER_PW As String = ""
Public Shared MAIL_PORT As Integer = 995
Public Shared MAIL_INBOX_NAME As String = "Inbox"
Public Shared MAIL_ARCHIVE_FOLDER As String = ""
Public Shared MAIL_AUTHTYPE As String
Public Shared DT_POLL_PROCESS As DataTable
Public Shared DT_STEPS As DataTable
Public Shared DT_INDEXING_STEPS As DataTable
' Public Shared Property oCURRENT_WORKMAIL_LIST As New ArrayList()
Public Shared Property CURRENT_WORKMAIL_UID_LIST As New List(Of Long)
' Public Shared oCURRENT_WORKMAIL_LIST As New ArrayList()
Public Shared CURRENT_WORKMAIL_UID_LIST As New List(Of Long)
Public Shared Property CURRENT_MAIL_MESSAGE As IMail
Public Shared Property CURRENT_TEMP_MAIL_PATH As String
Public Shared Property CURRENT_MAIL_BODY_ALL As String
Public Shared Property CURRENT_MAIL_BODY_ANSWER1 As String = ""
Public Shared Property CURRENT_MAIL_BODY_Substr2 As String = ""
Public Shared Property CURRENT_MAIL_SUBJECT As String = ""
Public Shared Property CURRENT_MAIL_FROM As String = ""
Public Shared Property CURRENT_MAIL_MESSAGE_ID As String = ""
Public Shared Property CURRENT_MAIL_UID As Long
Public Shared Property CURRENT_MAIL_PROCESS_NAME As String
Public Shared Property CURRENT_ImapObject As Imap
Public Shared CURRENT_MAIL_MESSAGE As IMail
Public Shared CURRENT_TEMP_MAIL_PATH 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_FROM As String = ""
Public Shared CURRENT_MAIL_MESSAGE_ID As String = ""
Public Shared CURRENT_MAIL_UID As Long
Public Shared CURRENT_MAIL_PROCESS_NAME As String
Public Shared CURRENT_ImapObject As Imap
Public Shared Property DeleteMail As Boolean = False
Public Shared Property CURRENT_POLL_TYPE As String
Public Shared DeleteMail As Boolean = False
Public Shared CURRENT_POLL_TYPE As String
Public Shared Property POLL_STEP_GUID As Integer
Public Shared Property POLL_STEP_PROCESS_ID As Integer
Public Shared Property POLL_KEYWORDS As String
Public Shared Property KEYWORDS_SPLIT As String()
Public Shared POLL_STEP_GUID As Integer
Public Shared POLL_STEP_PROCESS_ID As Integer
Public Shared POLL_KEYWORDS As String
Public Shared KEYWORDS_SPLIT As String()
Public Shared Property WM_REFERENCE_INDEX As String
Public Shared Property WM_VECTOR_LOG As String
Public Shared Property WM_OBJEKTTYPE As String
Public Shared Property WM_IDX_BODY_TEXT As String
Public Shared Property WM_IDX_BODY_SUBSTR_LENGTH As String
Public Shared WM_REFERENCE_INDEX As String
Public Shared WM_VECTOR_LOG As String
Public Shared WM_OBJEKTTYPE As String
Public Shared WM_IDX_BODY_TEXT As String
Public Shared WM_IDX_BODY_SUBSTR_LENGTH As String
Public Shared Property CURRENT_WM_DOC As WMObject
Public Shared Property CURRENT_DOC_ID As Integer
Public Shared Property CURRENT_DOC_PATH As String
Public Shared Property MessageError As Boolean = False
Public Shared CURRENT_WM_DOC As WMObject
Public Shared CURRENT_DOC_ID As Integer
Public Shared CURRENT_DOC_PATH As String
Public Shared MessageError As Boolean = False
Public Shared Property TEMP_FILES As List(Of String) = New List(Of String)
Public Shared Property TEMP_HTML_RESULTS As List(Of String) = New List(Of String)
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
Public Shared Property CURRENT_DEBUG_LOCAL_EMAIL As String
End Class

View File

@ -46,6 +46,9 @@
<Reference Include="AE.Net.Mail, Version=1.7.10.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\AE.Net.Mail.1.7.10.0\lib\net45\AE.Net.Mail.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.Base">
<HintPath>..\..\..\DDMonorepo\Modules.Base\Base\bin\Debug\DigitalData.Modules.Base.dll</HintPath>
</Reference>
<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>
@ -53,6 +56,10 @@
<Reference Include="DigitalData.Modules.Filesystem">
<HintPath>..\..\..\DDMonorepo\Modules.Filesystem\bin\Debug\DigitalData.Modules.Filesystem.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.Language, Version=1.5.2.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\..\DDMonorepo\Modules.Language\bin\Debug\DigitalData.Modules.Language.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.Logging">
<HintPath>..\..\..\DDMonorepo\Modules.Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
</Reference>
@ -113,6 +120,7 @@
<Compile Include="clsWindream_Index.vb" />
<Compile Include="clsWorkEmail.vb" />
<Compile Include="clsWorker.vb" />
<Compile Include="MailContainer.vb" />
<Compile Include="ModuleCurrent.vb" />
<Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb">

View File

@ -0,0 +1,52 @@
Imports Limilabs.Mail
Imports DigitalData.Modules.Language
Public Class MailContainer
Private ReadOnly Uid As String
Private ReadOnly FilteredMessageId
Public ReadOnly Property Mail As IMail
Public ReadOnly Property Subject As String
Get
Return Mail.Subject
End Get
End Property
Public ReadOnly Property MessageId As String
Get
Return Mail.MessageID
End Get
End Property
Public ReadOnly Property MessageIdPathSafe As String
Get
Return FilteredMessageId
End Get
End Property
Public Property BodyComplete As String
Public Property BodySubstring1 As String
Public Property BodySubstring2 As String
Public Sub New(pMail As IMail, pUid As String)
Mail = pMail
Uid = pUid
FilteredMessageId = ProcessMessageId(pMail.MessageID)
End Sub
Private Function ProcessMessageId(pOriginalMessageId As String) As String
If pOriginalMessageId Is Nothing Then
Return Guid.NewGuid.ToString
End If
If TypeOf pOriginalMessageId Is String AndAlso pOriginalMessageId.Length = 0 Then
Return Guid.NewGuid.ToString
End If
Return Utils.RemoveInvalidCharacters(pOriginalMessageId)
End Function
End Class

View File

@ -12,6 +12,8 @@ Imports MailBox = Limilabs.Mail.Headers.MailBox
'Imports DigitalData.Modules.Messaging
Public Class clsWorkEmail
Private Const FILENAME_MAX_LENGTH = 100
Private Shared Logger As Logger
Private MyLogger As LogConfig
Private _DB_MSSQL As clsDatabase
@ -54,6 +56,9 @@ Public Class clsWorkEmail
CURRENT_MAIL_FROM = m.Address
Next
'TODO: Move all of these CURRENT_MAIL vars into a business object of type mail container
'Dim oMail As New MailContainer(MyEmailMessage, poUID)
Logger.Debug($"Working on email from: {CURRENT_MAIL_FROM}...Subject: {MyEmailMessage.Subject}")
CURRENT_MAIL_BODY_ALL = ""
CURRENT_MAIL_BODY_ANSWER1 = ""
@ -327,7 +332,11 @@ Public Class clsWorkEmail
End Try
Next oFileName
Dim oResult As Boolean = False
Dim oSubjectFilename = CURRENT_MAIL_MESSAGE.Subject & ".eml"
' Subject can be FILENAME_MAX_LENGTH chars at most,
' otherwise we run into errors with the path being too long
Dim oSubjectFilename = CURRENT_MAIL_MESSAGE.Subject.Substring(0, FILENAME_MAX_LENGTH) & ".eml"
Logger.Debug($"oSubjectFilename (beforeclean) is: {oSubjectFilename}")
oSubjectFilename = RemoveIllegalFileNameChars(oSubjectFilename)
Dim oTempFilename = oTempPath & "\" & oSubjectFilename
@ -375,21 +384,28 @@ Public Class clsWorkEmail
Return False
End Try
End Function
Private Function COPY2HDD(copy_2_hdd As Boolean, pathOriginal As String, pathemail_errors As String, messageid As Boolean) As Boolean
Private Function COPY2HDD(pShouldCopyToDisk As Boolean, pPathOriginal As String, pPathErrors As String, pUseMessageIdAsFilename As Boolean) As Boolean
Try
If copy_2_hdd = True Then
If pShouldCopyToDisk = True Then
Logger.Debug("COPY_2_HDD is ACTIVE!")
PATH_ERROR = pathemail_errors
If Directory.Exists(pathOriginal) Then
Dim oTempFilename = pathOriginal
If messageid = True Then
oTempFilename &= "\" & CURRENT_MAIL_MESSAGE_ID & ".eml"
PATH_ERROR = pPathErrors
If Directory.Exists(pPathOriginal) Then
Dim oTempFilename = pPathOriginal
If pUseMessageIdAsFilename = True Then
Dim oFileName = CURRENT_MAIL_MESSAGE_ID & ".eml"
oTempFilename = Path.Combine(oTempFilename, oFileName)
'oTempFilename &= "\" & CURRENT_MAIL_MESSAGE_ID & ".eml"
Else
oTempFilename &= "\" & CURRENT_MAIL_MESSAGE.Subject.Replace(" ", "") & ".eml"
Dim oFileName = CURRENT_MAIL_MESSAGE.Subject.Replace(" ", "") & ".eml"
oTempFilename = Path.Combine(oTempFilename, oFileName)
'oTempFilename &= "\" & CURRENT_MAIL_MESSAGE.Subject.Replace(" ", "") & ".eml"
End If
'Dim cleanPath As String = String.Join("", oTempFilename.Split(Path.GetInvalidPathChars()))
If System.IO.File.Exists(oTempFilename) = False Then
If File.Exists(oTempFilename) = False Then
Try
File.Delete(oTempFilename)
Catch ex As Exception
@ -422,7 +438,6 @@ Public Class clsWorkEmail
End If
Catch ex As Exception
Logger.Error(ex)
'clsLogger.Add("Unexpected Error in COPY2HDD: " & ex.Message & "MESSAGE_ID: " & CURRENT_MAIL_MESSAGE.MessageID, True)
Return False
End Try
End Function
@ -717,17 +732,6 @@ Public Class clsWorkEmail
End Try
End Function
Private Function RemoveCharacter(ByVal stringToCleanUp)
Dim characterToRemove As String = ""
characterToRemove = Chr(34) + "#$%&'()*+,-./\~"
Dim firstThree As Char() = characterToRemove.Take(16).ToArray()
For index = 1 To firstThree.Length - 1
stringToCleanUp = stringToCleanUp.ToString.Replace(firstThree(index), "")
Next
Return stringToCleanUp
End Function
Private Function INSERT_HISTORY_MSSQL() As Boolean
If MessageError = False Then
Dim ins = $"INSERT INTO TBEMLP_HISTORY (WORK_PROCESS,EMAIL_MSGID,EMAIL_SUBJECT,EMAIL_DATE,EMAIL_BODY,EMAIL_SUBSTRING1,EMAIL_SUBSTRING2,EMAIL_FROM,PROFILE_ID) VALUES " &