|
|
|
|
@@ -4,6 +4,7 @@ Imports DigitalData.EMLProfiler.ClassCurrent
|
|
|
|
|
Imports System.IO
|
|
|
|
|
Imports DigitalData.Modules.Logging
|
|
|
|
|
Imports DigitalData.Modules.Database
|
|
|
|
|
Imports DigitalData.Modules.Language
|
|
|
|
|
Imports System.Threading
|
|
|
|
|
Imports Limilabs.Mail
|
|
|
|
|
Imports Limilabs.Mail.MIME
|
|
|
|
|
@@ -13,6 +14,7 @@ Imports MailBox = Limilabs.Mail.Headers.MailBox
|
|
|
|
|
|
|
|
|
|
Public Class clsWorkEmail
|
|
|
|
|
Private Const FILENAME_MAX_LENGTH = 100
|
|
|
|
|
Private Const MESSAGE_ID_MAX_LENGTH = 100
|
|
|
|
|
|
|
|
|
|
Private Shared Logger As Logger
|
|
|
|
|
Private MyLogger As LogConfig
|
|
|
|
|
@@ -67,15 +69,40 @@ Public Class clsWorkEmail
|
|
|
|
|
CURRENT_MAIL_SUBJECT = MyEmailMessage.Subject.ToUpper
|
|
|
|
|
CURRENT_MAIL_MESSAGE_ID = RemoveIllegalFileNameChars(MyEmailMessage.MessageID)
|
|
|
|
|
CURRENT_MAIL_UID = poUID
|
|
|
|
|
If IsNothing(CURRENT_MAIL_MESSAGE_ID) Then
|
|
|
|
|
CURRENT_MAIL_MESSAGE_ID = System.Guid.NewGuid.ToString()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If String.IsNullOrEmpty(CURRENT_MAIL_MESSAGE_ID) Then
|
|
|
|
|
|
|
|
|
|
CURRENT_MAIL_MESSAGE_ID = Guid.NewGuid.ToString()
|
|
|
|
|
|
|
|
|
|
ElseIf CURRENT_MAIL_MESSAGE_ID.Length > MESSAGE_ID_MAX_LENGTH Then
|
|
|
|
|
|
|
|
|
|
' MessageIds longer than 100 chars will be replaced with a guid to avoid errors
|
|
|
|
|
' because of file paths longer than 255 chars.
|
|
|
|
|
CURRENT_MAIL_MESSAGE_ID = Hash(CURRENT_MAIL_MESSAGE_ID)
|
|
|
|
|
|
|
|
|
|
Else
|
|
|
|
|
If CURRENT_MAIL_MESSAGE_ID.Length = 0 Then
|
|
|
|
|
CURRENT_MAIL_MESSAGE_ID = System.Guid.NewGuid.ToString()
|
|
|
|
|
End If
|
|
|
|
|
' Default case, should cover most message ids
|
|
|
|
|
CURRENT_MAIL_MESSAGE_ID = CURRENT_MAIL_MESSAGE_ID.Replace(">", "").Replace("<", "")
|
|
|
|
|
CURRENT_MAIL_MESSAGE_ID = CURRENT_MAIL_MESSAGE_ID.Replace("'", "")
|
|
|
|
|
|
|
|
|
|
End If
|
|
|
|
|
CURRENT_MAIL_MESSAGE_ID = CURRENT_MAIL_MESSAGE_ID.Replace(">", "").Replace("<", "")
|
|
|
|
|
CURRENT_MAIL_MESSAGE_ID = CURRENT_MAIL_MESSAGE_ID.Replace("'", "")
|
|
|
|
|
|
|
|
|
|
'If IsNothing(CURRENT_MAIL_MESSAGE_ID) Then
|
|
|
|
|
' CURRENT_MAIL_MESSAGE_ID = System.Guid.NewGuid.ToString()
|
|
|
|
|
'Else
|
|
|
|
|
' If CURRENT_MAIL_MESSAGE_ID.Length = 0 Then
|
|
|
|
|
' CURRENT_MAIL_MESSAGE_ID = System.Guid.NewGuid.ToString()
|
|
|
|
|
' ElseIf CURRENT_MAIL_MESSAGE_ID.Length > MESSAGE_ID_MAX_LENGTH Then
|
|
|
|
|
' ' MessageIds longer than 100 chars will be replaced with a guid to avoid errors
|
|
|
|
|
' ' because of file paths longer than 255 chars.
|
|
|
|
|
' CURRENT_MAIL_MESSAGE_ID = System.Guid.NewGuid.ToString()
|
|
|
|
|
|
|
|
|
|
' End If
|
|
|
|
|
'End If
|
|
|
|
|
'CURRENT_MAIL_MESSAGE_ID = CURRENT_MAIL_MESSAGE_ID.Replace(">", "").Replace("<", "")
|
|
|
|
|
'CURRENT_MAIL_MESSAGE_ID = CURRENT_MAIL_MESSAGE_ID.Replace("'", "")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
If IsNothing(CURRENT_MAIL_SUBJECT) Then
|
|
|
|
|
@@ -89,7 +116,7 @@ Public Class clsWorkEmail
|
|
|
|
|
Dim osql = $"Select COALESCE(MAX(GUID),0) FROM TBEMLP_HISTORY WHERE EMAIL_MSGID = '{CURRENT_MAIL_MESSAGE_ID}'"
|
|
|
|
|
Dim oHistoryID = _DB_MSSQL.Execute_Scalar(osql)
|
|
|
|
|
If oHistoryID > 0 Then
|
|
|
|
|
Logger.Info($"Messsage with subject [{CURRENT_MAIL_SUBJECT}] from [{CURRENT_MAIL_FROM}] has already been worked!")
|
|
|
|
|
Logger.Debug($"Messsage with subject [{CURRENT_MAIL_SUBJECT}] from [{CURRENT_MAIL_FROM}] has already been worked!")
|
|
|
|
|
Return True
|
|
|
|
|
End If
|
|
|
|
|
Dim oTempMailExists As Boolean = SAVE2TEMP()
|
|
|
|
|
@@ -135,6 +162,19 @@ Public Class clsWorkEmail
|
|
|
|
|
End Try
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Private Function Hash(pString As String) As String
|
|
|
|
|
Using sha1 As Security.Cryptography.SHA1Managed = New Security.Cryptography.SHA1Managed()
|
|
|
|
|
Dim oHash = sha1.ComputeHash(Text.Encoding.UTF8.GetBytes(pString))
|
|
|
|
|
Dim oBuilder = New Text.StringBuilder(oHash.Length * 2)
|
|
|
|
|
|
|
|
|
|
For Each b As Byte In oHash
|
|
|
|
|
oBuilder.Append(b.ToString("X2"))
|
|
|
|
|
Next
|
|
|
|
|
|
|
|
|
|
Return oBuilder.ToString()
|
|
|
|
|
End Using
|
|
|
|
|
End Function
|
|
|
|
|
|
|
|
|
|
Public Function AddToEmailQueueMSSQL(MessageId As String, BodyText As String, SourceProcedure As String, pEmailAccountId As Integer) As Boolean
|
|
|
|
|
|
|
|
|
|
Try
|
|
|
|
|
@@ -336,7 +376,7 @@ Public Class clsWorkEmail
|
|
|
|
|
|
|
|
|
|
' 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"
|
|
|
|
|
Dim oSubjectFilename = CURRENT_MAIL_MESSAGE.Subject.Truncate(FILENAME_MAX_LENGTH) & ".eml"
|
|
|
|
|
|
|
|
|
|
Logger.Debug($"oSubjectFilename (beforeclean) is: {oSubjectFilename}")
|
|
|
|
|
oSubjectFilename = RemoveIllegalFileNameChars(oSubjectFilename)
|
|
|
|
|
@@ -399,7 +439,7 @@ Public Class clsWorkEmail
|
|
|
|
|
|
|
|
|
|
'oTempFilename &= "\" & CURRENT_MAIL_MESSAGE_ID & ".eml"
|
|
|
|
|
Else
|
|
|
|
|
Dim oFileName = CURRENT_MAIL_MESSAGE.Subject.Replace(" ", "") & ".eml"
|
|
|
|
|
Dim oFileName = CURRENT_MAIL_MESSAGE.Subject.Truncate(FILENAME_MAX_LENGTH).Replace(" ", "") & ".eml"
|
|
|
|
|
oTempFilename = Path.Combine(oTempFilename, oFileName)
|
|
|
|
|
|
|
|
|
|
'oTempFilename &= "\" & CURRENT_MAIL_MESSAGE.Subject.Replace(" ", "") & ".eml"
|
|
|
|
|
@@ -737,7 +777,7 @@ Public Class clsWorkEmail
|
|
|
|
|
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 " &
|
|
|
|
|
$"('{CURRENT_MAIL_PROCESS_NAME}'," &
|
|
|
|
|
$"'{CURRENT_MAIL_MESSAGE.MessageID.Replace("<", "").Replace(">", "")}'," &
|
|
|
|
|
$"'{CURRENT_MAIL_MESSAGE_ID}'," &
|
|
|
|
|
$"'{CURRENT_MAIL_SUBJECT}'," &
|
|
|
|
|
$"'{CURRENT_MAIL_MESSAGE.Date}'," &
|
|
|
|
|
$"'{CURRENT_MAIL_BODY_ALL}'," &
|
|
|
|
|
|