none
MapiLogonEx function failing RRS feed

  • Question

  • I am using the MAPI IProfAdmin interface for creating the profile .I can see that profile is completely created in registry also .
    After that i want to logon using that mapi profile .
    For that i am using the MAPILogonEx function without MAPI_LOGON_UI parameter as i dont want any UI there .
    At this time logon is failing .I was thinking that profile is not created so what i did ,i used MAPI_LOGON_UI parameter and specified that mapi profile name also .

    MAPILogonEx(0,lpszProfile,  NULL,    MAPI_EXTENDED | MAPI_NEW_SESSION | MAPI_UNICODE | MAPI_LOGON_UI, &m_mapiSession)

    Now its prompting as invalid name .Then clicking on ok ,it displayed a drop down with a list of existing mapi profile name .I can see my mapi profile there also .I means mapi profile exist but the way i am trying to access is not correct .

    Need help on the same .

    Here is the code :-

    bool CreateProfileWithIProfAdmin(char * szMailbox, char * szServer)
    // CreateProfileWithIProfAdmin function: This uses the MAPI IProfAdmin to
    // programmatically create a profile. No UI is displayed.
    {

      HRESULT     hRes = S_OK;      // Result from MAPI calls.
      LPPROFADMIN   lpProfAdmin = NULL;   // Profile Admin object.
      LPSERVICEADMIN lpSvcAdmin = NULL;   // Service Admin object.
      LPMAPITABLE   lpMsgSvcTable = NULL;  // Table to hold services.
      LPSRowSet    lpSvcRows = NULL;    // Rowset to hold results of table query.
      SPropValue   rgval[2];        // Property structure to hold values we want to set.
      SRestriction  sres;          // Restriction structure.
      SPropValue   SvcProps;        // Property structure for restriction.


        char      szProfile[12] = "temp"; // String for profile name.
        int PR_PROFILE_UNRESOLVED_NAME = 1711734814; // &H6607001E
        int PR_PROFILE_UNRESOLVED_SERVER= 1711800350; // &H6608001E
      enum {iSvcName, iSvcUID, cptaSvc};
      SizedSPropTagArray(cptaSvc,sptCols) = { cptaSvc, PR_SERVICE_NAME, PR_SERVICE_UID };
      // Initialize MAPI.
    int a;
      if (FAILED(hRes = MAPIInitialize(NULL)))
      {
        cout<<"Error initializing MAPI.";
        goto error;
      }
      // Get an IProfAdmin interface.
      if (FAILED(hRes = MAPIAdminProfiles(0,       // Flags.
                        &lpProfAdmin))) // Pointer to new IProfAdmin.
      {
        cout<<"Error getting IProfAdmin interface.";
        goto error;
      }
      // Create a new profile.
      if (FAILED(hRes = lpProfAdmin->CreateProfile(szProfile,   // Name of new profile.
                             NULL,     // Password for profile.
                             NULL,     // Handle to parent window.
                             NULL)))    // Flags.
      {
        cout<<"Error creating profile.";
        goto error;
      }

      // Get an IMsgServiceAdmin interface off of the IProfAdmin interface.
      if (FAILED(hRes = lpProfAdmin->AdminServices(szProfile,   // Profile that we want to modify.
                             NULL,     // Password for that profile.
                             NULL,     // Handle to parent window.
                             0,       // Flags.
                             &lpSvcAdmin))) // Pointer to new IMsgServiceAdmin.
      {
        cout<<"Error getting IMsgServiceAdmin interface.";
        goto error;
      }

      // Create the new message service for Exchange.
      if (FAILED(hRes = lpSvcAdmin->CreateMsgService("MSEMS",   // Name of service from MAPISVC.INF.
                              NULL,    // Display name of service.
                              NULL,    // Handle to parent window.
                              NULL)))   // Flags.
      {
        cout<<"Error creating Exchange message service.";
        goto error;
      }
        if (FAILED(hRes = lpSvcAdmin->GetMsgServiceTable(0,         // Flags.
                               &lpMsgSvcTable))) // Pointer to table.
      {
        cout<<"Error getting Message Service Table.";
        goto error;
      }

      // Set up restriction to query table.

      sres.rt = RES_CONTENT;
      sres.res.resContent.ulFuzzyLevel = FL_FULLSTRING;
      sres.res.resContent.ulPropTag = PR_SERVICE_NAME;
      sres.res.resContent.lpProp = &SvcProps;
      SvcProps.ulPropTag = PR_SERVICE_NAME;
      SvcProps.Value.lpszA = "MSEMS";
      // Query the table to obtain the entry for the newly created message service.

      if (FAILED(hRes = HrQueryAllRows(lpMsgSvcTable,
                       (LPSPropTagArray)&sptCols,
                       &sres,
                       NULL,
                       0,
                       &lpSvcRows)))
      {
        cout<<"Error querying table for new message service.";
        goto error;
      }
      // Set up a SPropValue array for the properties that you have to configure.
      // First, the server name.
      ZeroMemory(&rgval[1], sizeof(SPropValue) );
      rgval[1].ulPropTag = PR_PROFILE_UNRESOLVED_SERVER;
      rgval[1].Value.lpszA = szServer;

      // Next, the mailbox name.
      ZeroMemory(&rgval[0], sizeof(SPropValue) );
      rgval[0].ulPropTag = PR_PROFILE_UNRESOLVED_NAME;

      rgval[0].Value.lpszA = szMailbox;

      // Configure the message service by using the previous properties.

        if (FAILED(hRes = lpSvcAdmin->ConfigureMsgService(
        (LPMAPIUID)lpSvcRows->aRow->lpProps[iSvcUID].Value.bin.lpb, // Entry ID of service to configure.
        NULL,                            // Handle to parent window.
        0,                             // Flags.
        2,                             // Number of properties we are setting.
        rgval)))                          // Pointer to SPropValue array.
      {
        cout<<"Error configuring message service.";
        goto error;
      }
     
    LPMAPISESSION       m_mapiSession;
      LPSTR lpszProfile;
    lpszProfile= "temp";
    if (FAILED(hRes = MAPILogonEx(0,lpszProfile,  NULL,    MAPI_EXTENDED | MAPI_NEW_SESSION | MAPI_UNICODE | MAPI_LOGON_UI, &m_mapiSession)))
    {
        cout<<"Error new";
        goto error;
      }
      goto cleanup;
    error:
      cout<<" hRes = 0x"<<hex<<hRes<<dec<<endl;
      cin >>a ;
      return FALSE;
    cleanup:
      // Clean up.
      if (lpSvcRows) FreeProws(lpSvcRows);
      if (lpMsgSvcTable) lpMsgSvcTable->Release();
      if (lpSvcAdmin) lpSvcAdmin->Release();
      if (lpProfAdmin) lpProfAdmin->Release();

      MAPIUninitialize();
      cout <<"done";
      cin>>a;
      return TRUE;
    }


    parul

    Thursday, February 27, 2014 1:48 PM