vba - 如何在 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
解决方案
你的问题是:
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
口译员应回复子文件夹中旧电子邮件的日期和时间。如果可行,我的回答应该可行。如果以上任何一项都不起作用,请详细说明失败的原因
推荐阅读
- python - 如何在 Apache nifi 中获取视频流数据?
- python - 有没有办法将条目添加到 json 列表中的字典中?
- listview - Listview中的奇怪字符
- html - 如何在移动视图中将 2 个引导轮播并排放置?
- python-3.x - 无法使用 AWS SNS 向印度 (+91) 发送短信
- python - 用户输入在 pandas DataFrame 中不起作用
- java - 我如何才能读取每个空单元格周围有多少地雷。游戏扫雷
- c# - 如何在 ASP.NET 中显示警报消息并重定向到主页
- python - SQLite 如何根据自定义规则对数据进行分组
- spring-boot - 非空引用空值或瞬态值