Прежде всего, я бы предложил начать с события NewMailEx
класса Application
, которое запускается при получении нового элемента в папке «Входящие». Это событие запускается один раз для каждого полученного элемента, обрабатываемого Microsoft Outlook. Элемент может относиться к одному из нескольких типов элементов, например, MailItem
, MeetingItem
или SharingItem
. Строка EntryIDsCollection
содержит идентификатор записи, соответствующий этому элементу. Событие NewMailEx
запускается, когда новое сообщение поступает в папку «Входящие» и до того, как выполняется обработка правила клиента. Вы можете использовать идентификатор записи, возвращенный в массиве EntryIDCollection
, для вызова метода NameSpace.GetItemFromID и обработки элемента.
Чтобы найти папку с именем отправителя, вы можете перебрать все вложенных папок рекурсивно:
Private Sub processFolder(ByVal oParent As Outlook.MAPIFolder)
Dim oFolder As Outlook.MAPIFolder
Dim oMail As Outlook.MailItem
For Each oMail In oParent.Items
'Get your data here ...
Next
If (oParent.Folders.Count > 0) Then
For Each oFolder In oParent.Folders
processFolder oFolder
Next
End If
End Sub
Наконец, я бы порекомендовал углубиться в VBA, начав с статьи Начало работы с VBA в Office .
Вы также можно использовать следующий код, если вам не нужно перебирать все папки:
Sub RulesForFolders(m As MailItem)
Dim fldr As Outlook.Folder
Dim new_fldr As Outlook.Folder
Dim ns as Outlook.Namespace
Dim inbox as Outlook.Folder
Set ns = Application.GetNamespace("MAPI")
Set inbox = ns.GetDefaultFolder(olFolderInbox)
For Each fldr In inbox.Folders
if InStr(fldr.Name,m.SenderName) > 0 Then
m.MoveTo(fldr)
Return
End If
Next
Set new_fldr = folders.add(m.SenderName)
m.MoveTo(new_fldr)
Set fldr = Nothing
Set new_fldr = Nothing
Set inbox = Nothing
Set ns = Nothing
End Sub