【问题标题】:Get email from non default inbox?从非默认收件箱获取电子邮件?
【发布时间】:2014-10-09 09:09:12
【问题描述】:

我正在使用以下 vba 代码从我的收件箱文件夹中获取电子邮件并将它们移动到名为供应商的子文件夹中。目前,电子邮件已从我的默认电子邮件收件箱中移出,但我有一个名为 purcashing@hewden.co.uk 的帐户,我希望它从此收件箱中获取电子邮件并将其移动到此帐户中名为 Suppliers 的子文件夹中。

谁能告诉我如何改变 GetDefaultFolder 来实现这一点。谢谢

Sub MoveItems()
 Dim myNameSpace As Outlook.NameSpace
 Dim myInbox As Outlook.Folder
 Dim myDestFolder As Outlook.Folder
 Dim myItems As Outlook.Items
 Dim myItem As Object


 Set myNameSpace = Application.GetNamespace("MAPI")
 Set myInbox = myNameSpace.GetDefaultFolder(olFolderInbox)
 Set myItems = myInbox.Items
 Set myDestFolder = myInbox.Folders("Supplier")
 Set myItem = myItems.Find("[Subject] = 'Introduction'")
 While TypeName(myItem) <> "Nothing"
 myItem.Move myDestFolder
 Set myItem = myItems.FindNext
 Wend
End Sub

【问题讨论】:

    标签: vba outlook


    【解决方案1】:

    不使用 Namespace.GetDefaultFolder,而是从 Namespace.Stores 集合中检索适当的存储并使用 Store.GetDefaultFolder。

    【讨论】:

    • 不是 GetDefaultFolder,而是 GetRootFolder。 Store 没有 GetDefaultFolder 方法。
    • Store.GetDefaultFolder 已添加到 Outlook 2010。Store.GetRootFolder 然后按名称打开文件夹在本地化环境中不起作用。
    • OP 没有提到 Office 版本,所以 GetRootFolder 可以在 2007 和 2010+ 中使用。
    • 请记住,Microsoft 不再支持 Outlook 2007 - support.microsoft.com/en-us/lifecycle/search/…
    【解决方案2】:

    我刚刚使用了 Dmitry 的建议,它就像一个魅力。

    希望对你有帮助\o/

    Sub GetEmailFromNonDefaultInbox()
        Dim myOlApp As New Outlook.Application
        Dim myNameSpace As Outlook.Namespace
        Dim myInbox As Outlook.MAPIFolder
        Dim myitems As Outlook.Items
        Dim strFilter As String
    
        ' let the user choose which account to use
        Set myAccounts = myOlApp.GetNamespace("MAPI").Stores
        For i = 1 To myAccounts.count
            res = MsgBox(myAccounts.Item(i).DisplayName & "?", vbYesNo)
            If res = vbYes Then
                Set myInbox = myAccounts.Item(i).GetDefaultFolder(olFolderInbox)
                Exit For
            End If
        Next
        If myInbox Is Nothing Then Exit Sub ' avoid error if no account is chosen
    
        ' query emails by subject
        strFilter = "@SQL=""urn:schemas:httpmail:subject"" like '%YOUR SUBJECT%'"
        Set myitems = myInbox.Items.Restrict(strFilter)
    
        ' show some feedback if no email is found
        If myitems.count = 0 Then 
            MsgBox "Nothing found. Try another account."
            Exit Sub
        End If
    
        ' get the most recent email
        myitems.Sort "ReceivedTime", True
        Set myitem = myitems.GetFirst
        If myitem.Class = olMail Then
            ' and now you can do whatever you want
            MsgBox (myitem.Subject)
        End If
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2015-10-02
      • 2015-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 2017-05-15
      • 1970-01-01
      相关资源
      最近更新 更多