我写了一个脚本来获取我自己的发送邮件列表。
它适用于2021/07或更旧的月份,但无法接收2021/08的任何电子邮件。
我想这是由于一些缓存原因造成的(可能有些邮件还不存在于本地文件夹中)。
Sub get_Sent_mail()
On Error Resume Next
Dim olApp As Outlook.Application
Dim nmsName As NameSpace
Dim mail As mailitem
Dim text1 As String
sent_month = "2021/8"
Set olApp = Outlook.Application
Set nmsName = olApp.GetNamespace("MAPI")
For Each mail In nmsName.Folders("abc@efd.com").Folders("inbox").Folders("Sent Emails").Items
If InStr(mail.ReceivedTime, sent_month) <> 0 Then
Debug.Print mail.subject
End If
Next
End Sub
您依靠本地设置将日期时间值mail.ReceivedTime
转换为字符串。该字符串可能包含月份名称而不是数字,或者包含不带前导0的数字。或者年/月顺序可以不同(m/y vs y/m)
您需要显式检索月份和年份,并将它们作为整数处理
If (Month(mail.ReceivedTime) = 8) AND (Year(mail.ReceivedTime) = 2021) Then
Debug.Print mail.subject
End If
更糟糕的是,你的代码效率极低——就像编写一个没有WHERE子句的SQL查询。你真的需要使用Items.Restrict
:
set items = nmsName.Folders("abc@efd.com").Folders("inbox").Folders("Sent Emails").Items
set restrictedItems = items.Restrict("[ReceivedTime] >= '2021/08/01' AND [ReceivedTime] < '2021/09/01'")
for each mail in restrictedItems
Debug.Print mail.subject
next