【问题标题】:Create folders in Outlook via OLE automation (VFP or VB)通过 OLE 自动化(VFP 或 VB)在 Outlook 中创建文件夹
【发布时间】:2018-02-22 00:10:17
【问题描述】:

我想使用 OLE 自动化在收件箱、发送、垃圾箱文件夹旁边添加一些新文件夹。我的首选语言是 VFP,但 VB 也可能有用。

这是我在 Application 对象中挖掘到的程度。

    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

丹麦

【问题讨论】:

    标签: vb.net ole visual-foxpro


    【解决方案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)
    

    【讨论】:

    • 我能够按照您的指定将文件夹添加到两个级别。谢谢你。现在我只需要弄清楚如何将选定的电子邮件移动到这些文件夹中。但为此创建一个新问题可能会更好。感谢您的帮助。对于延迟回复,我深表歉意...
    【解决方案2】:

    在下面的代码中,我们添加了 2 个文件夹,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") 
    

    【讨论】:

    • 我非常感谢您的详细说明。我遇到的问题是这对只有一个电子邮件帐户的人有好处。我有 20 多个帐户。我需要根据需要将电子邮件移动到新文件夹中。如何导航到正确的帐户或电子邮件地址?
    • 我不知道如何更改帐户。
    猜你喜欢
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2014-12-22
    • 1970-01-01
    • 2022-12-31
    相关资源
    最近更新 更多