Outlook程序将附件移动到SubFolder

时间:2012-10-04 21:11:08

标签: vb.net visual-studio-2010 outlook-2007

我已经在VS2010中编写了这个小程序,可以在Outlook 2007上运行。

它适用于收件箱的标准读取,但我不能正确指向其他文件夹,我得到“用户代码未处理的COMException”错误,说“操作失败。一个对象不能被发现。” ......

如果有帮助,我已经包含了Outlook结构的屏幕截图...

Imports Microsoft.Office.Interop

Public Class ThisAddIn
Private Sub ThisAddIn_Startup() Handles Me.Startup
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
End Sub
Private Sub Application_Startup() Handles Application.Startup

    Dim MyApp As Outlook.Application = New Outlook.Application
    Dim MyNS As Outlook.NameSpace = MyApp.GetNamespace("MAPI")
    Dim MyInbox As Outlook.MAPIFolder = MyNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
    Dim MyEmails As Integer = MyInbox.Items.Count
    Dim MyEMail As Outlook.MailItem
    Dim MyCount As Integer
    Dim MySubFolder As Outlook.MAPIFolder = MyNS.Folders("Kickabout") **<<< Error occurs here**

    For MyCount = MyEmails To 1 Step -1
        MyEMail = MyInbox.Items(MyCount)
        If MyEMail.SenderEmailAddress = "MrX@abc.com" Then
            If MyEMail.Attachments.Count > 0 Then
                MySubFolder = MyNS.Folders("Kickabout\Attachments")
            End If
            MyEMail.Move(MySubFolder)
        End If
    Next
End Sub

End Class

My Outlook Structure

1 个答案:

答案 0 :(得分:0)

好的,我自己已经解决了这个问题......如果有人对未来感兴趣,你必须明确地设定路径&amp;需要一个函数来执行此操作,这是代码...

Imports Microsoft.Office.Interop

Public Class ThisAddIn

Dim strFolderPath As String

Private Sub ThisAddIn_Startup() Handles Me.Startup
End Sub
Private Sub ThisAddIn_Shutdown() Handles Me.Shutdown
End Sub
Private Sub Application_Startup() Handles Application.Startup

    Dim MyApp As Outlook.Application = New Outlook.Application
    Dim MyNS As Outlook.NameSpace = MyApp.GetNamespace("MAPI")
    Dim MyInbox As Outlook.MAPIFolder = MyNS.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
    Dim MyEmails As Integer = MyInbox.Items.Count
    Dim MyEMail As Outlook.MailItem
    Dim MyCount As Integer
    Dim MySubFolder As Outlook.Folder = GetMyFolder("Outlook (Gary)\Kickabout")
    Stop
    For MyCount = MyEmails To 1 Step -1
        MyEMail = MyInbox.Items(MyCount)
        If MyEMail.SenderEmailAddress = "MrX@abc.com" Then
            If MyEMail.Attachments.Count &gt; 0 Then
                MySubFolder = GetMyFolder("Outlook (Gary)\Kickabout\Attachments")
            End If
            MyEMail.Move(MySubFolder)
        End If
    Next
End Sub

Function GetMyFolder(FolderPath)
    ' folder path needs to be something like 
    '   "Public Folders\All Public Folders\Company\Sales"
    Dim aFolders
    Dim fldr
    Dim i
    Dim objNS

    On Error Resume Next
    strFolderPath = Replace(FolderPath, "/", "\")
    aFolders = Split(FolderPath, "\")

    'get the Outlook objects
    ' use intrinsic Application object in form script
    objNS = Application.GetNamespace("MAPI")

    'set the root folder
    fldr = objNS.Folders(aFolders(0))

    'loop through the array to get the subfolder
    'loop is skipped when there is only one element in the array
    For i = 1 To UBound(aFolders)
        fldr = fldr.Folders(aFolders(i))
        'check for errors
        'If Err() &lt;&gt; 0 Then Exit Function
    Next
    GetMyFolder = fldr

    ' dereference objects
    objNS = Nothing
End Function
End Class