1

Тема: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

Доброе время суток!

Кто сможет подсказать как правильно создать папку в почтовом ящике Outlook посредством VBS?

Вот исходный код, но он создает подпапку "Старый" в папке "Входящие":


Dim olApp
Dim olNS
Dim olInbox
Dim CreateNewFolder

Set olApp=CreateObject("Outlook.Application")
Set olNS=olApp.GetNameSpace("MAPI")
Set olInbox=olNS.GetDefaultFolder(6)                          ' 6 - константа olFolderIbox
Set CreateNewFolder=olInbox.Folders.Add("Старый")

Мне нужно не подпапку, а папку наподобие "Входящие", "Отправленные" и.т.д.
Спасибо заранее.

2

Re: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

Это и есть подпапка, только на уровень выше. Пробуйте:

Option Explicit

' Enum OlDefaultFolders
'
' NB: The constants olFolderDeletedItems, olFolderOutbox, olFolderJunk, 
' olFolderConflicts, olFolderLocalFailures, olFolderServerFailures, 
' olFolderSyncIssues, and olFolderSentMail cannot be use in «….Add()» method.
'
Const olFolderDeletedItems            =  3
Const olFolderOutbox                  =  4
Const olFolderSentMail                =  5
Const olFolderInbox                   =  6
Const olFolderCalendar                =  9
Const olFolderContacts                = 10
Const olFolderJournal                 = 11
Const olFolderNotes                   = 12
Const olFolderTasks                   = 13
Const olFolderDrafts                  = 16
Const olPublicFoldersAllPublicFolders = 18
Const olFolderConflicts               = 19
Const olFolderSyncIssues              = 20
Const olFolderLocalFailures           = 21
Const olFolderServerFailures          = 22
Const olFolderJunk                    = 23

Dim objOutlook
Dim objNameSpace
Dim objMAPIFolder_Private
Dim objMAPIFolder_Old

Set objOutlook            = WScript.CreateObject("Outlook.Application")
Set objNameSpace          = objOutlook.GetNamespace("MAPI")
Set objMAPIFolder_Private = objNamespace.Folders.Item("Личные папки")
Set objMAPIFolder_Old     = objMAPIFolder_Private.Folders.Add("Старый") ' или конкретного типа: .Add("Старый", olFolderInbox)

WScript.Echo objMAPIFolder_Old.Name

objOutlook.Quit

Set objMAPIFolder_Old     = Nothing
Set objMAPIFolder_Private = Nothing
Set objNameSpace          = Nothing
Set objOutlook            = Nothing

WScript.Quit 0

Add Method

3 (изменено: Дмитрий, 2011-12-07 18:59:54)

Re: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

Спасибо alexii за предоставленный ответ, даже очень помогло, но возник один нюанс:

...
Set objMAPIFolder_Private = objNamespace.Folders.Item("Личные папки")
Set objMAPIFolder_Old     = objMAPIFolder_Private.Folders.Add("Старый").
...

У каждого пользователя не висит папка "Личные папки" - а "Почтовый ящик - Иванов" или "Почтовый ящик - Сидоров".
Как тогда реализовать создание папок "Старый" в корне почтового ящика различных пользователей?Я же не буду писать для каждого скрипт
Спасибо.

4

Re: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

Дмитрий, корневая папка — всегда одна, либо первая? Можете выложить пару скриншотов, где будет виден список папок у разных пользователей.

5

Re: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

alexii, даю скриншот:

http://img163.imageshack.us/img163/7670/image001yci.png

Если я напишу нижеизложенный код:

...
Set objMAPIFolder_Private = objNamespace.Folders.Item("Личные папки")
Set objMAPIFolder_Old     = objMAPIFolder_Private.Folders.Add("Старый").
...

, то папка "Старый" естественно не создаст, создает папка только в том случае если пропишешь:

Set objMAPIFolder_Private = objNamespace.Folders.Item("Почтовый ящик - Андреев Дмитрий")
Set objMAPIFolder_Old     = objMAPIFolder_Private.Folders.Add("Старый").
...

Как сделать, чтобы папка "Старый" создавалась в корне, независимо от имени почтового ящика "Почтовый ящик - ... ". Вот в чем загвоздка .

6

Re: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

В предположении, что потребная папка у нас будет первая (и единственная в корне), попробуйте использовать такой подход:

Set objMAPIFolder_Private = objNamespace.Folders.GetFirst()

вместо:

Set objMAPIFolder_Private = objNamespace.Folders.Item("Личные папки")

В целом (и немного поправил очистку):

Option Explicit

' Enum OlDefaultFolders
'
' NB: The constants olFolderDeletedItems, olFolderOutbox, olFolderJunk, 
' olFolderConflicts, olFolderLocalFailures, olFolderServerFailures, 
' olFolderSyncIssues, and olFolderSentMail cannot be use in «….Add()» method.
'
Const olFolderDeletedItems            =  3
Const olFolderOutbox                  =  4
Const olFolderSentMail                =  5
Const olFolderInbox                   =  6
Const olFolderCalendar                =  9
Const olFolderContacts                = 10
Const olFolderJournal                 = 11
Const olFolderNotes                   = 12
Const olFolderTasks                   = 13
Const olFolderDrafts                  = 16
Const olPublicFoldersAllPublicFolders = 18
Const olFolderConflicts               = 19
Const olFolderSyncIssues              = 20
Const olFolderLocalFailures           = 21
Const olFolderServerFailures          = 22
Const olFolderJunk                    = 23

Dim objOutlook
Dim objNameSpace
Dim objMAPIFolder_Private
Dim objMAPIFolder_Old

Set objOutlook            = WScript.CreateObject("Outlook.Application")
Set objNameSpace          = objOutlook.GetNamespace("MAPI")
Set objMAPIFolder_Private = objNamespace.Folders.GetFirst()
Set objMAPIFolder_Old     = objMAPIFolder_Private.Folders.Add("Старый") ' или конкретного типа: .Add("Старый", olFolderInbox)

WScript.Echo objMAPIFolder_Old.Name

Set objMAPIFolder_Old     = Nothing
Set objMAPIFolder_Private = Nothing
Set objNameSpace          = Nothing

objOutlook.Quit

Set objOutlook            = Nothing

WScript.Quit 0

7 (изменено: Дмитрий, 2011-12-08 11:48:29)

Re: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

Спасибо большое alexii, помогло!

Кроме  http://msdn.microsoft.com/en-us/library/default.aspx. Есть еще какие-то ссылки для того чтобы хорошо понять как работать VBS с Outlook ?

Спасибо.

8

Re: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

Обзорно — здесь: 13. Программирование в Outlook.

9

Re: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

alexii, спасибо большое за примеры и приведенные ссылки. Я как раз на этой неделе голову ломал, как мне разобраться с входящей почтой (более 7000 писем, которые нужно рассортировать и привести в нормальный вид для печати).

10

Re: MS Office/Outlook/VBS/VBA: Как создать папку в почтовом ящике Outlook?

Ой, а можете помочь тоже, хотя я пишу старое сообщение, но всё же, хоть-нибудь увидит и может даже поможет! Спасибо!

Ситуация такая, хочется по фио отправителя создать папку в аутлуке и туда отправлять все письма с этого адресата, то есть:

Пришло письмо от Иванова Ивана Ивановича с п\я ivanov@test.com, скрипт создал папку с названием Иванов Иван Иванович по п\я ivanov@test.com и в дальнейшем будет все письма от него складывать в эту папку, папка может быть в подпапке Входящие.