Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Отправка почты через MAPI / 3 сообщений из 3, страница 1 из 1
20.04.2006, 18:03
    #33680318
dronnix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка почты через MAPI
Доброго всем времени суток!!! Помогите советом что может быть не так???
Написал такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
#include <mapi.h>

LPMAPILOGON    m_MAPILogon;
LPMAPILOGOFF   m_MAPILogoff;
LPMAPISENDMAIL m_MAPISendMail;
HINSTANCE hlibMAPI;
ULONG hSession;
MapiFileDesc lpMapiFiles;
MapiRecipDesc lpMapiRecips[ 1 ];

void __fastcall TForm1::FormCreate(TObject *Sender)
{
    hlibMAPI = LoadLibrary("mapi32.dll");
    m_MAPILogon = ( LPMAPILOGON ) GetProcAddress( hlibMAPI, "MAPILogon" );
    m_MAPILogoff = ( LPMAPILOGOFF ) GetProcAddress ( hlibMAPI, "MAPILogoff");
    m_MAPISendMail = ( LPMAPISENDMAIL ) GetProcAddress ( hlibMAPI, "MAPISendMail");
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
  MapiMessage Message;
 if(m_MAPILogon( 0 ,NULL,NULL,MAPI_LOGON_UI, 0 ,&hSession)==SUCCESS_SUCCESS)
  {
        HRESULT hRes;

        
        lpMapiRecips[ 0 ].ulReserved     = 0L;
        lpMapiRecips[ 0 ].ulRecipClass   = MAPI_TO;
        lpMapiRecips[ 0 ].lpszName       = "Тест";
        lpMapiRecips[ 0 ].lpszAddress    = "SMTP:куда-то@зачем-то.ru";
        lpMapiRecips[ 0 ].ulEIDSize      =  0 ;
        lpMapiRecips[ 0 ].lpEntryID      = NULL;

        Message.ulReserved =0L;
        Message.lpszSubject="Проверка";
        Message.lpszNoteText="Тест";
        Message.lpszMessageType=NULL;
        Message.lpOriginator=NULL;
        Message.nRecipCount= 1 ;
        Message.lpRecips=lpMapiRecips;
        Message.lpFiles=NULL;
        hRes=m_MAPISendMail(hSession,(ULONG_PTR)Application->Handle,&Message,MAPI_NEW_SESSION,0L);

  }
  m_MAPILogoff(hSession, 0 , 0 , 0 );

}

Все проходит успешно. Запускается Outlook 97, показывает окно выбора конфигурации, а дальше ничего. Т.е письма как такового в Outlook нету:( Программа компилируется и работает без ошибок. Не могу понять в какую сторону обратить внимание. Подскажите???
Заранее благодарен
...
Рейтинг: 0 / 0
20.04.2006, 18:13
    #33680349
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка почты через MAPI
dronnix
if(m_MAPILogon(0,NULL,NULL,MAPI_LOGON_UI,0,&hSession)==SUCCESS_SUCCESS)

Скорее всего вот здесь, произошла ошибка которую ты игнорируешь. Клади результат вызова MAPILogon в переменную и проверяй ее на все возможные варианты. Скорее всего там MAPI_E_TOO_MANY_SESSIONS или MAPI_E_LOGIN_FAILURE.
...
Рейтинг: 0 / 0
24.04.2006, 08:56
    #33685267
dronnix
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Отправка почты через MAPI
White Owl dronnix
if(m_MAPILogon(0,NULL,NULL,MAPI_LOGON_UI,0,&hSession)==SUCCESS_SUCCESS)

Скорее всего вот здесь, произошла ошибка которую ты игнорируешь. Клади результат вызова MAPILogon в переменную и проверяй ее на все возможные варианты. Скорее всего там MAPI_E_TOO_MANY_SESSIONS или MAPI_E_LOGIN_FAILURE.

Спасибо за участие в проблеме! Насчет отработки ошибки согласен. Я её до до этого просто через дебагер отлавливал и она была всегда MAPI_E_FAILURE, код ошибки 2. И ошибка то как раз была на функции: m_MAPISendMail. В ней вообще ничего не происходило:-(( На данном этапе проблему решил так, может кому пригодится:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
LPMAPILOGON    m_MAPILogon;
LPMAPILOGOFF   m_MAPILogoff;
LPMAPISENDMAIL m_MAPISendMail;
ULONG ShSession;
HINSTANCE hlibMAPI;
MapiRecipDesc lpMapiRecips;
MapiFileDesc lpMapiFiles;

void __fastcall TForm1::Button3Click(TObject *Sender)
{
    MapiMessage Message;
    HRESULT hRes;
    

    hlibMAPI = LoadLibrary("Mapi32.dll");
    m_MAPILogon = ( LPMAPILOGON ) GetProcAddress( hlibMAPI, "MAPILogon" );
    m_MAPILogoff = ( LPMAPILOGOFF ) GetProcAddress ( hlibMAPI, "MAPILogoff");
    m_MAPISendMail = ( LPMAPISENDMAIL ) GetProcAddress ( hlibMAPI, "MAPISendMail");


     memset(&lpMapiRecips,  0 , sizeof(lpMapiRecips));
    lpMapiRecips.ulReserved = 0 ;
    lpMapiRecips.ulRecipClass   = MAPI_TO;
    lpMapiRecips.lpszName       = "xxxxx";
    lpMapiRecips.lpszAddress    = "SMTP:xxxx@xxxx.xx";
    lpMapiRecips.ulEIDSize      =  0 ;
    lpMapiRecips.lpEntryID      = NULL;

     memset(&Message,  0 , sizeof(Message));
     Message.ulReserved = 0 ;
     Message.lpszSubject = "ПРОВЕРКА";
     Message.lpszNoteText = "ТЕКСТ СООБЩЕНИЯ";
     Message.lpOriginator = NULL;
     Message.nRecipCount =  1 ;
     Message.lpRecips = &lpMapiRecips;
     Message.nFileCount= 0 ;
     Message.lpFiles=NULL;


     m_MAPILogon(reinterpret_cast<unsigned long>(Application->Handle),NULL,NULL,MAPI_LOGON_UI|MAPI_NEW_SESSION, 0 ,&ShSession);
     hRes = m_MAPISendMail (ShSession,
                        reinterpret_cast<unsigned long>(Application->Handle),
                        &Message, 0 , 0 );
     m_MAPILogoff(ShSession,reinterpret_cast<unsigned long>(Application->Handle), 0 , 0 );


     FreeLibrary(hlibMAPI);

}
После добавления memset все тоже самое отработало на отлично. На Outlook 97 отрабатывает великолепно (да и на 2003 тоже). Ну а так могу посоветовать компоненты Office Partner для Билдера (кстати бесплатны). Начиная с Outllook 98 и остальными компонентами Офиса(кроме Аксеса) работают прекрасно!

На этом тему думаю можно закрыть.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Отправка почты через MAPI / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]