Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Извлечь информацию из файлов .msg (http://forum.oszone.net/showthread.php?t=309540)

dahiko 23-12-2015 18:43 2587804

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

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

Iska 24-12-2015 01:06 2587885

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

dahiko 24-12-2015 06:28 2587912

В архиве 2 письма.
Даты писем:
Чт 24.12.2015 8:56
Чт 24.12.2015 8:57

Kazun 24-12-2015 08:45 2587924

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 2587982

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

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

Kazun 24-12-2015 13:51 2587985

Код:

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 2587995

Добавил выгрузку в файл. В итоге получилось так:

Код:

$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 2588002

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

DeathMan2k4 10-07-2017 09:59 2750309

Подскажите, а реально ли извлечь файл прикрепленный ?

Iska 10-07-2017 10:07 2750311

Выложете Ваши образцы сообщений — попробуем.

surgutfred 13-07-2017 14:31 2751112

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 2751147

Цитата:

Цитата surgutfred
Если кто решит только через bat »

surgutfred, никто не решит. Пакетные файлы — не тот уровень.

dahiko 29-04-2021 15:07 2956677

Всем привет!
Этот скрипт почему-то перестал работать. Последний раз им пользовался примерно год назад. Возможно офис обновился и что-то надо подправить?

Код:

$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, которые мешают. Но не помогло.

Вот здесь прочитал, что похожая проблема вызвана тем ,что разные версии Office и Skype установлены. Да это так. Office 2013, а Skype 2016. Обходное решение, которое там описано, оно не помогает. После удаления ветки реестра HKEY_CLASSES_ROOT\TypeLib\{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}\2.8 та же ошибка.


Время: 22:39.

Время: 22:39.
© OSzone.net 2001-