Работа с pst файлами в С

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by chamomilla, 17 Mar 2010.

  1. chamomilla

    chamomilla New Member

    Joined:
    3 Dec 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Работа с pst файлами в С/C++

    Проблема в следующем:
    В случае использования Microsoft Outlook вся почта загружается на Ваш компьютер и хранится в одном PST файле (Он по своей сути похож на БД). В файле PST помимо почты хранятся Контакты, Заметки, Задачи - все объекты, которые видны в дереве папок. Очень часто эти PST достигают очень больших размеров (Мб или несколько Гб), и стащить их с чужого компьютера тяжело и нецелесообразно если необхдимо прочесть всего несколько писем.
    Меня интересует: есть ли функции или библиотека для языка С, с помощью которой можна работать с этими файлами (то есть открыть, просмотреть. отфильтровать по дате или по заголовку)?

    из того что я нашел есть только MAPI i libPST, может кто-то знает что-то более детально?
     
    #1 chamomilla, 17 Mar 2010
    Last edited: 22 Mar 2010
  2. chamomilla

    chamomilla New Member

    Joined:
    3 Dec 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    все, чтоя нашел по данному вопросу упирается в Simple MAPI и MAPI 1.0 - набор динамических библиотек, которые содержат функции для работы с почтой. Конкретней говорится даже о том, что доступ к PST осуществляется посредством MAPI. кто-то слыхал? может доводилось работать?
     
  3. Hiro Protagonist

    Joined:
    26 Aug 2009
    Messages:
    132
    Likes Received:
    24
    Reputations:
    -2
    msdn слышало )
    http://msdn.microsoft.com/ru-ru/library/245421h5.aspx
     
  4. chamomilla

    chamomilla New Member

    Joined:
    3 Dec 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Конечно слышал, но меня интересует вот что - используя MAPI мы действительно обращаемся к pst файлам Outlooka?
    А при использованиии libpst для *nix подобных систем происходит чтение структуры пст файла (перечитывая соответствующие биты и байты), как работать в таком случае?
     
    #4 chamomilla, 18 Mar 2010
    Last edited: 19 Mar 2010
  5. chamomilla

    chamomilla New Member

    Joined:
    3 Dec 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Неужели никто никогда не работал с почтой??? не писал своих приложений для отправки и приема сообщений?
    А что касается замечания товарища Hiro Protagonist, то msdn - дает не такую уж полную инфу, потому как формат файлов ПСТ является служебным и закрытым (хотя недавно Microsoft пообещали его открыть и представить детальную документацию)
    Но если бы все программисты сидели и ждали пока им все готовенькое выложат....
     
  6. t4Nk

    t4Nk Elder - Старейшина

    Joined:
    23 Sep 2007
    Messages:
    70
    Likes Received:
    33
    Reputations:
    0
    можно в исходниках readpst посмотреть как libpst использовать
    доки по формату тоже есть. Осталось реализовать %)
     
  7. chamomilla

    chamomilla New Member

    Joined:
    3 Dec 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Я уже рассматривал вариант использования libpst, но все-таки остановился на MAPI - можно напрямую работать с сообщениями, без предварительного разбора файла пст по формату.
    Так что будем юзать "мапи" и пока ограничимся готовыми функциями)))
     
  8. chamomilla

    chamomilla New Member

    Joined:
    3 Dec 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    И так с помощью фунций MAPI удалось все-таки добраться до сообщений и прочесть их)))Но теперь возникла такая проблема:
    появляется диалоговое окошко, в котором предлагается ввести логин и пароль, или просто выдается предупреждение о том, что мол Вы пытаетесь обратиься к файлам Outlooka, разрешить?
    Каким образом можно "погасить" эти окна?
    И еще:
    Теперь мне нужно прочесть адрессную книгу, в MAPI есть функция MAPIAddress() - у меня с ней тоже все получилось, но опять таки выплывает окно - в котором отбражаются все контакты.
    Есть вариант использования такой конструкции IMAPISession::OpenAddressBook (детально можно посмотреть сдесь)
    Кто мне поможет с онной разобраться???
     
    #8 chamomilla, 22 Mar 2010
    Last edited: 22 Mar 2010
  9. SWAPPER

    SWAPPER Elder - Старейшина

    Joined:
    14 Dec 2006
    Messages:
    256
    Likes Received:
    42
    Reputations:
    24
    попробуй просто искать окно с неким текстом в заголовке и эмулировать нажатие клавиши ОК в этом окне, чтобы предоставить доступ твоей проге к аутлуку.
     
  10. chamomilla

    chamomilla New Member

    Joined:
    3 Dec 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    Спасибо SWAPPER буду пробовать...

    Я все таки доступился к адрессной книге!!!
    теперь могу прочесть имена пользователей и их мыло)))
    теперь хотелось бы попробовать получить и остальные данные о контактах из адрессной книги (например телефон, домашний адресс, вобщем все поля которые доступны аутлуку)...
    каким образом можно это осуществить?

    ЕЩЕ: можно ли прочесть и другие данные из пст файла, например заметки, календарь и т.д.???
     
    #10 chamomilla, 23 Mar 2010
    Last edited: 24 Mar 2010
  11. chamomilla

    chamomilla New Member

    Joined:
    3 Dec 2009
    Messages:
    12
    Likes Received:
    0
    Reputations:
    0
    мои "разборки" длились очень долго но вроде бы я их победил...выяснил следующее:
    Для доступа к пст файлам существует 2 варианта:
    1. Simple MAPI - #include <mapi.h>
    2. Extended MAPI - #include <mapix.h>

    Simple MAPI представлен набором из 12 функций. который предоставляют возможность для работы в основном только с папкой для входящих сообщений (Inbox), ниже приведены все 12 функций:2.1. MAPIAddress
    Code:
       1. MAPIAddress
       2. MAPIDeleteMail
       3. MAPIDetails
       4. MAPIFindNext
       5. MAPIFreeBuffer
       6. MAPILogoff
       7. MAPILogon
       8. MAPIReadMail
       9. MAPIResolvName
       10. MAPISaveMail
       11. MAPISendDocumets
       12. MAPISendMail
    А вот второй интерфейс предоставляет гораздо больше возможностей - есть специальные методы для доступа к Адрессной книги, всем папкам пользователя (Входящие, Исходящие, Черновики, Заметки). Почти все методы описаны в MSDN, но уж очень скудненько. Хотя именно Extended MAPI дает довольно таки неплохие возможно поковыряться в чужой почте, начиная с контактов пользователя, закачивая чем угодно на Ваш вкус))).

    И еще полезная заметка для тех. кто возможно заинтересуется - при работе с Extended MAPI в качестве наглядного пособия очень удобно использовать утилитку OutlookSPY!!!
    Кто заинтересован в данной теме - пишите!!!