diff --git a/Modules.Messaging/Email2.vb b/Modules.Messaging/Email2.vb index 46f2e21f..a772f4e7 100644 --- a/Modules.Messaging/Email2.vb +++ b/Modules.Messaging/Email2.vb @@ -14,6 +14,7 @@ Public Class Email2 Private ReadOnly LogConfig As LogConfig Private ReadOnly FileEx As Filesystem.File Private ReadOnly MailBuilder As New MailBuilder() + Private ReadOnly TempFiles As New List(Of String) Private DisableExcessiveLogging As Boolean = False @@ -271,6 +272,16 @@ Public Class Email2 End Try End Function + ''' + ''' Loads an eml file from disk and returns the IMail representation of it + ''' + ''' Path to the eml file + ''' The IMail object + Public Function Load_Email(pFileName As String) As IMail + Dim oFileName As String = MaybeConvert_MsgToEml(pFileName) + Return MailBuilder.CreateFromEmlFile(oFileName) + End Function + ''' ''' Removes all attachments from an EML file and saves it to a temporary file. ''' @@ -282,7 +293,8 @@ Public Class Email2 Dim oTempPath As String = Path.Combine(Path.GetTempPath(), Add_FilenameSuffix(pFileName, pSuffix)) Dim oCleanedPath As String = FileEx.GetCleanFilename(oTempPath) Dim oVersionedPath As String = FileEx.GetVersionedFilename(oCleanedPath) - Dim oMail = MailBuilder.CreateFromEmlFile(pFileName) + Dim oEmlPath As String = MaybeConvert_MsgToEml(pFileName) + Dim oMail = MailBuilder.CreateFromEmlFile(oEmlPath) oMail.RemoveAttachments() oMail.Save(oVersionedPath) @@ -295,14 +307,11 @@ Public Class Email2 End Try End Function - Public Function Load_Email(pFileName As String) As IMail - Return MailBuilder.CreateFromEmlFile(pFileName) - End Function - Public Function Save_AttachmentsToDisk(pFileName As String) As List(Of String) Try Dim oAttachmentPaths As New List(Of String) - Dim oMail = MailBuilder.CreateFromEmlFile(pFileName) + Dim oEmlFile As String = MaybeConvert_MsgToEml(pFileName) + Dim oMail = MailBuilder.CreateFromEmlFile(oEmlFile) Dim oTempPath As String = IO.Path.GetTempPath() If oMail.Attachments.Count = 0 Then @@ -315,6 +324,7 @@ Public Class Email2 oAttachment.Save(oVersionedPath) oAttachmentPaths.Add(oVersionedPath) + TempFiles.Add(oVersionedPath) Next Return oAttachmentPaths @@ -325,7 +335,63 @@ Public Class Email2 End Try End Function - Public Function Convert_MsgToEml(pEmailFileName As String) As String + Public Sub Clear_TempFiles() + Logger.Info("Cleaning [{0}] email temp files", TempFiles.Count) + For Each oFile In TempFiles + Try + IO.File.Delete(oFile) + Catch ex As Exception + Logger.Warn("Could not clean temp file [{0}]", oFile) + Logger.Error(ex) + End Try + Next + End Sub + + Public Function Get_MessageSender(Mail As IMail) As String + Try + Dim oAddress = Mail.From.First() + + If oAddress Is Nothing Then + Logger.Warn("Could not get MessageSender from Mail [{0}]", Mail.MessageID) + Return Nothing + End If + + Return oAddress.Address + + Catch ex As Exception + Logger.Warn("Could not get MessageSender from Mail [{0}]", Mail.MessageID) + Logger.Error(ex) + Return Nothing + + End Try + End Function + + Public Function Get_MessageReceiver(Mail As IMail) As String + Try + Dim oAddress = Mail.To.FirstOrDefault() + + If oAddress Is Nothing Then + Logger.Warn("Could not get MessageReceiver from Mail [{0}]", Mail.MessageID) + Return Nothing + End If + + Dim oMailBox = oAddress.GetMailboxes().First() + + If oMailBox Is Nothing Then + Logger.Warn("Could not get MessageReceiver from Mail [{0}]", Mail.MessageID) + Return Nothing + End If + + Return oMailBox.Address + + Catch ex As Exception + Logger.Error(ex) + Return Nothing + + End Try + End Function + + Private Function MaybeConvert_MsgToEml(pEmailFileName As String) As String Dim oInfo As New FileInfo(pEmailFileName) If oInfo.Extension.ToUpper = ".EML" Then @@ -356,6 +422,7 @@ Public Class Email2 End Using + TempFiles.Add(oVersionedPath) Return oVersionedPath Catch ex As Exception @@ -374,4 +441,8 @@ Public Class Email2 Return $"{oFileNameWithoutExtension}{pSuffix}{oExtension}" End Function + + + + End Class