2017-02-17 7 views
0

Мне нужно извлечь все электронные письма со стандартными полями прогноза (от/до/тема/дата, включая категорию и, самое главное, диалоговое окно) в Excel/csv. Я использую MS Office 2016, не знаю о версии сервера Exchange.Массовые письма с перспективой экспорта с обращениемID

Я попробовал несколько способов, чтобы сделать это на мой почтовый ящик: 1) экспортированных данных через стандартный интерфейс внешнего вида 2) данные, экспортированные в доступе MS через стандартный мастер экспорта 3) Извлеченные данные в MS PowerBI из MS Exchange непосредственно

Во всех 3 случаях я не смог ConversationID (PowerBI экстракт имел некоторый идентификатор, но это не было ConversationID)

Теперь я понимаю, что она должна быть извлечена через MAPI-то, но я совершенно неграмотный на этом тема. Некоторые поиски рекомендуется использовать специальное программное обеспечение для этого, как Transcend, но это, очевидно, слишком дорого для одного пользователя :)

Я также нашел VBA код, чтобы получить данные в Excel напрямую, но он не работает для меня: http://www.tek-tips.com/viewthread.cfm?qid=1739523 также нашел это приятное объяснение, что такое Диалог - может быть полезен другим заинтересованным в теме: https://www.meridiandiscovery.com/how-to/e-mail-conversation-index-metadata-computer-forensics/

+0

Что именно не работает в вашем существующем коде? –

+0

получение ошибки 'Определяемый пользователем тип не определен' при выполнении в этой части' Public ns As Outlook.Namespace' @DmitryStreblechenko –

+0

Это просто означает, что вы не добавляли Outlook в ссылки на проект. –

ответ

0

Вот пример кода, чтобы вы начали, у меня уже было что-то похожее на ваш вопрос. Код прокомментирован, но не стесняйтесь задавать вопросы :)

Option Explicit 

Public Sub getEmails() 
On Error GoTo errhand: 

    'Create outlook objects and select a folder 
    Dim outlook  As Object: Set outlook = CreateObject("Outlook.Application") 
    Dim ns   As Object: Set ns = outlook.GetNameSpace("MAPI") 

    'This option open a new window for you to select which folder you want to work with 
    Dim olFolder As Object: Set olFolder = ns.pickFolder 
    Dim emailCount As Long: emailCount = olFolder.Items.Count 
    Dim i   As Long 
    Dim myArray  As Variant 
    Dim item  As Object 

    ReDim myArray(4, (emailCount - 1)) 

    For i = 1 To emailCount 
     Set item = olFolder.Items(i) 
     '43 is olMailItem, only consider this type of email message 
     'I'm assuming you only want items with a conversationID 
     'Change the logic here to suite your specific needs 
     If item.Class = 43 And item.ConversationID <> vbNullString Then 
      'Using an array to write to excel in one go 
      myArray(0, i - 1) = item.Subject 
      myArray(1, i - 1) = item.SenderName 
      myArray(2, i - 1) = item.To 
      myArray(3, i - 1) = item.CreationTime 
      myArray(4, i - 1) = item.ConversationID 
     End If 
    Next 

    'Adding headers, then writing the data to excel 
    With ActiveSheet 
     .Range("A1") = "Subject" 
     .Range("B1") = "From" 
     .Range("C1") = "To" 
     .Range("D1") = "Created" 
     .Range("E1") = "ConversationID" 
     .Range("A2:E" & (emailCount + 1)).Value = TransposeArray(myArray) 
    End With 

    Exit Sub 

errhand: 
    Debug.Print Err.Number, Err.Description 
End Sub 

'This function is used to bypass the limitation of - 
'application.worksheetfunction.transpose 
'If you have too much data added to an array you'll get a type mismatch 
'Found here - http://bettersolutions.com/vba/arrays/transposing.htm 
Public Function TransposeArray(myArray As Variant) As Variant 
    Dim X   As Long 
    Dim Y   As Long 
    Dim Xupper  As Long: Xupper = UBound(myArray, 2) 
    Dim Yupper  As Long: Yupper = UBound(myArray, 1) 
    Dim tempArray As Variant 

    ReDim tempArray(Xupper, Yupper) 

    For X = 0 To Xupper 
     For Y = 0 To Yupper 
      tempArray(X, Y) = myArray(Y, X) 
     Next 
    Next 

    TransposeArray = tempArray 
End Function 
+0

работает, но 1) только для папки «Входящие», когда я пытаюсь использовать «Отправленный» или весь почтовый ящик, он не работает. 2) Идентификатор беседы не заполнен (только первые «базовые» 34 символа ». Фактически, этот convID подойдет для меня, но он не отображает полноразмерный ConvID, а только« базовую »строку. –

+0

Я рад, что это рабочий пример. Вы можете приспособить его для удовлетворения ваших потребностей. Пожалуйста, отметьте как закрытое –

+0

Полностью сработало для меня. Все еще категорияID не в полной мере, но это нормально для моего конкретного task –