【问题标题】:How to select IMAP acc in vba Outlook如何在 vba Outlook 中选择 IMAP acc
【发布时间】:2019-06-05 03:06:49
【问题描述】:

我有一个问题,下面的宏检查是否有来自发件人的邮件标题。问题是在 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

【问题讨论】:

  • 我已将 cmets 添加到我的答案中并进行了更新。我不知道您是否被告知这些 cmets 或更新。我知道您会被告知此评论,因此这确保您知道再次查看我的答案。

标签: vba outlook exchange-server


【解决方案1】:

你的问题是:

Set sub_olFolder = objNS.GetDefaultFolder(olFolderInbox)

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

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

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

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

试试:

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

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

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

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

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

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

小心地像这样将属性串在一起。 (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

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

【讨论】:

  • @Lunar Wolf 通过添加自己的答案来回应答案。该答案已被删除,因为[s]他应该通过评论做出回应。对此答案的回应是:“Tony Dallimore 我尝试使用您的解决方案,但不起作用。:(”
  • @月狼。您没有说我的答案有什么问题,但经过研究,我意识到我从链中省略了收件箱。对不起。我已经更正了我的答案
【解决方案2】:

您的 Exchange 帐户似乎已设置为默认帐户,所以 当您获得 sub_olFolder 时,您正在使用与 Exchange 帐户关联的邮件存储的收件箱的子文件夹。

【讨论】:

  • @Lunar Wolf 通过添加他自己的答案来回应这些答案。该答案已被删除,因为[s]他应该通过评论做出回应。对此答案的回复是:“Victor Ivanidze 是的,Exchange 帐户是默认帐户,但我无法在 IMAP 的默认帐户设置中更改它,这是不可能的。”
  • 我的声誉超过 10K 意味着我可以看到已被版主删除的答案。您还没有这样的声誉,所以我从他/她的回答中复制了 Lunar Wolf 的评论,以便您查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
  • 1970-01-01
  • 2021-11-28
  • 2014-11-18
相关资源
最近更新 更多