diff --git a/App/EmailProfiler.Common/ClassCurrent.vb b/App/EmailProfiler.Common/ClassCurrent.vb
index de94c92..ff4883d 100644
--- a/App/EmailProfiler.Common/ClassCurrent.vb
+++ b/App/EmailProfiler.Common/ClassCurrent.vb
@@ -53,4 +53,5 @@ Public Class ClassCurrent
Public Shared Property TEMP_WORK_FILES As List(Of String) = New List(Of String)
Public Shared Property GDPictureLicense As String = "None"
+ Public Shared Property EmailAttachments As List(Of EmailAttachment) = New List(Of EmailAttachment)
End Class
diff --git a/App/EmailProfiler.Common/Data/EmailAttachment.vb b/App/EmailProfiler.Common/Data/EmailAttachment.vb
new file mode 100644
index 0000000..e6b64f6
--- /dev/null
+++ b/App/EmailProfiler.Common/Data/EmailAttachment.vb
@@ -0,0 +1,27 @@
+Imports System.IO
+Imports GdPicture14
+
+Public Class EmailAttachment
+ Public OrgFileName As String = ""
+ Public DestFileName As String = ""
+ Public DestFilePath As String = ""
+
+ Public FileStatus As GdPictureStatus = GdPictureStatus.OK
+
+ Public IsValidExtension As Boolean = True
+ Public SendInfoMailNecessary As Boolean = False
+ Public ErrorCodeValue As ErrorCode = ErrorCode.Unknown
+
+ Public EmbeddedFiles As List(Of EmailAttachment) = New List(Of EmailAttachment)
+
+ Public ReadOnly Property Extension As String
+ Get
+ If String.IsNullOrEmpty(OrgFileName) = False Then
+ Return Path.GetExtension(OrgFileName)
+ Else
+ Return String.Empty
+ End If
+ End Get
+ End Property
+
+End Class
diff --git a/App/EmailProfiler.Common/EmailProfiler.Common.vbproj b/App/EmailProfiler.Common/EmailProfiler.Common.vbproj
index 22446cc..0e84716 100644
--- a/App/EmailProfiler.Common/EmailProfiler.Common.vbproj
+++ b/App/EmailProfiler.Common/EmailProfiler.Common.vbproj
@@ -115,13 +115,14 @@
+
-
+
diff --git a/App/EmailProfiler.Common/ErrorCode.vb b/App/EmailProfiler.Common/Enum/ErrorCode.vb
similarity index 80%
rename from App/EmailProfiler.Common/ErrorCode.vb
rename to App/EmailProfiler.Common/Enum/ErrorCode.vb
index c8bdb26..50409a3 100644
--- a/App/EmailProfiler.Common/ErrorCode.vb
+++ b/App/EmailProfiler.Common/Enum/ErrorCode.vb
@@ -3,4 +3,5 @@
NoAttachments = 10001
SenderValidationFailed = 10002
PDFStructureCorrupt = 10003
+ FileExtensionNotValid = 10004
End Enum
diff --git a/App/EmailProfiler.Common/clsWorkEmail.vb b/App/EmailProfiler.Common/clsWorkEmail.vb
index 9e8d04e..3ec86b8 100644
--- a/App/EmailProfiler.Common/clsWorkEmail.vb
+++ b/App/EmailProfiler.Common/clsWorkEmail.vb
@@ -14,6 +14,7 @@ Imports DigitalData.Modules.Patterns
Imports System.Data.SqlClient
Imports GdPicture14
Imports Limilabs.Client.IMAP
+Imports System.Net.NetworkInformation
Public Class clsWorkEmail
Private Const SUBJECT_MAX_LENGTH = 25
@@ -46,6 +47,12 @@ Public Class clsWorkEmail
Private ReadOnly _RejectionTemplateId As Integer = 0
Private ReadOnly _InfoTemplateId As Integer = 0
+ Private ReadOnly _LicenseManager As New LicenseManager
+
+ Private ReadOnly _ValidExtensions As List(Of String)
+ Private ReadOnly _GraphicExtensions As List(Of String)
+
+
Private _worked_email As Boolean = False
Sub New(LogConf As LogConfig, ConStr As String, WmConStr As String, pUseWindream As Boolean, EmailAccountID As Integer, EmlProfPraefix As String, pRejectionTemplateId As Integer, pInfoTemplateId As Integer)
@@ -60,6 +67,8 @@ Public Class clsWorkEmail
_InfoTemplateId = pInfoTemplateId
_Logger.Debug($"_RejectionTemplateId: {_RejectionTemplateId}")
+ _ValidExtensions = New List(Of String) From {"pdf", "xls", "xlsx", "doc", "docx", "ppt", "pptx"}
+ _GraphicExtensions = New List(Of String) From {"jpg", "bmp", "jpeg", "gif", "png", "xml"}
If pUseWindream Then
_windream = New clsWindream_allgemein(LogConf)
@@ -67,6 +76,8 @@ Public Class clsWorkEmail
_windreamConnectionString = WmConStr
End If
+ _LicenseManager.RegisterKEY(GDPictureLicense)
+
_EmailAccountID = EmailAccountID
SUBJECT_PRAFIX = EmlProfPraefix
Catch ex As Exception
@@ -214,9 +225,11 @@ Public Class clsWorkEmail
If IS_LOCAL_TEST = False Then
InsertHistoryEntry(CurrentMail)
End If
- End If
- Return True
+ ' Jetzt werden die ggf gefundenen Attachment-Fehler überprüft und verarbeitet
+ SendMailToSenderIfAttachmentsAreNotValid()
+ Return True
+ End If
End If
@@ -226,6 +239,85 @@ Public Class clsWorkEmail
End Try
End Function
+ '''
+ ''' Wenn beim Herauslösen der Attachments festgestellt wurde,
+ ''' das ein Teil der Attachments fehlerhaft war, wird der Absender hier
+ ''' darüber informiert.
+ '''
+ Private Sub SendMailToSenderIfAttachmentsAreNotValid()
+
+ Dim oHtmlFilenameList As String = GetHtmlFilenameList()
+
+ If oHtmlFilenameList.IsNotNullOrEmpty() Then
+
+ AddToEmailQueueMSSQL(CurrentMail.MessageId, "", "Attachment invalid", _EmailAccountID, _InfoTemplateId, ErrorCode.PDFStructureCorrupt, oHtmlFilenameList, "")
+
+ End If
+ End Sub
+
+ '''
+ ''' Stellt die Dateinamen der Dateien zusammen, die nicht valide sind.
+ ''' Die Ausgabe erfolgt als HTML-Liste
+ '''
+ Private Function GetHtmlFilenameList() As String
+ Dim filenameHtmlString As String = String.Empty
+ Dim oComment As String = String.Empty
+
+ For Each attachmentItem In EmailAttachments
+
+ If attachmentItem.SendInfoMailNecessary = True Then
+
+ oComment = GetErrorCodeComment(attachmentItem.ErrorCodeValue)
+ AddTrackingStatusMSSQL(CurrentMail.MessageId, attachmentItem.OrgFileName, "FILE CONSISTENCY NOT OK", oComment, "EMail Profiler")
+
+ filenameHtmlString += "" + attachmentItem.OrgFileName + ""
+ End If
+
+ ' prüfe evtl. eingebettete Anhänge
+ Dim embeddedFilenamesHtmlString As String = String.Empty
+ If attachmentItem.EmbeddedFiles.Count > 0 Then
+
+ For Each embeddedItem In attachmentItem.EmbeddedFiles
+ If embeddedItem.SendInfoMailNecessary = True Then
+
+ oComment = GetErrorCodeComment(embeddedItem.ErrorCodeValue)
+ AddTrackingStatusMSSQL(CurrentMail.MessageId, embeddedItem.OrgFileName, "EMBEDDED FILE CONSISTENCY NOT OK", oComment, "EMail Profiler")
+
+ embeddedFilenamesHtmlString += "" + embeddedItem.OrgFileName + ""
+ End If
+ Next
+
+ If embeddedFilenamesHtmlString.IsNotNullOrEmpty() Then
+ embeddedFilenamesHtmlString = "" + embeddedFilenamesHtmlString + "
"
+ End If
+ End If
+
+ If embeddedFilenamesHtmlString.IsNotNullOrEmpty() Then
+ filenameHtmlString += embeddedFilenamesHtmlString
+ End If
+
+ Next
+
+ If filenameHtmlString.IsNotNullOrEmpty() Then
+ filenameHtmlString = "" + filenameHtmlString + "
"
+ End If
+
+ Return filenameHtmlString
+ End Function
+
+ Private Function GetErrorCodeComment(errorCodeValue As ErrorCode) As String
+
+ Dim retValue As String = String.Empty
+
+ If errorCodeValue = ErrorCode.FileExtensionNotValid Then
+ retValue = "File Extension not valid"
+ ElseIf errorCodeValue = ErrorCode.PDFStructureCorrupt Then
+ retValue = "PDF Structure corrupt"
+ End If
+
+ Return retValue
+ End Function
+
'''
''' Method to decide wether we use the old or the new
''' Rejection E-mail method.
@@ -567,8 +659,8 @@ Public Class clsWorkEmail
If COPY2HDD(pCurrentMail, oRow("COPY_2_HDD"), oRow("PATH_ORIGINAL"), oRow("PATH_EMAIL_ERRORS"), True) = True Then
- If EXTRACT_ATTACHMENTS(pCurrentMail, oExtractMainPath, oRow("PATH_EMAIL_ERRORS")) = True Then
-
+ 'If EXTRACT_ATTACHMENTS(pCurrentMail, oExtractMainPath, oRow("PATH_EMAIL_ERRORS")) = True Then
+ If ExtractAttachments(pCurrentMail, oExtractMainPath) = True Then
Return True
Else
_Logger.Warn("!##Returning false from EXTRACT_ATTACHMENTS!##")
@@ -577,11 +669,8 @@ Public Class clsWorkEmail
Else
Return False
End If
-
-
Next
-
Return True
Catch ex As Exception
_Logger.Error(ex)
@@ -802,6 +891,222 @@ Public Class clsWorkEmail
Return False
End Try
End Function
+
+ Private Function ExtractAttachments(pCurrentMail As MailContainer, pExtractPath As String) As Boolean
+ _Logger.Debug("In ExtractAttachments - pExtractPath = [{0}]", pExtractPath)
+
+ CURRENT_ATTMT_COUNT = 0
+ TEMP_WORK_FILES.Clear()
+ EmailAttachments.Clear()
+
+ If String.IsNullOrEmpty(CurrentTempMailPath) Then
+ _Logger.Warn("ExtractAttachments() CurrentTempMailPath is NOTHING")
+ Return True
+ End If
+
+ If File.Exists(CurrentTempMailPath) = False Then
+ _Logger.Warn($"ExtractAttachments() {CurrentTempMailPath} not existing")
+ Return True
+ End If
+
+ Dim oExtractTempPath As String = GetExtractTempPath(pExtractPath)
+ If String.IsNullOrEmpty(oExtractTempPath) Then
+ _Logger.Warn("ExtractAttachments() oExtractTempPath is NOTHING")
+ Return True
+ End If
+
+ Dim oAttachmentCount As Integer = 0
+
+ For Each oAttachment As MimeData In pCurrentMail.Mail.Attachments
+ _Logger.Info("Working on Attachment [{0}]", oAttachment.SafeFileName)
+
+ Dim oEmailAttachment As EmailAttachment = New EmailAttachment() With
+ {
+ .OrgFileName = oAttachment.SafeFileName
+ }
+ EmailAttachments.Add(oEmailAttachment)
+
+ If ValidateFileExtension(oEmailAttachment) = False Then
+ Continue For
+ End If
+
+ oEmailAttachment.DestFileName = $"{pCurrentMail.MessageId}~Attm{oAttachmentCount}{oEmailAttachment.Extension}"
+ _Logger.Debug("Final Filename for Attachment: [{0}]", oEmailAttachment.DestFileName)
+
+ oEmailAttachment.DestFilePath = Path.Combine(oExtractTempPath, oEmailAttachment.DestFileName)
+ _Logger.Debug("Final Path for Attachment: [{0}]", oEmailAttachment.DestFilePath)
+
+ If CleanUpFilePath(oEmailAttachment.DestFilePath) = False Then
+ _Logger.Warn("ExtractAttachments() Could not clean up filepath!")
+ MESSAGE_ERROR = True
+ Continue For
+ End If
+
+ ' Sichere Datei auf Platte
+ If SaveFileToDisk(oAttachment, oEmailAttachment.DestFilePath) = True Then
+ _Logger.Info(String.Format("Attachment saved to [{0}]", oEmailAttachment.DestFilePath))
+
+ ' Schreibe Satz nach EMLP_HISTORY
+ If (InsertAttachmentHistoryEntry(pCurrentMail, oEmailAttachment.OrgFileName, oEmailAttachment.DestFileName)) = True Then
+ oAttachmentCount += 1
+ End If
+ Else
+ _Logger.Warn($"Error while saving AttachmentName: {oEmailAttachment.DestFilePath}")
+ MESSAGE_ERROR = True
+ Continue For
+ End If
+
+ ' Verarbeite PDF Files
+ If oEmailAttachment.Extension.Equals(".pdf", StringComparison.InvariantCultureIgnoreCase) = True Then
+
+ Dim oGdPicturePDF As New GdPicturePDF()
+ Dim oStatus As GdPictureStatus = oGdPicturePDF.LoadFromFile(oEmailAttachment.DestFilePath, True)
+ If oStatus = GdPictureStatus.OK Then
+ ' Verarbeite Embedded Attachments
+ WorkEmbeddedAttachments(oEmailAttachment, oGdPicturePDF)
+
+ Else
+ oAttachmentCount -= 1
+ CleanUpFilePath(oEmailAttachment.DestFilePath)
+ oEmailAttachment.FileStatus = oStatus
+ oEmailAttachment.ErrorCodeValue = ErrorCode.PDFStructureCorrupt
+ oEmailAttachment.SendInfoMailNecessary = True
+
+ MESSAGE_ERROR = True
+ Continue For
+ End If
+
+ End If
+
+
+ TEMP_WORK_FILES.Add(oEmailAttachment.DestFilePath)
+ Next
+
+ CURRENT_ATTMT_COUNT = oAttachmentCount
+
+ If MESSAGE_ERROR = True Then
+ WorkTempFiles("delete")
+ Return False
+ End If
+
+ WorkTempFiles("move")
+ Return True
+
+ End Function
+
+ Private Sub WorkEmbeddedAttachments(pEmailAttachment As EmailAttachment, pGDPicturePDF As GdPicturePDF)
+
+ Dim embeddedFileCount As Integer = pGDPicturePDF.GetEmbeddedFileCount()
+ If embeddedFileCount <= 0 Then
+ ' nothing to do
+ Return
+ End If
+
+ For i As Integer = 0 To embeddedFileCount - 1
+ Dim oEmbAttName As String = pGDPicturePDF.GetEmbeddedFileName(i)
+
+ Dim oEmbeddedFile As EmailAttachment = New EmailAttachment() With
+ {
+ .OrgFileName = oEmbAttName
+ }
+ pEmailAttachment.EmbeddedFiles.Add(oEmbeddedFile)
+
+ oEmbeddedFile.FileStatus = pGDPicturePDF.GetStat()
+ If oEmbeddedFile.FileStatus = GdPictureStatus.OK Then
+ If ValidateFileExtension(oEmbeddedFile) = False Then
+ Continue For
+ End If
+
+ Dim FileSize As Integer = pGDPicturePDF.GetEmbeddedFileSize(i)
+ If pGDPicturePDF.GetStat() = GdPictureStatus.OK Then
+ Dim FileData As Byte() = New Byte(FileSize) {}
+ Dim status As GdPictureStatus = pGDPicturePDF.ExtractEmbeddedFile(0, FileData)
+
+ oEmbeddedFile.FileStatus = status
+ If status <> GdPictureStatus.OK Or FileSize = 0 Then
+ oEmbeddedFile.ErrorCodeValue = ErrorCode.PDFStructureCorrupt
+ oEmbeddedFile.SendInfoMailNecessary = True
+ Continue For
+ End If
+ End If
+ End If
+ Next
+
+ End Sub
+
+ Private Function SaveFileToDisk(pAttachment As MimeData, pAttachmentFilePath As String) As Boolean
+
+ Try
+ _Logger.Debug(String.Format("Trying to save attachment [{0}]", pAttachmentFilePath))
+ pAttachment.Save(pAttachmentFilePath)
+
+ Dim oFileInfo As New FileInfo(pAttachmentFilePath)
+ Dim oFileLength As Long = oFileInfo.Length
+ If oFileLength <= 2 Then
+ _Logger.Warn($"##!! oFileLength for AttachmentObjects is <=2 !!##")
+ CleanUpFilePath(pAttachmentFilePath)
+ Return False
+ End If
+
+ Return True
+
+ Catch ex As Exception
+ _Logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ Private Function CleanUpFilePath(pFilePath As String) As Boolean
+ Try
+ If File.Exists(pFilePath) Then
+ _Logger.Info("File [{0}] will be deleted!", pFilePath)
+ File.Delete(pFilePath)
+ End If
+
+ Return True
+
+ Catch ex As Exception
+ _Logger.Error(ex)
+ Return False
+ End Try
+ End Function
+
+ Private Function GetExtractTempPath(pExtractPath As String) As String
+ Try
+ Dim oExtractTempPath = Path.Combine(pExtractPath, "Temp")
+ If Directory.Exists(oExtractTempPath) = False Then
+ Directory.CreateDirectory(oExtractTempPath)
+ End If
+
+ Return oExtractTempPath
+
+ Catch ex As Exception
+ _Logger.Error(ex)
+ Return String.Empty
+ End Try
+ End Function
+
+ Private Function ValidateFileExtension(pAttachmentData As EmailAttachment) As Boolean
+ _Logger.Debug("Validate extension of [{0}]", pAttachmentData.OrgFileName)
+
+ Dim lowerFilename = pAttachmentData.OrgFileName.ToLower
+ Dim oIsValidExtension = _ValidExtensions.Any(Function(ext) lowerFilename.EndsWith(ext))
+ Dim oIsGraphicExtension = _GraphicExtensions.Any(Function(ext) lowerFilename.EndsWith(ext))
+
+ If oIsValidExtension = False Then
+ pAttachmentData.IsValidExtension = False
+ If oIsGraphicExtension = False Then
+ _Logger.Warn("File has no valid extension, and it has no graphic extension. In this case we have to inform the sender!")
+ pAttachmentData.SendInfoMailNecessary = True
+ pAttachmentData.ErrorCodeValue = ErrorCode.FileExtensionNotValid
+ End If
+
+ Return False
+ End If
+
+ Return True
+ End Function
+
Private Function EXTRACT_ATTACHMENTS(pCurrentMail As MailContainer, pExtractPath As String, pErrorPath As String)
_Logger.Debug("In EXTRACT_ATTACHMENTS...")
@@ -981,24 +1286,26 @@ Public Class clsWorkEmail
Return False
End Try
End Function
- Private Sub WorkTempFiles(pACT As String)
+
+ Private Sub WorkTempFiles(pAction As String)
For Each _file In TEMP_WORK_FILES
- _Logger.Debug("Working ({0}) on temp work file: [{1}]", pACT, _file)
-
- If File.Exists(_file) Then
- If pACT = "Delete" Then
- Try
+ _Logger.Debug("Working ({0}) on temp work file: [{1}]", pAction, _file)
+ Try
+ If File.Exists(_file) Then
+ If pAction = "Delete" Then
File.Delete(_file)
- Catch ex As Exception
- _Logger.Error(ex)
- _Logger.Warn("Could not delete the tempworkfile : [{0}]", _file)
- End Try
- ElseIf pACT = "move" Then
- File.Move(_file, _file.Replace("\Temp", ""))
- End If
+ ElseIf pAction = "move" Then
+ File.Move(_file, _file.Replace("\Temp", ""))
+ End If
- End If
+ End If
+ Catch ex As Exception
+ _Logger.Error(ex)
+ _Logger.Warn("Could not delete/move the tempworkfile : [{0}]", _file)
+ MESSAGE_ERROR = True
+ End Try
Next
+
TEMP_WORK_FILES.Clear()
End Sub
diff --git a/App/wisag_check_Att/Form1.Designer.vb b/App/wisag_check_Att/Form1.Designer.vb
index d743915..7dcbabe 100644
--- a/App/wisag_check_Att/Form1.Designer.vb
+++ b/App/wisag_check_Att/Form1.Designer.vb
@@ -24,53 +24,34 @@ Partial Class Form1
Private Sub InitializeComponent()
Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1))
Me.RibbonControl1 = New DevExpress.XtraBars.Ribbon.RibbonControl()
- Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
- Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
- Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
Me.BarButtonItem1 = New DevExpress.XtraBars.BarButtonItem()
- Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog()
Me.bsifolderbrowser = New DevExpress.XtraBars.BarStaticItem()
Me.BarButtonItem2 = New DevExpress.XtraBars.BarButtonItem()
Me.BarButtonItem3 = New DevExpress.XtraBars.BarButtonItem()
- Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
- Me.ListBox1 = New System.Windows.Forms.ListBox()
Me.bsitemppath = New DevExpress.XtraBars.BarStaticItem()
+ Me.RibbonPage1 = New DevExpress.XtraBars.Ribbon.RibbonPage()
+ Me.RibbonPageGroup1 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
+ Me.RibbonPageGroup2 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
+ Me.RibbonStatusBar1 = New DevExpress.XtraBars.Ribbon.RibbonStatusBar()
+ Me.FolderBrowserDialog1 = New System.Windows.Forms.FolderBrowserDialog()
+ Me.ListBox1 = New System.Windows.Forms.ListBox()
+ Me.RibbonPageGroup3 = New DevExpress.XtraBars.Ribbon.RibbonPageGroup()
+ Me.BarButtonItem4 = New DevExpress.XtraBars.BarButtonItem()
+ Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog()
CType(Me.RibbonControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'RibbonControl1
'
Me.RibbonControl1.ExpandCollapseItem.Id = 0
- Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.SearchEditItem, Me.RibbonControl1.ExpandCollapseItem, Me.BarButtonItem1, Me.bsifolderbrowser, Me.BarButtonItem2, Me.BarButtonItem3, Me.bsitemppath})
+ Me.RibbonControl1.Items.AddRange(New DevExpress.XtraBars.BarItem() {Me.RibbonControl1.ExpandCollapseItem, Me.RibbonControl1.SearchEditItem, Me.BarButtonItem1, Me.bsifolderbrowser, Me.BarButtonItem2, Me.BarButtonItem3, Me.bsitemppath, Me.BarButtonItem4})
Me.RibbonControl1.Location = New System.Drawing.Point(0, 0)
- Me.RibbonControl1.MaxItemId = 6
+ Me.RibbonControl1.MaxItemId = 7
Me.RibbonControl1.Name = "RibbonControl1"
Me.RibbonControl1.Pages.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPage() {Me.RibbonPage1})
Me.RibbonControl1.Size = New System.Drawing.Size(800, 150)
Me.RibbonControl1.StatusBar = Me.RibbonStatusBar1
'
- 'RibbonPage1
- '
- Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2})
- Me.RibbonPage1.Name = "RibbonPage1"
- Me.RibbonPage1.Text = "RibbonPage1"
- '
- 'RibbonPageGroup1
- '
- Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1)
- Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem3)
- Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
- Me.RibbonPageGroup1.Text = "Konfig"
- '
- 'RibbonStatusBar1
- '
- Me.RibbonStatusBar1.ItemLinks.Add(Me.bsifolderbrowser)
- Me.RibbonStatusBar1.ItemLinks.Add(Me.bsitemppath)
- Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 423)
- Me.RibbonStatusBar1.Name = "RibbonStatusBar1"
- Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1
- Me.RibbonStatusBar1.Size = New System.Drawing.Size(800, 27)
- '
'BarButtonItem1
'
Me.BarButtonItem1.Caption = "choose directory"
@@ -100,12 +81,42 @@ Partial Class Form1
Me.BarButtonItem3.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem3.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
Me.BarButtonItem3.Name = "BarButtonItem3"
'
+ 'bsitemppath
+ '
+ Me.bsitemppath.Caption = "BarStaticItem1"
+ Me.bsitemppath.Id = 5
+ Me.bsitemppath.ImageOptions.SvgImage = CType(resources.GetObject("bsitemppath.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
+ Me.bsitemppath.Name = "bsitemppath"
+ Me.bsitemppath.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph
+ '
+ 'RibbonPage1
+ '
+ Me.RibbonPage1.Groups.AddRange(New DevExpress.XtraBars.Ribbon.RibbonPageGroup() {Me.RibbonPageGroup1, Me.RibbonPageGroup2, Me.RibbonPageGroup3})
+ Me.RibbonPage1.Name = "RibbonPage1"
+ Me.RibbonPage1.Text = "RibbonPage1"
+ '
+ 'RibbonPageGroup1
+ '
+ Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem1)
+ Me.RibbonPageGroup1.ItemLinks.Add(Me.BarButtonItem3)
+ Me.RibbonPageGroup1.Name = "RibbonPageGroup1"
+ Me.RibbonPageGroup1.Text = "Konfig"
+ '
'RibbonPageGroup2
'
Me.RibbonPageGroup2.ItemLinks.Add(Me.BarButtonItem2)
Me.RibbonPageGroup2.Name = "RibbonPageGroup2"
Me.RibbonPageGroup2.Text = "Run"
'
+ 'RibbonStatusBar1
+ '
+ Me.RibbonStatusBar1.ItemLinks.Add(Me.bsifolderbrowser)
+ Me.RibbonStatusBar1.ItemLinks.Add(Me.bsitemppath)
+ Me.RibbonStatusBar1.Location = New System.Drawing.Point(0, 423)
+ Me.RibbonStatusBar1.Name = "RibbonStatusBar1"
+ Me.RibbonStatusBar1.Ribbon = Me.RibbonControl1
+ Me.RibbonStatusBar1.Size = New System.Drawing.Size(800, 27)
+ '
'ListBox1
'
Me.ListBox1.Dock = System.Windows.Forms.DockStyle.Fill
@@ -115,13 +126,23 @@ Partial Class Form1
Me.ListBox1.Size = New System.Drawing.Size(800, 273)
Me.ListBox1.TabIndex = 2
'
- 'bsitemppath
+ 'RibbonPageGroup3
'
- Me.bsitemppath.Caption = "BarStaticItem1"
- Me.bsitemppath.Id = 5
- Me.bsitemppath.ImageOptions.SvgImage = CType(resources.GetObject("BarStaticItem1.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
- Me.bsitemppath.Name = "bsitemppath"
- Me.bsitemppath.PaintStyle = DevExpress.XtraBars.BarItemPaintStyle.CaptionGlyph
+ Me.RibbonPageGroup3.ItemLinks.Add(Me.BarButtonItem4)
+ Me.RibbonPageGroup3.Name = "RibbonPageGroup3"
+ Me.RibbonPageGroup3.Text = "PDF Handling"
+ '
+ 'BarButtonItem4
+ '
+ Me.BarButtonItem4.Caption = "Extract PDF-Attachments"
+ Me.BarButtonItem4.Id = 6
+ Me.BarButtonItem4.ImageOptions.SvgImage = CType(resources.GetObject("BarButtonItem4.ImageOptions.SvgImage"), DevExpress.Utils.Svg.SvgImage)
+ Me.BarButtonItem4.Name = "BarButtonItem4"
+ '
+ 'OpenFileDialog1
+ '
+ Me.OpenFileDialog1.Filter = "PDF Files|*.pdf"
+ Me.OpenFileDialog1.InitialDirectory = "e:\"
'
'Form1
'
@@ -151,4 +172,7 @@ Partial Class Form1
Friend WithEvents RibbonPageGroup2 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
Friend WithEvents ListBox1 As ListBox
Friend WithEvents bsitemppath As DevExpress.XtraBars.BarStaticItem
+ Friend WithEvents BarButtonItem4 As DevExpress.XtraBars.BarButtonItem
+ Friend WithEvents RibbonPageGroup3 As DevExpress.XtraBars.Ribbon.RibbonPageGroup
+ Friend WithEvents OpenFileDialog1 As OpenFileDialog
End Class
diff --git a/App/wisag_check_Att/Form1.resx b/App/wisag_check_Att/Form1.resx
index f8d231f..47ef8ef 100644
--- a/App/wisag_check_Att/Form1.resx
+++ b/App/wisag_check_Att/Form1.resx
@@ -120,7 +120,7 @@
- AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjE5LjIsIFZlcnNpb249MTkuMi4z
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJQCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -138,7 +138,7 @@
- AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjE5LjIsIFZlcnNpb249MTkuMi4z
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJQCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -156,7 +156,7 @@
- AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjE5LjIsIFZlcnNpb249MTkuMi4z
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAAMDAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -176,7 +176,7 @@
- AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjE5LjIsIFZlcnNpb249MTkuMi4z
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJQCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -192,9 +192,9 @@
NC43QzMyLjEsMTQuMywzMS44LDE0LDMxLjMsMTR6IiBjbGFzcz0iWWVsbG93IiAvPg0KPC9zdmc+Cw==
-
+
- AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjE5LjIsIFZlcnNpb249MTkuMi4z
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJQCAAAC77u/
PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -208,9 +208,31 @@
MC40QzIuMSwyNS4zLDIuMiwyNS4zLDIuMiwyNS4yeiIgY2xhc3M9IlllbGxvdyIgLz4NCiAgPC9nPg0K
ICA8cGF0aCBkPSJNMzEuMywxNEg5LjZMNCwyNmgyMS44YzAuNSwwLDEuMS0wLjMsMS4zLTAuN0wzMiwx
NC43QzMyLjEsMTQuMywzMS44LDE0LDMxLjMsMTR6IiBjbGFzcz0iWWVsbG93IiAvPg0KPC9zdmc+Cw==
+
+
+
+
+ AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIxLjIsIFZlcnNpb249MjEuMi40
+ LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+ dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMkCAAAC77u/
+ PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+ IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+ MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+ Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+ MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
+ LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD
+ MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+ Y2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgaWQ9IkF0dGFjaG1lbnRzIj4NCiAgICA8cGF0aCBkPSJN
+ MjIsMTB2MTNjMCwyLjgtMi4yLDUtNSw1cy01LTIuMi01LTVWN2MwLTEuNywxLjMtMywzLTNzMywxLjMs
+ MywzdjE2YzAsMC42LTAuNCwxLTEsMXMtMS0wLjQtMS0xVjEwaC0ydjEzICAgYzAsMS43LDEuMywzLDMs
+ M3MzLTEuMywzLTNWN2MwLTIuOC0yLjItNS01LTVzLTUsMi4yLTUsNXYxNmMwLDMuOSwzLjEsNyw3LDdz
+ Ny0zLjEsNy03VjEwSDIyeiIgY2xhc3M9IkJsYWNrIiAvPg0KICA8L2c+DQo8L3N2Zz4L
17, 17
+
+ 186, 17
+
\ No newline at end of file
diff --git a/App/wisag_check_Att/Form1.vb b/App/wisag_check_Att/Form1.vb
index 8f7001a..c30e2c7 100644
--- a/App/wisag_check_Att/Form1.vb
+++ b/App/wisag_check_Att/Form1.vb
@@ -1,17 +1,23 @@
-Imports System.IO
+Imports System.ComponentModel
+Imports System.IO
+Imports System.Net.Mail
Imports System.Text.RegularExpressions
+Imports DigitalData.Modules
Imports DigitalData.Modules.Database
Imports DigitalData.Modules.Logging
+Imports GdPicture14
Imports Independentsoft.Email.Mime
+Imports Attachment = Independentsoft.Email.Mime.Attachment
+Imports LicenseManager = GdPicture14.LicenseManager
Public Class Form1
- Private Logger As DigitalData.Modules.Logging.Logger
+ Private _logger As DigitalData.Modules.Logging.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()
+ _logger = MyLogger.GetLogger()
MyLogger.Debug = True
Dim dbResult As Boolean
@@ -108,66 +114,66 @@ Public Class Form1
End If
Dim oAttachmentFileString
oString = String.Format(" Working on Attachment [{0}]", oAttachment.GetFileName)
- Logger.Info(oString)
+ _logger.Info(oString)
ListBox1.Items.Add(oString)
Try
Dim oFilename = oAttachment.GetFileName
oFilename = CleanInput(oFilename)
- Logger.Debug($"oFilename [{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}]")
+ _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)
+ _logger.Info(oString)
ListBox1.Items.Add(oString)
If System.IO.File.Exists(oAttachmentFileString) = False Then
- Logger.Debug(String.Format("Trying to save attachment [{0}]", oAttachmentFileString))
+ _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))
+ _logger.Info(String.Format(" Attachment saved to [{0}]", oAttachmentFileString))
Else
- Logger.Warn($"##!! oFileLenth for AttachmentObjects is 0 !!##")
+ _logger.Warn($"##!! oFileLenth for AttachmentObjects is 0 !!##")
Try
File.Delete(oAttachmentFileString)
Catch ex As Exception
- Logger.Error(ex)
+ _logger.Error(ex)
End Try
End If
Catch ex As Exception
- Logger.Warn($"Error while saving attachment-name: {ex.Message} - AttachmentName: {oAttachmentFileString}")
+ _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")
+ _logger.Info("EXATTMNT - Attachment (" & oAttachmentFileString & ") already existing!", False, "EXTRACT_ATTACHMENTS")
End If
Else
oString = " ALL OK! EXISTING"
- Logger.Info(oString)
+ _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}")
+ _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)
+ _logger.Error(ex)
End Try
@@ -180,10 +186,86 @@ Public Class Form1
' If we timeout when replacing invalid characters,
' we should return String.Empty.
Catch ex As Exception
- Logger.Error(ex)
+ _logger.Error(ex)
Return String.Empty
End Try
End Function
+ Private Sub BarButtonItem4_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 oSQLGDPicture = "SELECT LICENSE FROM TBDD_3RD_PARTY_MODULES WHERE ACTIVE = 1"
+ Dim GDPictureLicense As String = "21182889975216572111813147150675976632"
+ 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
End Class
diff --git a/App/wisag_check_Att/wisag_check_Att.vbproj b/App/wisag_check_Att/wisag_check_Att.vbproj
index aef9c59..a6f6281 100644
--- a/App/wisag_check_Att/wisag_check_Att.vbproj
+++ b/App/wisag_check_Att/wisag_check_Att.vbproj
@@ -60,6 +60,9 @@
..\..\..\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll
+
+ D:\ProgramFiles\GdPicture.net 14\Redist\GdPicture.NET (.NET Framework 4.5)\GdPicture.NET.14.dll
+
P:\Projekte DIGITAL DATA\DIGITAL DATA - Entwicklung\DLL_Bibliotheken\Email .NET\Bin\Independentsoft.Email.dll