134 lines
6.1 KiB
VB.net
134 lines
6.1 KiB
VB.net
Imports System.IO
|
|
Imports Independentsoft
|
|
|
|
Public Class ClassFilehandle
|
|
Public Shared Function Decide_FileHandle(filename As String, handletype As String)
|
|
Try
|
|
If filename.EndsWith(".msg") Then
|
|
CURRENT_MESSAGEID = ""
|
|
Dim _msg As New Msg.Message(filename)
|
|
If _msg.Attachments.Count > 0 Then
|
|
Dim result As MsgBoxResult
|
|
result = MessageBox.Show("Achtung: Die Email enthält Anhänge!" & vbNewLine & "Wollen Sie die Anhänge separat indexieren und herauslösen?", "Nachfrage zur Indexierung:", MessageBoxButtons.YesNo, MessageBoxIcon.Question)
|
|
If result = MsgBoxResult.Yes Then
|
|
If handletype.StartsWith("@FW") Then
|
|
Return Email_Decay(filename, True)
|
|
Else
|
|
Return Email_Decay(filename)
|
|
End If
|
|
End If
|
|
End If
|
|
End If
|
|
Return Insert_GI_File(filename, handletype)
|
|
Catch ex As Exception
|
|
MsgBox("Unexpected Error in Decide_FileHandle: " & ex.Message, MsgBoxStyle.Critical)
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Private Shared Function Email_Decay(msgname As String, Optional FW As Boolean = False)
|
|
Try
|
|
Dim msgonly As String = "@MSGONLY@"
|
|
Dim ATT_EXTR As String = "@ATTMNTEXTRACTED@"
|
|
If FW = True Then
|
|
msgonly = "@FW_MSGONLY@"
|
|
ATT_EXTR = "@FW_ATTMNTEXTRACTED@"
|
|
End If
|
|
Dim erfolgreich As Boolean = False
|
|
Dim msg As New Msg.Message(msgname)
|
|
|
|
If Not msg.InternetMessageId Is Nothing Then
|
|
CURRENT_MESSAGEID = msg.InternetMessageId
|
|
Else
|
|
If LogErrorsOnly = False Then ClassLogger.Add(">> Email_Decay: Es konnte keine Message-ID gelesen werden. Eine GUID wird erzeugt!", False)
|
|
Dim sGUID As String
|
|
sGUID = System.Guid.NewGuid.ToString()
|
|
CURRENT_MESSAGEID = sGUID
|
|
End If
|
|
|
|
'Nur die MSGDatei ablegen
|
|
Dim tempfile As String = Path.Combine(Path.GetTempPath, Path.GetFileNameWithoutExtension(msgname) & "_excl_att.msg")
|
|
If File.Exists(tempfile) Then
|
|
File.Delete(tempfile)
|
|
End If
|
|
Dim _msgEXAtt As New Msg.Message(msgname)
|
|
_msgEXAtt.Attachments.Clear()
|
|
_msgEXAtt.Save(tempfile)
|
|
'Datei in Array zum Templöschen speichern
|
|
TEMP_FILES.Add(tempfile)
|
|
|
|
If Insert_GI_File(tempfile, msgonly) = True Then
|
|
erfolgreich = True
|
|
'Hier nun die Anhänge herauslösen
|
|
Dim _msg As New Msg.Message(msgname)
|
|
Dim i1 As Integer = 1
|
|
|
|
If LogErrorsOnly = False Then ClassLogger.Add(">> Anzahl der Attachments: " & _msg.Attachments.Count, False)
|
|
For Each attachment As Independentsoft.Msg.Attachment In _msg.Attachments
|
|
If erfolgreich = False Then
|
|
Exit For
|
|
End If
|
|
Dim attachment_name As String
|
|
If attachment.LongFileName Is Nothing Then
|
|
attachment_name = attachment.DisplayName
|
|
Else
|
|
attachment_name = attachment.LongFileName
|
|
End If
|
|
If Not attachment_name.Contains("inline") Then
|
|
tempfile = Path.Combine(Path.GetTempPath, attachment_name)
|
|
If File.Exists(tempfile) Then
|
|
File.Delete(tempfile)
|
|
End If
|
|
attachment.Save(tempfile)
|
|
'Datei in Array zum Templöschen speichern
|
|
TEMP_FILES.Add(tempfile)
|
|
If LogErrorsOnly = False Then ClassLogger.Add(">> Attachment (" & i1 & "):" & tempfile, False)
|
|
'nun der Insert des Anhanges
|
|
erfolgreich = Insert_GI_File(tempfile, ATT_EXTR)
|
|
i1 += 1
|
|
End If
|
|
|
|
Next
|
|
End If
|
|
Return erfolgreich
|
|
Catch ex As Exception
|
|
MsgBox("Error in Email_Decay: " & ex.Message, MsgBoxStyle.Critical)
|
|
End Try
|
|
End Function
|
|
|
|
Private Shared Function Insert_GI_File(filename As String, handleType As String)
|
|
Try
|
|
Dim filename_only As String = Path.GetFileName(filename)
|
|
|
|
Dim ins As String = "INSERT INTO TBGI_FILES_USER (FILENAME2WORK, USER@WORK,HANDLE_TYPE,FILENAME_ONLY) VALUES ('" & filename & "','" & Environment.UserName & "','" & handleType & "','" & filename_only & "')"
|
|
Return ClassDatabase.Execute_non_Query(ins, True)
|
|
|
|
Catch ex As Exception
|
|
Return False
|
|
End Try
|
|
End Function
|
|
Public Shared Function IsFileInUse(ByVal fullFilePath As String) As Boolean
|
|
' Gibt zurück, ob die übergebene Datei momentan exklusiv zu haben ist.
|
|
' Prüft, ob die angegeben Datei aktuell durch eine
|
|
' andere Anwendung in Benutzung ist
|
|
Dim ff As Integer = FreeFile()
|
|
If System.IO.File.Exists(fullFilePath) Then
|
|
Try
|
|
' Versuchen, die Datei mit *exklusiven* Lese- und
|
|
' Schreibrechten zu öffnen
|
|
FileOpen(ff, fullFilePath, OpenMode.Binary, OpenAccess.ReadWrite, OpenShare.LockReadWrite)
|
|
Catch ex As Exception
|
|
' Ist ein Fehler aufgetreten, so wird nach außen hin generell
|
|
' davon ausgegangen, dass die Datei in Benutzung ist (obwohl
|
|
' auch andere Ursachen, etwa Rechteprobleme, möglich sind).
|
|
If LogErrorsOnly = False Then ClassLogger.Add(">> FileInUse Message: " & ex.Message, False)
|
|
IsFileInUse = True
|
|
Finally
|
|
' Die eventuell geöffnete Datei schließen
|
|
FileClose(ff)
|
|
End Try
|
|
Return False
|
|
End If
|
|
|
|
End Function
|
|
End Class
|