2017-02-22 13 views
1

Мне нужен макрос, который бы подсчитал количество отправленных писем (все в одной отправляемой папке, без подпапок) и зарегистрировал результат в файле (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 
+1

Чтобы добавить в существующий файл, используйте 'OpenTextFile' с параметром' ForAppending' как описано [здесь] (https://msdn.microsoft.com/en-us/library/aa265347 (v = vs.60) .aspx). –

+0

Ожидаете ли вы, что электронные письма будут сидеть в папке «Исходящие» в ожидании доставки? Или вы хотите поймать электронные письма, которые доставляются по мере их отправки? –

+0

О, извините, я допустил ошибку - на самом деле я хочу зарегистрировать электронные письма, которые уже были отправлены, - не дожидаясь доставки или регистрации их на лету. Таким образом, в основном, чтобы отправлять отправленные электронные письма один раз в день и записывать элементы, соответствующие критериям, в файл ... – ondas

ответ

0

Почему вы не создаете надстройку VSTO? Я думаю, что это не надстройка VSTO, не так ли? Как я помню, вы можете получить доступ к гораздо большему количеству объектов таким образом. Если я ошибаюсь, исправьте меня.

https://msdn.microsoft.com/de-de/library/cc668191.aspx (немецкая версия).

https://msdn.microsoft.com/en-us/uk-uk/library/cc668191.aspx (английская версия).

+0

Будучи в корпоративной среде У меня нет доступа к Visual Studio (а также опыт). Я надеялся, что будет простой способ расширить код vba выше, чтобы включить адрес отправителя и домен получателя, и я просто пропустил его ...? – ondas

0

Чтобы получить доступ к данным для отправителя, просмотрите свойства MailItem.SenderName и .SenderEmailAddress (или .Sender для получения дополнительной информации). Для получателей вам необходимо получить доступ к объектам Получателя в коллекции MailItem.Recipients.

Смотрите эти статьи за полезные прохождений для всех, что:

https://msdn.microsoft.com/en-us/library/office/ff866259.aspx

https://msdn.microsoft.com/en-us/library/office/ff868695.aspx

Для получателей