When I access mail address that was from Addin, I got the warning box,

À

À±Çüµ¿

First of all, thank you very much for Ken Slovak...
But I have another question....


I succeeded in getting the mail address from Addin thanks to Ken Slovak using
MailItem.BeforeCheckNames.

But I got another problem.
When I access mail address that was from Addin, I got the warning box,

saying "A program is trying to access e-mail addresses you have stored in Outlook. Do you want to allow this?".
"If this is unexpected, it may be a virus and you should choose "No"."

Can I skip this one?
I'm curious whether there's a way the user can set up the option (of the OutLook).


Below is the routine that takes the mail address from Outlook.
(I have coded it with VC++ 6.0 and removed the exception routines.)

The first code causes one alert message box, and the second code causes (email address + 1 ) message boxes...

First code.


void __stdcall COutHMail::OnBeforeCheckNames(BOOL* Cancel)
{
::AfxMessageBox("Check Name");

LPDISPATCH pDisp = NULL;
pDisp = m_pApp->ActiveInspector();

CComQIPtr<Outlook::_Inspector> pInsp(pDisp);

pDisp->Release();
pDisp = NULL;

pDisp = pInsp->GetCurrentItem();

CComQIPtr <Outlook::_MailItem> pItem(pDisp);

pDisp->Release();
pDisp=NULL;

CString strName = pItem->GetTo();
::AfxMessageBox(strName);
pItem.Release();
}

Second code.


void __stdcall COutHMail::OnBeforeCheckNames(BOOL* Cancel)
{
LPDISPATCH pDisp = NULL;
pDisp = m_pApp->ActiveInspector();

CComQIPtr<Outlook::_Inspector> pInsp(pDisp);

pDisp->Release();
pDisp = NULL;

pDisp = pInsp->GetCurrentItem();

CComQIPtr <Outlook::_MailItem> pItem(pDisp);

pDisp->Release();
pDisp=NULL;

CComQIPtr <Outlook::Recipients> pRecips = pItem->GetRecipients();

long lCount = pRecips->GetCount();

for(long for_count = 0; for_count < lCount; for_count++)
{
CComVariant pVal(for_count+1);
CComPtr<Outlook::Recipient> pRecip = pRecips->Item(pVal);

CString strName = pRecip->GetName();
::AfxMessageBox(strName);
}
pItem.Release();
}
 
S

Sue Mosher [MVP-Outlook]

The security dialogs that pop up when an application tries to access certain
Outlook properties and methods are designed to inhibit the spread of viruses
via Outlook; see http://www.slipstick.com/outlook/esecup.htm#autosec. They
cannot be simply turned on or off with a user option or registry setting.

However, Outlook 2003 does not show security prompts on three specific types
of applications:

-- VBScript code in published, non-oneoff Outlook forms

-- Outlook VBA code that uses the intrinsic Application object

-- Outlook COM add-ins properly constructed to derive all objects from
the Application object passed by the OnConnection event

In earlier versions of Outlook, standalone users can use a free tool called
Express ClickYes (http://www.express-soft.com/mailmate/clickyes.html) to
click the security dialog buttons automatically. Beware that this means if a
virus tries to send mail using Outlook or gain access to your address book,
it will succeed.

If you're the administrator in an Exchange Server environment, you can
reduce the impact of the security prompts with administrative tools. See
http://www.slipstick.com/outlook/esecup/admin.htm

If it's an application you wrote yourself and either your application needs
to support versions besides Outlook 2003 or your application runs extenal to
Outlook, you have these options for modifying your program to avoid the
security prompts (roughly in order of preference):

-- Use Extended MAPI (see http://www.slipstick.com/dev/mapi.htm) and C++
or Delphi; this is the most secure method and the only one that Microsoft
recommends. However, it applies only to COM add-ins and external programs;
you cannot use Extended MAPI in Outlook forms or VBA.

-- Use Redemption (http://www.dimastr.com/redemption/), a third-party
COM library that wraps around Extended MAPI but parallels the Outlook Object
Model, providing many methods that the Outlook model does not support

-- Use SendKeys to "click" the buttons on the security dialogs that your
application may trigger. See
http://www.slipstick.com/outlook/esecup.htm#autosec for a link to sample
code.

-- Program the free Express ClickYes
(http://www.express-soft.com/mailmate/clickyes.html) tool to start suspended
and turn it on only when your program needs to have the buttons clicked
automatically.

--
Sue Mosher, Outlook MVP
Author of
Microsoft Outlook Programming - Jumpstart for
Administrators, Power Users, and Developers



First of all, thank you very much for Ken Slovak...
But I have another question....


I succeeded in getting the mail address from Addin thanks to Ken Slovak
using
MailItem.BeforeCheckNames.

But I got another problem.
When I access mail address that was from Addin, I got the warning box,

saying "A program is trying to access e-mail addresses you have stored in
Outlook. Do you want to allow this?".
"If this is unexpected, it may be a virus and you should choose "No"."

Can I skip this one?
I'm curious whether there's a way the user can set up the option (of the
OutLook).


Below is the routine that takes the mail address from Outlook.
(I have coded it with VC++ 6.0 and removed the exception routines.)

The first code causes one alert message box, and the second code causes
(email address + 1 ) message boxes...

First code.


void __stdcall COutHMail::OnBeforeCheckNames(BOOL* Cancel)
{
::AfxMessageBox("Check Name");

LPDISPATCH pDisp = NULL;
pDisp = m_pApp->ActiveInspector();

CComQIPtr<Outlook::_Inspector> pInsp(pDisp);

pDisp->Release();
pDisp = NULL;

pDisp = pInsp->GetCurrentItem();

CComQIPtr <Outlook::_MailItem> pItem(pDisp);

pDisp->Release();
pDisp=NULL;

CString strName = pItem->GetTo();
::AfxMessageBox(strName);
pItem.Release();
}

Second code.


void __stdcall COutHMail::OnBeforeCheckNames(BOOL* Cancel)
{
LPDISPATCH pDisp = NULL;
pDisp = m_pApp->ActiveInspector();

CComQIPtr<Outlook::_Inspector> pInsp(pDisp);

pDisp->Release();
pDisp = NULL;

pDisp = pInsp->GetCurrentItem();

CComQIPtr <Outlook::_MailItem> pItem(pDisp);

pDisp->Release();
pDisp=NULL;

CComQIPtr <Outlook::Recipients> pRecips =
pItem->GetRecipients();

long lCount = pRecips->GetCount();

for(long for_count = 0; for_count < lCount; for_count++)
{
CComVariant pVal(for_count+1);
CComPtr<Outlook::Recipient> pRecip =
pRecips->Item(pVal);

CString strName = pRecip->GetName();
::AfxMessageBox(strName);
}
pItem.Release();
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top