Imports Limilabs.Mail Imports DigitalData.Modules.Base Public Class MailContainer Private Const SUBJECT_MAX_LENGTH = 25 ''' ''' The Mail object created by Limilabs ''' Public ReadOnly Property Mail As IMail ''' ''' The IMAP Id coming from the IMAP folder. Used to reference the mail. ''' Public ReadOnly Property ImapId As Integer ''' ''' The original MessageID from the eml file ''' Public ReadOnly Property MessageIdOriginal As String ''' ''' The new MessageID, which is generated by hashing the original MessageID ''' Public Property MessageId As String Public ReadOnly Property EMailDate As Date Public ReadOnly Property MessageIDHashSet As HashSet(Of String) = New HashSet(Of String) ''' ''' The subject, truncated to SUBJECT_MAX_LENGTH characters ''' Public ReadOnly Property Subject As String Public ReadOnly Property SubjectOriginal As String Public ReadOnly Property SenderDomain As String Public ReadOnly Property SenderAddress As String Public Sub New(pMail As IMail, pImapId As Integer) Mail = pMail ImapId = pImapId MessageIdOriginal = pMail.MessageID MessageId = StringEx.GetShortHash(pMail.MessageID) 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 ''' ''' Erzeugt eine Liste von n unterschiedlichen MessageIDs ''' Dabei verwenden wir den vorherigen Wert, um daraus einen neuen zu erzeugen ''' 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) Dim oMailBox = pMail.From.FirstOrDefault() Return oMailBox?.Address End Function Private Function GetSenderDomain(pMail As IMail) Dim oMailBox = pMail.From.FirstOrDefault() 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