EmailProfiler.Common: Logik zur Vermeidung von doppelten EMail MessageIDs überarbeitet

This commit is contained in:
2026-05-15 13:24:28 +02:00
parent d48b7765e9
commit deafdd90c8
4 changed files with 195 additions and 30 deletions

View File

@@ -22,14 +22,11 @@ Public Class MailContainer
''' <summary>
''' The new MessageID, which is generated by hashing the original MessageID
''' </summary>
Public ReadOnly Property MessageId As String
Public Property MessageId As String
''' <summary>
''' Eine zweite MessageID, in der das Mail-Datum berücksichtigt wird.
''' Wird verwendet wenn MessageId bereits existiert.
''' </summary>
''' <returns></returns>
Public ReadOnly Property MessageId2 As String
Public ReadOnly Property EMailDate As Date
Public ReadOnly Property MessageIDHashSet As HashSet(Of String) = New HashSet(Of String)
''' <summary>
''' The subject, truncated to SUBJECT_MAX_LENGTH characters
@@ -48,13 +45,39 @@ 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)
SenderAddress = GetSenderAddress(pMail)
SenderDomain = GetSenderDomain(pMail)
EMailDate = GetEmailDate(pMail)
End Sub
''' <summary>
''' Erzeugt eine Liste von n unterschiedlichen MessageIDs
''' Dabei verwenden wir den vorherigen Wert, um daraus einen neuen zu erzeugen
''' </summary>
Public Sub InitializeHashsetOfMessageIDs()
MessageIDHashSet.Clear()
Dim nextMessageID As String
If String.IsNullOrEmpty(MessageIdOriginal) = True Then
nextMessageID = "1234567890ABCDEFGHIJKLMNOPQRSTUV" ' irgendwelche 32 Zeichen
Else
nextMessageID = MessageIdOriginal
End If
For index = 1 To 10
Dim zeitMitMs As String = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff")
nextMessageID = nextMessageID + "_" + index.ToString + "_" + zeitMitMs
nextMessageID = StringEx.GetShortHash(nextMessageID)
MessageIDHashSet.Add(nextMessageID)
Next
End Sub
Private Function GetSenderAddress(pMail As IMail)
@@ -67,4 +90,16 @@ Public Class MailContainer
Return oMailBox.DomainPart
End Function
Public Sub SetMessageID(pMessageID As String)
MessageId = pMessageID
End Sub
Private Function GetEmailDate(pMail As IMail) As Date
If pMail.Date IsNot Nothing Then
Return pMail.Date
Else
Return Date.MinValue
End If
End Function
End Class