311 lines
14 KiB
VB.net
311 lines
14 KiB
VB.net
Imports System.IO
|
|
Imports System.Text.RegularExpressions
|
|
Imports DevExpress.Data.Helpers.ExpressiveSortInfo
|
|
Imports DigitalData.Modules.Config
|
|
Imports DigitalData.Modules.Database
|
|
Imports DigitalData.Modules.Logging
|
|
Imports EmailProfiler.Common
|
|
Imports GdPicture14
|
|
Imports Independentsoft.Email.Mime
|
|
Imports Attachment = Independentsoft.Email.Mime.Attachment
|
|
Imports LicenseManager = GdPicture14.LicenseManager
|
|
|
|
Public Class Form1
|
|
Private _logger As Logger
|
|
Private Shared _MyLogger As LogConfig
|
|
Private _Worklist As List(Of String)
|
|
Private MyDatabase As MSSQLServer
|
|
|
|
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
|
|
Try
|
|
_MyLogger = New LogConfig(LogConfig.PathType.CustomPath, Path.Combine(My.Application.Info.DirectoryPath, "Log"), Nothing, My.Application.Info.CompanyName, My.Application.Info.ProductName)
|
|
_logger = _MyLogger.GetLogger()
|
|
_MyLogger.Debug = True
|
|
|
|
Dim dbResult As Boolean
|
|
|
|
If My.Settings.DD_ECM_CONSTRING = String.Empty Then
|
|
MsgBox("No Databaseconnection configured. (First Start or Appdata not accessible)" & vbNewLine & "Basic-Config will be loaded.", MsgBoxStyle.Information)
|
|
Exit Sub
|
|
End If
|
|
|
|
MyDatabase = New MSSQLServer(_MyLogger, My.Settings.DD_ECM_CONSTRING)
|
|
If MyDatabase.DBInitialized = True Then
|
|
|
|
dbResult = True
|
|
Else
|
|
dbResult = False
|
|
End If
|
|
bsitemppath.Caption = My.Settings.Temppath
|
|
bsifolderbrowser.Caption = My.Settings.CURR_CHECK_PATH
|
|
Catch ex As Exception
|
|
MsgBox(ex.Message, MsgBoxStyle.Critical, "Error in FormLoad")
|
|
End Try
|
|
|
|
End Sub
|
|
|
|
Private Sub BarButtonItem1_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem1.ItemClick
|
|
With FolderBrowserDialog1
|
|
.SelectedPath = My.Settings.CURR_CHECK_PATH
|
|
End With
|
|
|
|
If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
|
|
bsifolderbrowser.Caption = FolderBrowserDialog1.SelectedPath
|
|
My.Settings.CURR_CHECK_PATH = bsifolderbrowser.Caption
|
|
My.Settings.Save()
|
|
End If
|
|
|
|
End Sub
|
|
Private Sub BarButtonItem3_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem3.ItemClick
|
|
With FolderBrowserDialog1
|
|
.SelectedPath = My.Settings.Temppath
|
|
End With
|
|
If (FolderBrowserDialog1.ShowDialog() = DialogResult.OK) Then
|
|
bsitemppath.Caption = FolderBrowserDialog1.SelectedPath
|
|
My.Settings.Temppath = FolderBrowserDialog1.SelectedPath
|
|
My.Settings.Save()
|
|
End If
|
|
End Sub
|
|
|
|
Private Sub btRunEmailCheck_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btRunEmailCheck.ItemClick
|
|
' Check Email
|
|
ListBox1.Items.Clear()
|
|
|
|
If bsifolderbrowser Is Nothing Or String.IsNullOrEmpty(bsifolderbrowser.Caption) Then
|
|
MsgBox("Es wurde kein input-Verzeichnis konfiguriert. Abbruch!", MsgBoxStyle.Information)
|
|
Return
|
|
End If
|
|
|
|
Dim di As New DirectoryInfo(bsifolderbrowser.Caption)
|
|
' Get a reference to each file in that directory.
|
|
Dim fiArr As FileInfo() = di.GetFiles()
|
|
' Display the names of the files.
|
|
Dim fri As FileInfo
|
|
For Each fri In fiArr
|
|
Try
|
|
If Not fri.Name.EndsWith("eml") Then
|
|
Continue For
|
|
End If
|
|
|
|
Dim oList As New List(Of String)
|
|
oList.Add(fri.FullName)
|
|
Dim oMessage As New Message(fri.FullName)
|
|
Dim oMSGID = oMessage.MessageID
|
|
oMSGID = oMSGID.Replace(">", "").Replace("<", "")
|
|
ListBox1.Items.Add($"Working on email from: {oMessage.From.EmailAddress}...Subject: {oMessage.Subject}")
|
|
Dim oCount As Integer = 0
|
|
|
|
For Each oAttachment As Attachment In oMessage.GetAttachments
|
|
Dim oString As String
|
|
Dim oATTFilename = oAttachment.GetFileName.ToString.ToLower
|
|
Dim oValidExt As Boolean = False
|
|
If oATTFilename.EndsWith("pdf") Then
|
|
oValidExt = True
|
|
ElseIf oATTFilename.EndsWith("xls") Then
|
|
oValidExt = True
|
|
ElseIf oATTFilename.EndsWith("xlsx") Then
|
|
oValidExt = True
|
|
ElseIf oATTFilename.EndsWith("doc") Then
|
|
oValidExt = True
|
|
ElseIf oATTFilename.EndsWith("docx") Then
|
|
oValidExt = True
|
|
ElseIf oATTFilename.EndsWith("ppt") Then
|
|
oValidExt = True
|
|
ElseIf oATTFilename.EndsWith("pptx") Then
|
|
oValidExt = True
|
|
End If
|
|
If oValidExt = False Then
|
|
Continue For
|
|
End If
|
|
oCount += 1
|
|
If oCount = 1 Then
|
|
Continue For
|
|
End If
|
|
Dim oAttachmentFileString As String = ""
|
|
oString = String.Format(" Working on Attachment [{0}]", oAttachment.GetFileName)
|
|
_logger.Info(oString)
|
|
ListBox1.Items.Add(oString)
|
|
Try
|
|
Dim oFilename = oAttachment.GetFileName
|
|
oFilename = CleanInput(oFilename)
|
|
_logger.Debug($"oFilename [{oFilename}]")
|
|
If oFilename = String.Empty Then
|
|
oFilename = oAttachment.GetFileName
|
|
End If
|
|
Dim oAttFilenameonly = $"{oMSGID}~{oFilename}"
|
|
oAttachmentFileString = Path.Combine(bsitemppath.Caption, oAttFilenameonly)
|
|
_logger.Debug($"oAttachmentFileString [{oAttachmentFileString}]")
|
|
Dim oSQL = $"SELECT * FROM IDB.DBO.TBIDB_DOC_INFO WHERE FILENAME_EXT = '{oAttFilenameonly}'"
|
|
Dim oDT As DataTable = MyDatabase.GetDatatable(oSQL)
|
|
If Not IsNothing(oDT) Then
|
|
If oDT.Rows.Count = 0 Then
|
|
oString = " ## Attachment NOT EXISTING ##"
|
|
_logger.Info(oString)
|
|
ListBox1.Items.Add(oString)
|
|
If File.Exists(oAttachmentFileString) = False Then
|
|
_logger.Debug(String.Format("Trying to save attachment [{0}]", oAttachmentFileString))
|
|
Try
|
|
oAttachment.Save(oAttachmentFileString)
|
|
Dim oFileInfo As New FileInfo(oAttachmentFileString)
|
|
Dim oFileLenth As Long = oFileInfo.Length
|
|
If oFileLenth > 0 Then
|
|
_logger.Info(String.Format(" Attachment saved to [{0}]", oAttachmentFileString))
|
|
Else
|
|
_logger.Warn($"##!! oFileLenth for AttachmentObjects is 0 !!##")
|
|
Try
|
|
File.Delete(oAttachmentFileString)
|
|
Catch ex As Exception
|
|
_logger.Error(ex)
|
|
End Try
|
|
End If
|
|
|
|
Catch ex As Exception
|
|
_logger.Warn($"Error while saving attachment-name: {ex.Message} - AttachmentName: {oAttachmentFileString}")
|
|
End Try
|
|
Else
|
|
ListBox1.Items.Add("EXATTMNT - Attachment (" & oAttachmentFileString & ") already existing!")
|
|
_logger.Info("EXATTMNT - Attachment (" & oAttachmentFileString & ") already existing!", False, "EXTRACT_ATTACHMENTS")
|
|
End If
|
|
Else
|
|
oString = " ALL OK! EXISTING"
|
|
_logger.Info(oString)
|
|
ListBox1.Items.Add(oString)
|
|
End If
|
|
End If
|
|
|
|
|
|
Catch ex As Exception
|
|
_logger.Warn($"Error while creating and saving attachment-name: {ex.Message} - AttachmentName: {oAttachmentFileString}")
|
|
|
|
End Try
|
|
oMessage = Nothing
|
|
Next
|
|
|
|
Catch ex As Exception
|
|
_logger.Error(ex)
|
|
End Try
|
|
|
|
|
|
Next fri
|
|
End Sub
|
|
Private Function CleanInput(strIn As String) As String
|
|
' Replace invalid characters with empty strings.
|
|
Try
|
|
Return Regex.Replace(strIn, "[^\w\.@-]", "")
|
|
' If we timeout when replacing invalid characters,
|
|
' we should return String.Empty.
|
|
Catch ex As Exception
|
|
_logger.Error(ex)
|
|
Return String.Empty
|
|
End Try
|
|
End Function
|
|
|
|
Private Sub btExtractPdfAttachments_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles BarButtonItem4.ItemClick
|
|
' FileOpen Dialog
|
|
Dim fileOpenDlg = OpenFileDialog1
|
|
|
|
If fileOpenDlg.ShowDialog() = DialogResult.OK Then
|
|
Dim oFilename = fileOpenDlg.FileName
|
|
|
|
' Call Extract Method
|
|
ExtractEmbeddedPDFAttachments(oFilename)
|
|
|
|
End If
|
|
|
|
End Sub
|
|
Private Sub ExtractEmbeddedPDFAttachments(pFilename As String)
|
|
Try
|
|
|
|
Dim GDPictureLicense As String = ConfigDbFunct.GetProductLicense("GDPICTURE", "11.2024", _MyLogger, My.Settings.DD_ECM_CONSTRING)
|
|
|
|
Dim oValidExtensions = New List(Of String) From {"pdf", "xls", "xlsx", "doc", "docx", "ppt", "pptx"}
|
|
Dim oGraphicExtensions = New List(Of String) From {"jpg", "bmp", "jpeg", "gif", "png", "xml"}
|
|
|
|
Dim oFileInfo As New FileInfo(pFilename)
|
|
|
|
If oFileInfo.Extension.ToLower = ".pdf" Then
|
|
Dim oPDFConsistent As Boolean = True
|
|
Dim oLicenseManager As New LicenseManager
|
|
oLicenseManager.RegisterKEY(GDPictureLicense)
|
|
|
|
Dim oGdPicturePDF As New GdPicturePDF()
|
|
' Lic
|
|
Dim oStatus As GdPictureStatus = oGdPicturePDF.LoadFromFile(pFilename, True)
|
|
If oStatus <> GdPictureStatus.OK Then
|
|
oPDFConsistent = False
|
|
Dim oResult = $"PDF-Consistency of attached file {pFilename} is not ok. ({oStatus.ToString})"
|
|
Else
|
|
Dim embeddedFileCount As Integer = oGdPicturePDF.GetEmbeddedFileCount()
|
|
If embeddedFileCount > 0 Then
|
|
For i As Integer = 0 To embeddedFileCount - 1
|
|
Dim oEmbAttName As String = oGdPicturePDF.GetEmbeddedFileName(i)
|
|
Dim fileDetail As IO.FileInfo
|
|
fileDetail = My.Computer.FileSystem.GetFileInfo(oEmbAttName)
|
|
If oGdPicturePDF.GetStat() = GdPictureStatus.OK Then
|
|
Dim FileSize As Integer = oGdPicturePDF.GetEmbeddedFileSize(i)
|
|
Dim oValidExt = oValidExtensions.Any(Function(ext) oEmbAttName.EndsWith(ext))
|
|
|
|
If oValidExt = False Then
|
|
_logger.Info("Invalid FileExtension of embedded file [{0}]", oEmbAttName)
|
|
Dim GraphicExt = oGraphicExtensions.Any(Function(ext) oEmbAttName.EndsWith(ext))
|
|
If GraphicExt = False Then
|
|
Dim oInfo = $"Consistency or extension of attached file [{oEmbAttName}] is not ok."
|
|
|
|
End If
|
|
Continue For
|
|
End If
|
|
If oGdPicturePDF.GetStat() = GdPictureStatus.OK Then
|
|
Dim FileData As Byte() = New Byte(FileSize) {}
|
|
Dim status As GdPictureStatus = oGdPicturePDF.ExtractEmbeddedFile(0, FileData)
|
|
If status <> GdPictureStatus.OK Or FileSize = 0 Then
|
|
oPDFConsistent = False
|
|
|
|
Dim oResult = $"Consistency or PDF-State of embedded file [{oEmbAttName}] is not ok."
|
|
|
|
Continue For
|
|
End If
|
|
End If
|
|
End If
|
|
Next
|
|
End If
|
|
End If
|
|
End If
|
|
|
|
|
|
Catch ex As Exception
|
|
_logger.Error(ex)
|
|
|
|
|
|
End Try
|
|
End Sub
|
|
|
|
Private Sub btExtractMailAttachments_ItemClick(sender As Object, e As DevExpress.XtraBars.ItemClickEventArgs) Handles btExtractMailAttachments.ItemClick
|
|
' Hier verarbeiten wir eine ausgewählte EML-Datei
|
|
' und speichern alle Anhänge auf die Platte.
|
|
' Der Einstieg und der Ablauf entspricht dem des Services.
|
|
' Unterschied ist die lokale Datei
|
|
|
|
Dim connectionString As String = "Server=SDD-VMP04-SQL17\DD_DEVELOP01;Database=DD_ECM;User Id=sa;Password=dd"
|
|
|
|
Dim oConfigData As Config = New Config() With {
|
|
.Debug = False,
|
|
.GDPictureVersion = "11.2024",
|
|
.UseWindream = False,
|
|
.ConnectionString = connectionString
|
|
}
|
|
|
|
Dim Worker As ExtractAttachmentsFromEMLFile = New ExtractAttachmentsFromEMLFile()
|
|
|
|
' FileOpen Dialog
|
|
Dim fileOpenDlg = OpenFileDialog2
|
|
|
|
If fileOpenDlg.ShowDialog() = DialogResult.OK Then
|
|
Dim oFilename = fileOpenDlg.FileName
|
|
|
|
' Call Extract Method
|
|
Worker.CallWorkerProcess(oFilename, oConfigData)
|
|
End If
|
|
|
|
End Sub
|
|
End Class
|