Мне нужен макрос, который бы подсчитал количество отправленных писем (все в одной отправляемой папке, без подпапок) и зарегистрировал результат в файле (csv или txt). В выходном файле должен указываться количество электронных писем на дату, адрес/имя отправителя и домен получателя (@ company.com).Подсчет объектов outbox Outlook и запись в файл
Мне удалось заставить этот код работать частично, но он отображает только дату и количество писем в выходном файле.
Также - есть способ добавить новые данные в файл, а не переписать его?
Message Box в Outlook действительно факультативный, выходной файл является важной частью.
Sub HowManyEmails()
Dim objOutlook As Object, objnSpace As Object, objFolder As MAPIFolder
Dim EmailCount As Integer
Set objOutlook = CreateObject("Outlook.Application")
Set objnSpace = objOutlook.GetNamespace("MAPI")
On Error Resume Next
Set objFolder = objnSpace.Folders("[email protected]").Folders("Outbox")
If Err.Number <> 0 Then
Err.Clear
MsgBox "No such folder."
Exit Sub
End If
EmailCount = objFolder.Items.Count
MsgBox "Number of emails in the folder: " & EmailCount, , "email count"
Dim dateStr As String
Dim myItems As Outlook.Items
Dim dict As Object
Dim msg As String
Set dict = CreateObject("Scripting.Dictionary")
Set myItems = objFolder.Items
myItems.SetColumns ("ReceivedTime")
' Determine date of each message:
For Each myItem In myItems
dateStr = GetDate(myItem.ReceivedTime)
If Not dict.Exists(dateStr) Then
dict(dateStr) = 0
End If
dict(dateStr) = CLng(dict(dateStr)) + 1
Next myItem
' Output counts per day:
msg = ""
For Each o In dict.Keys
msg = msg & o & ": " & dict(o) & " items" & vbCrLf
Next
Dim fso As Object
Dim fo As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Set fo = fso.CreateTextFile("C:\Users\xxx\Documents\outlook_test_log.txt")
fo.Write msg
fo.Close
Set fo = Nothing
Set fso = Nothing
Set objFolder = Nothing
Set objnSpace = Nothing
Set objOutlook = Nothing
End Sub
Function GetDate(dt As Date) As String
GetDate = Year(dt) & "-" & Month(dt) & "-" & Day(dt)
End Function
Чтобы добавить в существующий файл, используйте 'OpenTextFile' с параметром' ForAppending' как описано [здесь] (https://msdn.microsoft.com/en-us/library/aa265347 (v = vs.60) .aspx). –
Ожидаете ли вы, что электронные письма будут сидеть в папке «Исходящие» в ожидании доставки? Или вы хотите поймать электронные письма, которые доставляются по мере их отправки? –
О, извините, я допустил ошибку - на самом деле я хочу зарегистрировать электронные письма, которые уже были отправлены, - не дожидаясь доставки или регистрации их на лету. Таким образом, в основном, чтобы отправлять отправленные электронные письма один раз в день и записывать элементы, соответствующие критериям, в файл ... – ondas