T
tsahling
Hi!
I use Redemption 4.2 with C-Builder 5 via imported typelib.
I have the problem that a second usage of RDOSession.Logon returns an
EOleSysError with the message "Error in MAPILogonEx:
MAPI_E_NOT_INITIALIZED".
This is the code:
-----
::CoInitializeEx( 0, COINIT_MULTITHREADED );
// --
try
{
auto_ptr<TOutlookApplication> outlook( new TOutlookApplication( 0 )
);
// --
outlook->ConnectKind = ckNewInstance;
outlook->Connect();
// --
try
{
Variant draftMailEntryID;
// --
{
auto_ptr<TRDOSession> rdoSession( new TRDOSession( outlook.get()
) );
// --
rdoSession->Logon( "", "", false, true );
// --
try
{
Redemption_tlb::IRDOFolderPtr rdoDraftsFolder =
rdoSession->GetDefaultFolder( Outlook_tlb:lFolderDrafts );
Redemption_tlb::IRDOMailPtr rdoMail =
rdoDraftsFolder->Items->Add( Outlook_tlb:lMailItem );
// --
rdoMail->Import( WideString( m_vorlagenDatei ), type );
rdoMail->Subject = WideString( m_dokTitel );
rdoMail->Attachments->Add( m_pdfFilename );
rdoMail->Recipients->Add( m_kunEmail );
// --
rdoMail->Save();
// --
draftMailEntryID = rdoMail->EntryID;
}
__finally
{
rdoSession->Logoff();
}
}
// --
_NameSpacePtr comSession = outlook->GetNamespace( WideString(
"MAPI" ) );
// --
comSession->Logon( "", "", false, true );
// --
try
{
MailItemPtr mail = comSession->GetItemFromID( draftMailEntryID );
// --
mail->Display( true );
// --
mail->Close( olDiscard );
}
__finally
{
comSession->Logoff();
}
}
__finally
{
outlook->Disconnect();
}
}
__finally
{
::CoUninitialize();
}
----
This first time this code is executed, everything is fine. If the user
executes this code a second time, I get the error described above
(line: >rdoSession->Logon( "", "", false, true );<)
I tried already to wrap this code with
MAPIInitialize()/MAPIDeinitialize(), but the same error occurs.
Has anyone an idea what the problem might be?
Thanks!
I use Redemption 4.2 with C-Builder 5 via imported typelib.
I have the problem that a second usage of RDOSession.Logon returns an
EOleSysError with the message "Error in MAPILogonEx:
MAPI_E_NOT_INITIALIZED".
This is the code:
-----
::CoInitializeEx( 0, COINIT_MULTITHREADED );
// --
try
{
auto_ptr<TOutlookApplication> outlook( new TOutlookApplication( 0 )
);
// --
outlook->ConnectKind = ckNewInstance;
outlook->Connect();
// --
try
{
Variant draftMailEntryID;
// --
{
auto_ptr<TRDOSession> rdoSession( new TRDOSession( outlook.get()
) );
// --
rdoSession->Logon( "", "", false, true );
// --
try
{
Redemption_tlb::IRDOFolderPtr rdoDraftsFolder =
rdoSession->GetDefaultFolder( Outlook_tlb:lFolderDrafts );
Redemption_tlb::IRDOMailPtr rdoMail =
rdoDraftsFolder->Items->Add( Outlook_tlb:lMailItem );
// --
rdoMail->Import( WideString( m_vorlagenDatei ), type );
rdoMail->Subject = WideString( m_dokTitel );
rdoMail->Attachments->Add( m_pdfFilename );
rdoMail->Recipients->Add( m_kunEmail );
// --
rdoMail->Save();
// --
draftMailEntryID = rdoMail->EntryID;
}
__finally
{
rdoSession->Logoff();
}
}
// --
_NameSpacePtr comSession = outlook->GetNamespace( WideString(
"MAPI" ) );
// --
comSession->Logon( "", "", false, true );
// --
try
{
MailItemPtr mail = comSession->GetItemFromID( draftMailEntryID );
// --
mail->Display( true );
// --
mail->Close( olDiscard );
}
__finally
{
comSession->Logoff();
}
}
__finally
{
outlook->Disconnect();
}
}
__finally
{
::CoUninitialize();
}
----
This first time this code is executed, everything is fine. If the user
executes this code a second time, I get the error described above
(line: >rdoSession->Logon( "", "", false, true );<)
I tried already to wrap this code with
MAPIInitialize()/MAPIDeinitialize(), but the same error occurs.
Has anyone an idea what the problem might be?
Thanks!