【问题标题】:Listen specific Outlook account with vb用 vb 收听特定的 Outlook 帐户
【发布时间】:2018-06-22 01:08:48
【问题描述】:

我想在这里请求您的帮助。我正在尝试编写一个脚本(Outlook 加载项 VSTO)来收听来自特定 Outlook 帐户的所有传入电子邮件。在我的 Outlook 应用程序中,我设置了一些帐户(Exchange 帐户),但我只对其中一个感兴趣。我有以下代码从当前默认帐户监听收件箱文件夹。

Private Sub ThisAddIn_Startup() Handles Me.Startup

   Dim outlookNameSpace As Outlook.NameSpace
   outlookNameSpace = Me.Application.GetNamespace("MAPI")
   inbox = OutlookNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
   Mailitem = inbox.Items
End Sub

Private Sub Items_ItemAdd(ByVal item As Object) Handles Mailitem.ItemAdd
   If TypeOf (item) Is Outlook.MailItem Then
       --Do some things here--
   End if

End Sub

代码运行完美,但它正在侦听默认帐户。我想将其更改为收听在 Outlook 中设置的另一个帐户。

你有什么想法吗?

非常感谢!!

【问题讨论】:

    标签: outlook-addin


    【解决方案1】:

    不要使用Namespace.GetDefaultFolder,而是在Namespace.Stores 集合中找到您想要的商店,然后使用Store.GetDefaultFolder 从该商店中检索收件箱文件夹

    【讨论】:

    • 感谢德米特里!不幸的是,我不明白如何使用 Store.GetDefaultFolder。你介意给我举个例子吗?
    • 我在 lucas@hotmail.com 中的默认帐户,但我感兴趣的是 lucas2@hotmal.com。这两个帐户都在 Outlook 中设置。我需要收听来自 lucas2@hotmail.com 的所有传入电子邮件
    • 我不确定我是否理解 - 调用 Store.GetDefaultFolder 就像您现在使用 Namespace 对象一样。您在寻找正确的 Store 对象时遇到问题吗?
    • 我明白了。我按照您的建议使用了“getNameSpace.Stores()。现在我有一个问题:使用这种方法我只能收听一个帐户。有没有办法处理来自 Outlook 中所有帐户的所有传入电子邮件?
    • 尝试拥有一个 Items 对象数组
    【解决方案2】:

    这可能会有所帮助!!! 在 Outlook 会话中复制此代码。 outlook session image

    Private Sub Application_Startup()
      Dim objNS As NameSpace
      Set objNS = Application.Session
    
      Set olInboxItems = GetFolderPath("your other email address name\Inbox").Items
      Set objNS = Nothing
    
      Set objInbox = Application.Session.GetDefaultFolder(olFolderInbox)
      Set objItems = objInbox.Items
    
      End Sub
    
      Private Sub olInboxItems_ItemAdd(ByVal Item As Object)
      On Error Resume Next
      'your code what you want to do  with additional email address
      End Sub
    
      Private Sub objItems_ItemAdd(ByVal Item As Object)
      'your code for your default email address
      End Sub
    
      Function GetFolderPath(ByVal FolderPath As String) As Outlook.Folder
        Dim oFolder As Outlook.Folder
        Dim FoldersArray As Variant
        Dim i As Integer
    
        On Error GoTo GetFolderPath_Error
        If Left(FolderPath, 2) = "\\" Then
            FolderPath = Right(FolderPath, Len(FolderPath) - 2)
        End If
        'Convert folderpath to array
        FoldersArray = Split(FolderPath, "\")
        Set oFolder = Application.Session.Folders.Item(FoldersArray(0))
        If Not oFolder Is Nothing Then
            For i = 1 To UBound(FoldersArray, 1)
                Dim SubFolders As Outlook.Folders
                Set SubFolders = oFolder.Folders
                Set oFolder = SubFolders.Item(FoldersArray(i))
                If oFolder Is Nothing Then
                    Set GetFolderPath = Nothing
                End If
            Next
        End If
        'Return the oFolder
        Set GetFolderPath = oFolder
        Exit Function
    
        GetFolderPath_Error:
        Set GetFolderPath = Nothing
        Exit Function
    End Function
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-15
      • 2015-02-23
      相关资源
      最近更新 更多