首页 > 解决方案 > 如何在 vba Outlook 中选择 IMAP acc

问题描述

我有一个问题,下面的宏检查是否有来自发件人的邮件标题。问题是在 Outlook 中,我有 2 个帐户:IMAP 和 Exchange。万客隆总是选择交换。原因在哪里?

 Sub srchmail()

Dim Itms As Items
Dim srchSender As String
Dim srchSubject As String
Dim strFilterBuild As String
Dim ItmsBuild As Items
Dim strFilter As String

Set olApp = Outlook.Application
Set objNS = olApp.GetNamespace("MAPI")


Set sub_olFolder = objNS.GetDefaultFolder(olFolderInbox)
Set sub_olFolder = sub_olFolder.Folders("SUBFOLDER")
Set Itms = sub_olFolder.Items

Dim i As Long
For i = 1 To Itms.Count
Next


srchSender = "SENDERMAIL"
srchSubject = "SUBJECTMAIL"


strFilter = "[SenderName] = '" & srchSender & "' And [Subject] = '" & srchSubject & "' And [SentOn] > '" & Format(Date, "dd-mm-yyyy") & "'"


Set Itms = Itms.Restrict(strFilter)
If Itms.Count = 0 Then


    MsgBox "dont mail in " & sub_olFolder & " with sub:'" & srchSubject & "' on " & Format(Date, "dd-mm-yyyy")
    Else


    MsgBox "found mail in " & sub_olFolder & " with sub: '" & srchSubject & "' on  " & Format(Date, "dd-mm-yyyy")
End If
ExitRoutine:
    Set Itms = Nothing
End Sub

标签: vbaoutlookexchange-server

解决方案


你的问题是:

Set sub_olFolder = objNS.GetDefaultFolder(olFolderInbox)

您只能拥有一个默认收件箱。您的默认收件箱显然位于 Exchange 帐户中。您将需要明确命名 IMAP 存储以访问其收件箱。

当您查看文件夹窗格时,您将看到如下内容:

Xxxxxxxxxxx
    Drafts
    Deleted Items
    Inbox
            :    :
Yyyyyyyyy
    Drafts
    Deleted Items
    Inbox
       SUBFOLDER
            :    :

Xxxxxxxxxxxxx 和 Yyyyyyyyy 是商店的名称。存储是 Outlook 保存所有电子邮件、日历项目、任务等的文件。据我了解,每个帐户必须有一个商店。您还可以拥有任意数量的额外商店。我有以我的两个帐户命名的商店,“存档”、“测试”等等。

尝试:

Set sub_olFolder = objNS.Folders("Yyyyyyyyy").Folders("Inbox")

其中“Yyyyyyyyy”是包含您要访问的子文件夹的商店的名称(显示在文件夹窗格中)。

我也许应该补充一点,我会写:

Set Itms = Session.Folders("Yyyyyyyyy").Folders("Inbox").Folders("SUBFOLDER").Items

“Session”和“NameSpace”应该是相同的。我使用 Session 是因为它避免了创建命名空间的需要,并且因为很久以前我遇到了无法诊断的 NameSpace 故障。

除非您需要以其他方式访问商店或收件箱或 SUBFOLDER,否则您不需要它们的变量。从最终父级(会话)开始,您可以将孩子、孙子等的名字串起来任意深度。

小心像这样将属性串在一起。(1) 使字符串正确可能需要一些时间。(2) 我见过一些属性字符串的例子,其中很难确定它被访问的是什么。如果你在 12 个月后回到这个宏,你会记得这个字符串是什么意思吗?如果其他人必须维护您的宏,他们会理解您所做的事情吗?如果有疑问,请保持简单。

由于原始答案中的错误而添加

我无法测试我的答案。尝试以下方法来测试我的建议。

将下面的“Yyyyyyyyy”替换为您的 IMAP 商店的名称,然后在您的即时窗口中键入它。

? Session.Folders("Yyyyyyyyy").Name

解释器应以 IMAP 存储的名称进行响应。如果可行,请尝试:

? Session.Folders("Yyyyyyyyy").Folders("Inbox").Name

口译员应回复收件箱。如果可行,请尝试:

? Session.Folders("Yyyyyyyyy").Folders("Inbox").Folders("SUBFOLDER").Name

解释器应该响应 SUBFOLDER。如果可行,请尝试:

? Session.Folders("Yyyyyyyyy").Folders("Inbox").Folders("SUBFOLDER").Items(1).ReceivedTime

口译员应回复子文件夹中旧电子邮件的日期和时间。如果可行,我的回答应该可行。如果以上任何一项都不起作用,请详细说明失败的原因


推荐阅读