Alle E-Mails aus einem Ordner per VBA auslesen

03/03/2008 - 16:08 von Patrick Pohlmann | Report spam
Hallo Zusammen,

ich möchte einen öffentlichen Ordner regelmàßig per VBA nach neuen Inhalten
(E-Mails) durchsuchen, diese dann in Access verarbeiten und dann diese
Elemente in einen neuen Ordner verschieben.

Dazu habe ich mir folgendes ausgedacht. Allerdings werden so - wieso auch
immer - keine Eintràge im gewàhlten Ordner gefunden. Ggf. liegt es am
gewàhlten Item (MailItem)? Die Mails in dem Öffentlichen Ordner werden als
"Diskussion" angezeigt. Ich habe aber - glaube ich - schon alle alternativen
Item Typen ausprobiert. Wie könnte ich denn alle auslesen? Vielleicht sieht
jemand was ich falsch gemacht habe:

Function GetMails(FolderPath)

'gewàhlten Folder auslesen

Dim aFolders
Dim i
Dim objNS As Outlook.NameSpace
Dim objOutlApp As Outlook.Application
Dim objPubFolder As Outlook.MAPIFolder
Dim objParentFolder As Outlook.MAPIFolder
Dim objTargetFolder As Outlook.MAPIFolder
Dim obj As Outlook.MailItem '(die Mails in diesem Öffentlichen Ordner
erscheinen als Diskussion da sie aus einer Verteilergruppe kommen. Brauche
ich hier einen anderen Itelm Typ?)
Dim myExplorer As Outlook.Explorer

Dim intAntwort As String

Set objOutlApp = CreateObject("Outlook.Application")
Set objNS = objOutlApp.GetNamespace("MAPI")

On Error Resume Next
strFolderPath = Replace(FolderPath, "/", "\")
aFolders = Split(FolderPath, "\")

'get the Outlook objects
' use intrinsic Application object in form script
'Set objNS = Application.GetNamespace("MAPI")

'set the root folder
Set objPubFolder = objNS.Folders(aFolders(0))

On Error Resume Next

'loop through the array to get the subfolder
'loop is skipped when there is only one element in the array
For i = 1 To UBound(aFolders)

Set objParentFolder = objPubFolder

Set objPubFolder = objPubFolder.Folders(aFolders(i))

If objPubFolder Is Nothing Or Err.Number <> 0 Then

MsgBox "Der Ordner " & aFolders(i) & " existiert nicht.", vbOKOnly, "Ordner
nicht vorhanden"

Exit Function

End If

Next

'Folder nach Inhalt durchsuchen

Dim strEntryID As String, strStoreID As String, strBetreff As String,
strBody As String, strEMail As String
Dim strEmpfangsdatum As String, strKMitarbeiterID
Dim strTicketNr As String

strSoreID = objPubFolder.StoreID

For Each obj In objPubFolder.Items

With obj

strEntryID = .EntryID
strEMail = .SenderEmailAddress
strBetreff = .Subject
strBody = .Body
strEmpfangsdatum = .ReceivedTime

.Move (TargetPath)

End with


Vielen Dank für Eure Hilfe.

Grüße

Patrick!
 

Lesen sie die antworten

#1 Thomas Quester
02/03/2008 - 18:37 | Warnen spam
Der Code sieht gut aus, statt MailItem PostItem oder so, sollte man einfach
Object nehmen, dann über MessageClass nachprüfen, was man eigentlich in der
Hand hat, falls Felder ausgelesen werden sollen, die nicht für alle Objekte
verfügbar sind -- die Standardfelder einer E-Mail sind in allen Objekten
verfügbar.

Wenn man das falsche Objekt nimmt, gibt es einen Laufzeitfehler, bzw. bei
OnErrorResumeNext sieht man diesen nicht.

Thomas Quester - www.olfolders.de




"Patrick Pohlmann" schrieb im Newsbeitrag
news:
Hallo Zusammen,

ich möchte einen öffentlichen Ordner regelmàßig per VBA nach neuen
Inhalten (E-Mails) durchsuchen, diese dann in Access verarbeiten und dann
diese Elemente in einen neuen Ordner verschieben.

Dazu habe ich mir folgendes ausgedacht. Allerdings werden so - wieso auch
immer - keine Eintràge im gewàhlten Ordner gefunden. Ggf. liegt es am
gewàhlten Item (MailItem)? Die Mails in dem Öffentlichen Ordner werden als
"Diskussion" angezeigt. Ich habe aber - glaube ich - schon alle
alternativen Item Typen ausprobiert. Wie könnte ich denn alle auslesen?
Vielleicht sieht jemand was ich falsch gemacht habe:

Function GetMails(FolderPath)

'gewàhlten Folder auslesen

Dim aFolders
Dim i
Dim objNS As Outlook.NameSpace
Dim objOutlApp As Outlook.Application
Dim objPubFolder As Outlook.MAPIFolder
Dim objParentFolder As Outlook.MAPIFolder
Dim objTargetFolder As Outlook.MAPIFolder
Dim obj As Outlook.MailItem '(die Mails in diesem Öffentlichen Ordner
erscheinen als Diskussion da sie aus einer Verteilergruppe kommen. Brauche
ich hier einen anderen Itelm Typ?)
Dim myExplorer As Outlook.Explorer

Dim intAntwort As String

Set objOutlApp = CreateObject("Outlook.Application")
Set objNS = objOutlApp.GetNamespace("MAPI")

On Error Resume Next
strFolderPath = Replace(FolderPath, "/", "\")
aFolders = Split(FolderPath, "\")

'get the Outlook objects
' use intrinsic Application object in form script
'Set objNS = Application.GetNamespace("MAPI")

'set the root folder
Set objPubFolder = objNS.Folders(aFolders(0))

On Error Resume Next

'loop through the array to get the subfolder
'loop is skipped when there is only one element in the array
For i = 1 To UBound(aFolders)

Set objParentFolder = objPubFolder

Set objPubFolder = objPubFolder.Folders(aFolders(i))

If objPubFolder Is Nothing Or Err.Number <> 0 Then

MsgBox "Der Ordner " & aFolders(i) & " existiert nicht.", vbOKOnly,
"Ordner nicht vorhanden"

Exit Function

End If

Next

'Folder nach Inhalt durchsuchen

Dim strEntryID As String, strStoreID As String, strBetreff As String,
strBody As String, strEMail As String
Dim strEmpfangsdatum As String, strKMitarbeiterID
Dim strTicketNr As String

strSoreID = objPubFolder.StoreID

For Each obj In objPubFolder.Items

With obj

strEntryID = .EntryID
strEMail = .SenderEmailAddress
strBetreff = .Subject
strBody = .Body
strEmpfangsdatum = .ReceivedTime

.Move (TargetPath)

End with


Vielen Dank für Eure Hilfe.

Grüße

Patrick!

Ähnliche fragen