Войти

Показать полную графическую версию : Извлечь информацию из файлов .msg


dahiko
23-12-2015, 18:43
Всем привет!
Имеется папка, в которой много сохраненных писем из Outlook. Расширение .msg
Каким образом можно выдернуть информацию по каждому файлу и сохранить например в txt или csv. Интересует:
1. Тема письма или можно имя файла (они совпадают);
2. Дата сообщения (поле "Отправлено").

Заранее спасибо!

Iska
24-12-2015, 01:06
Выложите пару-тройку *.msg, упаковав их в архив, и укажите для каждого из образцов «Дату сообщения».

dahiko
24-12-2015, 06:28
В архиве 2 письма.
Даты писем:
Чт 24.12.2015 8:56
Чт 24.12.2015 8:57

Kazun
24-12-2015, 08:45
PowerShell + Outlook:

$outlook = New-Object -comobject outlook.application
Get-ChildItem C:\msg\ -Filter *.msg| ForEach-Object{
$msg = $outlook.CreateItemFromTemplate($_.FullName)
$msg | Select senderemailaddress,to,subject,Senton,body
}

Вывод:
SenderEmailAddress : dahiko@mail.ru
To : Igor Kholstinin
Subject : Тест1
SentOn : 12/24/2015 5:56:18 AM
Body : --
Отправлено из Mail.Ru для Android


SenderEmailAddress : dahiko@mail.ru
To : Igor Kholstinin
Subject : Тест2
SentOn : 12/24/2015 5:56:32 AM
Body : --
Отправлено из Mail.Ru для Android

dahiko
24-12-2015, 13:44
Работает, но результат выводится в строки. Как сделать, чтобы выводилось в столбец?
Например:

SenderEmailAddress, To, Subject, SentOn
@mail.ru, Vasya Pupkin, Тест2, 12/24/2015 5:56:32 AM

Kazun
24-12-2015, 13:51
Get-ChildItem C:\msg\ -Filter *.msg| ForEach-Object{
$outlook.CreateItemFromTemplate($_.FullName)
} | Select senderemailaddress,to,subject,Senton,body | ConvertTo-Csv -NoTypeInformation

dahiko
24-12-2015, 14:23
Добавил выгрузку в файл. В итоге получилось так:

$outlook = New-Object -comobject outlook.application
Get-ChildItem C:\msg\ -Filter *.msg| ForEach-Object{
$outlook.CreateItemFromTemplate($_.FullName)
} | Select senderemailaddress,to,subject,Senton | Export-Csv C:\msg\test.txt -Encoding UTF8

Спасибо большое!
Вопрос решен.

Iska
24-12-2015, 14:38
Вопрос только со временем. Там случайно даты не по Гринвичу хранятся (по идее, именно в UTC должны)? Не надо ли делать пересчёт на локальное время (у меня под WSH время так же отдавалось в 5 часов, а не в восемь)?

DeathMan2k4
10-07-2017, 09:59
Подскажите, а реально ли извлечь файл прикрепленный ?

Iska
10-07-2017, 10:07
Выложете Ваши образцы сообщений — попробуем.

surgutfred
13-07-2017, 14:31
DeathMan2k4, когда у меня встал такой вопрос я решил только через использование сторонней программы с вызовом через bat
"C:\Program Files (x86)\TotalMailConverter\MailConverter.exe" "%PUT%" "%PUT%" -kfs -c XHTML -template "[nn]. [date] - [subject]" -sender:off -rcpt:off -subject:off -attach -iattach:off -images:off -msg:off -dpi 300 -pc M -PDFAuthor Softplicity -pdfver 1.4 -TM 1 -LM 1 -BM 1 -RM 1 -ps A4 -tc G4 -tjq 80 -HeadText "Page [page]" -HeadAlign c -HeadFont Tahoma -HeadSize 10 -FootText [date] -FootAlign c -FootFont Tahoma -FootSize 10 -r

Если кто решит только через bat то же буду благодарен...

Iska
13-07-2017, 17:11
Если кто решит только через bat »
surgutfred, никто не решит. Пакетные файлы — не тот уровень.

dahiko
29-04-2021, 15:07
Всем привет!
Этот скрипт почему-то перестал работать. Последний раз им пользовался примерно год назад. Возможно офис обновился и что-то надо подправить?

$outlook = New-Object -comobject outlook.application
Get-ChildItem C:\Users\Vasya\Desktop\111\ -Filter *.msg| ForEach-Object{
$outlook.CreateItemFromTemplate($_.FullName)
} | Select senderemailaddress,to,subject,Senton | Export-Csv C:\Users\Vasya\Desktop\111test.txt -Encoding UTF8

Подскажите, кто знает? Такая ошибка возвращается

Исключение при вызове "CreateItemFromTemplate" с "1" аргументами: "Невозможно привести COM-объект типа "Microsoft.Office.Interop.Outlook.ApplicationClass" к интерфейсному
типу "Microsoft.Office.Interop.Outlook._Application". Операция завершилась со сбоем, поскольку вызов QueryInterface COM-компонента для интерфейса с IID "{00063001-0000-0
000-C000-000000000046}" возвратил следующую ошибку: Библиотека не зарегистрирована. (Исключение из HRESULT: 0x8002801D (TYPE_E_LIBNOTREGISTERED))."
C:\Users\Vasya\Desktop\111\111.ps1:3 знак:4
+ $outlook.CreateItemFromTemplate($_.FullName)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : InvalidCastException

Пробовал:
1. "-comobject" менять на "-com". Прочитал на одном из форумов, что должно помочь с более новыми версиями Office, но не помогло.
2. В реестре удалять все разделы с именем 00063001-0000-0000-C000-000000000046. Прочитал на одном форуме, что это может остатки от прошлой версии Office, которые мешают. Но не помогло.

Вот здесь (https://www.ibm.com/support/pages/hresult-0x8002801d-typeelibnotregistered-errors-launching-excel-related-functionality-caused-installing-incompatible-version-skype-business)прочитал, что похожая проблема вызвана тем ,что разные версии Office и Skype установлены. Да это так. Office 2013, а Skype 2016. Обходное решение, которое там описано, оно не помогает. После удаления ветки реестра HKEY_CLASSES_ROOT\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.8 та же ошибка.




© OSzone.net 2001-2012