通过 OLE 自动化在 Outlook 中创建文件夹(VFP 或 VB)
Create folders in Outlook via OLE automation (VFP or VB)
我想使用 OLE Automation 在 InBox、Send、Trash 文件夹旁边添加一些新文件夹。我的首选语言是 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层完成。
lo子文件夹。
任何好主意都会很棒...
TIA
丹麦
应该和使用Folders.Add方法一样简单,这里是Excel VBA link 但该方法在OLE中也应该可用:
https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/folders-add-method-outlook
因此,在您的情况下,您会找到要向其添加新文件夹的文件夹(或 sub-folder,它仍然是一个文件夹),并按照以下方式调用:
loSubFolder.Folders.Add("new folder name")
如果您没有在 Add 方法中指定第二个参数,它将创建一个文件夹,其中包含与其父级相同类型的项目,在本例中为 loSubFolder 中的项目类型。
您还可以指定第二个参数,它是几个明确指定的 OlDefaultFolders 常量之一,例如:
loSubFolder.Folders.Add("new folder name", olFolderInbox)
在下面的代码中,我们添加了 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")
我想使用 OLE Automation 在 InBox、Send、Trash 文件夹旁边添加一些新文件夹。我的首选语言是 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层完成。
lo子文件夹。
任何好主意都会很棒...
TIA
丹麦
应该和使用Folders.Add方法一样简单,这里是Excel VBA link 但该方法在OLE中也应该可用:
https://msdn.microsoft.com/en-us/vba/outlook-vba/articles/folders-add-method-outlook
因此,在您的情况下,您会找到要向其添加新文件夹的文件夹(或 sub-folder,它仍然是一个文件夹),并按照以下方式调用:
loSubFolder.Folders.Add("new folder name")
如果您没有在 Add 方法中指定第二个参数,它将创建一个文件夹,其中包含与其父级相同类型的项目,在本例中为 loSubFolder 中的项目类型。
您还可以指定第二个参数,它是几个明确指定的 OlDefaultFolders 常量之一,例如:
loSubFolder.Folders.Add("new folder name", olFolderInbox)
在下面的代码中,我们添加了 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")