Hallo zusammen,
ich will aus hunderten abgelegten Outlook 2007 Mails (MSG Dateien das Datum/Zeit und den Absender ermitteln (funktioniert soweit auch).
Anschließend soll die Datei das Erstellungsdatum der Mail bekommen und nicht wie jetzt das aktuelle Datum von gestern (da habe ich die Mails in Ordner abgelegt.
Hier mal mein bisheriger Code
Imports Microsoft.Office.Interop
Public Class Form1
Const Dateipfad As String = "C:\tmp\Zur Info - Satzung.msg"
Sub ändern(Dateipfad As String, neuesDatum As Date)
Dim sFile As String = Dateipfad
' FileInfo-Objekt erstellen
With New System.IO.FileInfo(sFile)
' Datums- und Zeitangaben auslesen
Debug.Print("Erstellungsdatum: " & .CreationTime)
Debug.Print("Letzter Zugriff: " & .LastAccessTime)
Debug.Print("Letzte Änderung: " & .LastWriteTime)
' Erstellungsdatum ändern
Dim DatumTag As Integer
'DatumTag = DateTime.Parse(neuesDatum.Day).DayOfWeek
.CreationTime = New Date(neuesDatum.Year, neuesDatum.Month, _
neuesDatum.Day, neuesDatum.Hour, neuesDatum.Minute, _
neuesDatum.Second)
' Datumsangabe "Letzter Zugriff" ändern
.LastAccessTime = neuesDatum ' New Date(2009, 5, 16, 13, 12, 11)
' Datum "Letzte Änderung" ändern
.LastWriteTime = neuesDatum ' New Date(2009, 5, 17, 13, 12, 11)
End With
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) _
Handles Button1.Click
Dim objOutlook As Outlook.Application
Dim objOutlookItem As Outlook.MailItem
Dim strPath As String
Dim strFile As String
Dim NeuesDatum As Date
' War auch mal ein Text, klappt unten aber auch nicht
Dim ExterneAnwendung As New System.Diagnostics.Process()
ExterneAnwendung.StartInfo.FileName = "OUTLOOK.EXE"
' ExterneAnwendung.Start() ' deaktiviert, da hier Outlook selbst _
starten würde
' Erzeugen...
objOutlook = New Outlook.Application
' Check...
If Not objOutlook Is Nothing Then
' Ab hier könntest Du eine Schleife draus machen,
' um die Dateien alle einzulesen
'
' Pfad und Datei...
strPath = "E:\Temp"
strFile = "TEST.msg"
' Mail öffnen...
objOutlookItem = CType(objOutlook.Session.OpenSharedItem( _
Dateipfad), Outlook.MailItem) 'strPath & "\" & strFile)
' Check...
If Not objOutlookItem Is Nothing Then
' Auslesen...
'MsgBox "Body: " & objOutlookItem.Body
'MsgBox "CreationTime: " & objOutlookItem.CreationTime
'MsgBox "DeferredDeliveryTime: " &
' objOutlookItem.DeferredDeliveryTime
MsgBox("ReceivedTime: " & objOutlookItem.ReceivedTime)
'MsgBox "ReminderTime: " & objOutlookItem.ReminderTime
MsgBox("SenderName: " & objOutlookItem.SenderName)
MsgBox("SenderEmailAddress: " & _
objOutlookItem.SenderEmailAddress)
MsgBox("Subject: " & objOutlookItem.Subject)
NeuesDatum = objOutlookItem.ReceivedTime
' Schließen...
' Hie scheint es dran zu liegen
objOutlookItem.Close(Outlook.OlInspectorClose.olDiscard) '
' Close(olDiscard) ' 1 = Discard = Verwerfen
'Outlook.Application.close()
End If
' Zurücksetzen...
objOutlookItem = Nothing
'
' Hier wäre das Ende der Schleife
'
' Abschließen schließen...
objOutlook.Quit()
End If
' Aufräumen...
objOutlook = Nothing
' ExterneAnwendung.kill() ' Findet hier keinen passenden Prozess. Liegt _
wohl an der oben deaktivierten .Start() Anweisung
Call ändern(Dateipfad, NeuesDatum)
End Sub
End Class Ich glaube, dass es an der Zeile
objOutlookItem.Close(Outlook.OlInspectorClose.olDiscard) ' Close(olDiscard) ' 1 = Discard = Verwerfen
liegt, denn Outlook ist als Task noch zu sehen. Beende ich Outlook manuell, dann funktioniert alles super.
(Die Massenabfertigung muss ich natürlich noch einbauen, und aufräumen sowieso).
Wäre echt super, wenn mir einer von Euch helfen könnte. Im Internet habe ich auch schon ein paar Stunden gestern gesucht aber immer nur das gleiche gefunden.
Vielen Dank
Volker |