From 7204390e8508a2b9442a3b80440a6bcd240a6a72 Mon Sep 17 00:00:00 2001 From: pitzm Date: Wed, 15 Apr 2026 08:39:25 +0200 Subject: [PATCH] Wegen Problemen mit doppelte MessageIDs wird zur sicherheite eine zweite erzeugt, und ggf. verwendet. --- .../Data/MailContainer.vb | 8 ++++ App/EmailProfiler.Common/clsWorkEmail.vb | 42 ++++++------------- 2 files changed, 21 insertions(+), 29 deletions(-) diff --git a/App/EmailProfiler.Common/Data/MailContainer.vb b/App/EmailProfiler.Common/Data/MailContainer.vb index de357ce..eb6f318 100644 --- a/App/EmailProfiler.Common/Data/MailContainer.vb +++ b/App/EmailProfiler.Common/Data/MailContainer.vb @@ -24,6 +24,13 @@ Public Class MailContainer ''' Public ReadOnly Property MessageId As String + ''' + ''' Eine zweite MessageID, in der das Mail-Datum berücksichtigt wird. + ''' Wird verwendet wenn MessageId bereits existiert. + ''' + ''' + Public ReadOnly Property MessageId2 As String + ''' ''' The subject, truncated to SUBJECT_MAX_LENGTH characters ''' @@ -41,6 +48,7 @@ Public Class MailContainer MessageIdOriginal = pMail.MessageID MessageId = StringEx.GetShortHash(pMail.MessageID) + MessageId2 = StringEx.GetShortHash(pMail.MessageID + pMail.Date.ToString()) Subject = ObjectEx.NotNull(pMail.Subject.Truncate(SUBJECT_MAX_LENGTH), String.Empty) SubjectOriginal = ObjectEx.NotNull(pMail.Subject, String.Empty) diff --git a/App/EmailProfiler.Common/clsWorkEmail.vb b/App/EmailProfiler.Common/clsWorkEmail.vb index b259f37..99efa67 100644 --- a/App/EmailProfiler.Common/clsWorkEmail.vb +++ b/App/EmailProfiler.Common/clsWorkEmail.vb @@ -117,45 +117,29 @@ Public Class clsWorkEmail CURRENT_MAIL_UID = poUID - ' 05.06.23 - ' The MessageID is now replaced by a SHA256 Hash of the MessageID - ' The reason is that MessageIDs can be very long, - ' which results in the final filepath exceeding the Windream/Windows maximum of 255 chars. - ' 28.07.23 - ' The SHA256 Hash is now truncated to half the size - ' which should be a good balance between uniqueness and length - 'CURRENT_MAIL_MESSAGE_ID = StringEx.GetShortHash(pMailMessage.MessageID) - - '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 - ' ' 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 - - If IsNothing(_CurrentMail.SubjectOriginal) Then + If String.IsNullOrEmpty(_CurrentMail.SubjectOriginal) Then CURRENT_MAIL_SUBJECT = String.Empty - _Logger.Warn("Subject was nothing!") + _Logger.Warn("Subject was empty or nothing!") Else CURRENT_MAIL_SUBJECT = _CurrentMail.SubjectOriginal.ToUpper.EscapeForSQL() _Logger.Debug("Fixed Subject: [{0}]", CURRENT_MAIL_SUBJECT) End If + ' Checking the messageID - could be a duplicate + _Logger.Debug($"messageID: '{_CurrentMail.MessageId}' - messageID2: '{_CurrentMail.MessageId2}'") + Dim oSql = $"Select COALESCE(MAX(GUID),0) FROM TBEMLP_HISTORY WHERE EMAIL_MSGID = '{_CurrentMail.MessageId}'" Dim oHistoryID = _DB_MSSQL.GetScalarValue(oSql) If oHistoryID > 0 And IS_LOCAL_TEST = False Then - _Logger.Info($"Message with subject [{_CurrentMail.SubjectOriginal}] from [{_CurrentMail.SenderAddress}] has already been worked!") - Return True + _Logger.Warn("Found a MessageID already in use! Try MessageID2") + + oSql = $"Select COALESCE(MAX(GUID),0) FROM TBEMLP_HISTORY WHERE EMAIL_MSGID = '{_CurrentMail.MessageId2}'" + oHistoryID = _DB_MSSQL.GetScalarValue(oSql) + + If oHistoryID > 0 And IS_LOCAL_TEST = False Then + _Logger.Warn("Found a MessageID2 already in use!") + End If End If Dim oTempMailExists As Boolean = Save2TempDirectory(_CurrentMail)