通过OLE自动化(VFP或VB)在Outlook中创建文件夹

时间:2018-02-22 00:10:17

标签: vb.net ole visual-foxpro

我想使用OLE自动化在InBox,Send,Trash文件夹旁边添加一些新文件夹。我的首选语言是VFP,但VB也可能有用。

这是我在应用程序对象中挖了多远才能发现它。

    loApp = CREATEOBJECT("outlook.application")
loSpace = loApp.GetNameSpace("MAPI")
UU = ""
FOR EACH loFolder IN loSpace.Folders
    IF  NOT LOWER(loFolder.Name)$"outlook data file  archives   wek@santaclaus.com "
        *? "______________________________"
        *? loFolder.Name
        *? CHR(9)+"-----"
        IF LOWER(loFolder.NAME) = LOWER("davidcosmos@metaworld.com")
            ? loFolder.NAME         && This is where the Accounts 
            FOR EACH loSubFolder IN loFolder.Folders
                ? CHR(9)+loSubFolder.Name+"-----"
                SET STEP ON
                IF loSubFolder.Name = "Inbox"
                    FOR EACH Email IN loSubFolder.Items
                        * Here the Email object represents each Email
                    ENDFOR 
                ELSE 
                ENDIF
           ENDFOR
        ELSE    
        ENDIF 
    ELSE 
    ENDIF    
ENDFOR
  • 我认为文件夹的创建应该在loSubFolder层完成。

loSubFolder。

任何好主意都会很棒......

TIA

DK

2 个答案:

答案 0 :(得分:1)

它应该像使用Folders.Add方法一样简单,这里是Excel VBA链接,但该方法也应该在OLE中可用:

https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/folders-add-method-outlook

因此,在您的情况下,您会找到要添加新文件夹的文件夹(或子文件夹,仍然是文件夹),并按以下方式调用:

loSubFolder.Folders.Add("new folder name")

如果您没有在Add方法中指定第二个参数,它将创建一个文件夹,其中包含与其父项相同类型的项目,在本例中为loSubFolder中的项目类型。

您还可以指定第二个参数,该参数是几个明确指定的OlDefaultFolders常量之一,例如:

loSubFolder.Folders.Add("new folder name", olFolderInbox)

答案 1 :(得分:1)

在下面的代码中,我们添加了2个文件夹,1个默认收件箱,1个与收件箱本身处于同一级别。另请注意,您可能有多个商店,因此有多个收件箱,我们正在使用默认收件箱所在的商店。

#Define olFolderInbox   6

Local oOutlook As 'Outlook.Application', ;
    oNameSpace As 'Outlook.NameSpace', ;
    oMailFolder As 'Outlook.MAPIFolder', ;
    oTopFolder As 'Outlook.MAPIFolder'

Local lcFolderName1, lcFolderName2
lcFolderName1 = "My Dummy Folder - inbox"
lcFolderName2 = "My Dummy Folder"

m.oOutlook = createobject("Outlook.Application")
m.oNameSpace = m.oOutlook.GetNamespace("MAPI")

m.oMailFolder = m.oNameSpace.GetDefaultFolder( olFolderInbox )
m.oTopFolder = m.oMailFolder.Parent

If Type("m.oMailFolder.Folders(m.lcFolderName1).Name") != 'C'
    m.oMailFolder.Folders.Add(m.lcFolderName1, olFolderInbox)
Endif
If Type("m.oTopFolder.Folders(m.lcFolderName2).Name") != 'C'
    m.oTopFolder.Folders.Add(m.lcFolderName2, olFolderInbox)
Endif
MessageBox('Done')

注意:为此,Outlook不应该已经运行。你可能希望用try..catch ... endtry包装。我不建议使用GetObject来克服这个问题,我真的怀疑它无论如何都会起作用(我从不建议将GetObject与任何COM一起使用)。

注意2:如果你需要一个默认收件箱以外的文件夹,那么你就可以得到它:

m.MyFolder = m.oNameSpace.Folders("My Desired Folder")