Конференция "WinAPI" » Simple Mapi, чтение писем
 
  • indapublic (06.12.11 11:38) [0]
    В XE2 решил набросать задачку: получить письма через Mapi.


    uses
     Winapi.Mapi;

    hSession := MapiLogOn(hSession, PAnsiChar(FUsername), PAnsiChar(FPassword),
       MAPI_LOGON_UI or MAPI_NEW_SESSION, 0, @MapiSession);

    hResult := MapiFindNext(MapiSession, 0, Nil, Nil, MAPI_LONG_MSGID OR
       MAPI_GUARANTEE_FIFO, 0, AMessageId);



    после последнего действия hResult стабильно возвращает MAPI_E_FAILURE, SysErrorMessage говорит "The system cannot find the file specified". Мне эта ошибка ни о чем не говорит. Что он имеет в виду?
  • Сергей М. © (06.12.11 11:46) [1]
    > SysErrorMessage

    А где в MAPI написано что код детализации ошибки MAPI_E_FAILURE лежит в GetLastError ?

    Смотрю в док-цию и в упор не вижу ..


    > hSession := MapiLogOn(hSession, PAnsiChar(FUsername), PAnsiChar(FPassword),


    а пременные FUsername и FPassword у тебя поди String.
    если так то ты попросту не залогинился.
  • indapublic (06.12.11 13:04) [2]

    > А где в MAPI написано что код детализации ошибки MAPI_E_FAILURE
    > лежит в GetLastError

    Ошибся.


    > ты попросту не залогинился

    MapiLogOn возвращает SUCCESS_SUCCESS
  • Сергей М. © (06.12.11 16:33) [3]
    > MapiLogOn возвращает SUCCESS_SUCCESS

    ну если D7, то неудивительно.. Засада будет при переходе на юникодовые версии

    Хотя SUCCESS_SUCCESS - это вовсе не hSession, а код завершения, не имеющий к хендлу прямого отношения.

    Значит какие-то иные параметры вызова MapiFindNext некорректны.
  • indapublic (06.12.11 16:56) [4]
    Что-то вы меня совсем запутали. Во время тестирования авторизация идет без имени и пароля. Все настроено корректно, это проверено другими способами. Авторизация возможна.


    > Хотя SUCCESS_SUCCESS - это вовсе не hSession, а код завершения,
    >  не имеющий к хендлу прямого отношения

    Цитирую с MSDN:

    Return value
    This function returns one of the following values.
    SUCCESS_SUCCESS
    The call succeeded and a Simple MAPI session was established.

    С соединением, таким образом, вопросов нет. Проблема, как я понимаю, в MapiFindNext.


    > Значит какие-то иные параметры вызова MapiFindNext некорректны

    Может, вы сможете подсказать какие параметры могут быть некорректны? Я не могу понять, в чем можно ошибиться в этой строке

    hResult := MapiFindNext(MapiSession, 0, Nil, Nil, MAPI_LONG_MSGID OR MAPI_GUARANTEE_FIFO, 0, AMessageId);



    Может есть какой-нибудь рабочий пример поиска писем? В интернете нахожу только отправку, на MSDN тоже ничего не вижу
  • Сергей М. © (06.12.11 17:26) [5]

    > С соединением, таким образом, вопросов нет


    Да я не говорю что там вопросы)
    Просто у тебя переменная, куда пишется результат MapiLogOn, имеет несуразное ее смыслу имя - hSession, в то время как имя переменной, куда ты сохраняешь результат вызова MapiFindNext, вполне адекватно.
  • indapublic (07.12.11 08:04) [6]
    Кстати, в интернете куча примеров работы с MapiLogon и везде все таки используется SysErrorMessage (как пример, http://www.delphisources.ru/pages/faq/base/load_address_book.html)
  • Сергей М. © (07.12.11 09:38) [7]
    Куча-то кучей, да похоже многая часть кучи бездумно содраны овцами у одного барана)

    Даже если это явно и не фигурирует в MSDN, детальный код отказа MAPI_E_FAILURE вероятно (не проверял) лежит в GetLastError - вот его, наверно, и следует совать параметром в SysErrorMessage.

    Вот, на мой взгляд, кошерный пример:

    http://usenet.su/showthread.php/400585-%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0-%D1%81-%D0%BF%D0%BE%D1%87%D1%82%D0%BE%D0%B2%D1%8B%D0%BC-%D0%BA%D0%BB%D0%B8%D0%B5%D0%BD%D1%82%D0%BE%D0%BC-%D0%BF%D0%BE-%D1%83%D0%BC%D0%BE%D0%BB%D1%87%D0%B0%D0%BD%D0%B8%D1%8E
  • indapublic (07.12.11 10:42) [8]
    Ну вот по отправке материалов куча. А вот с получением как-то скудновато. Или я так ищу
 
Конференция "WinAPI" » Simple Mapi, чтение писем
Есть новые Нет новых   [134430   +4][b:0][p:0.001]