Wie sind Sicherheitseingabeaufforderung in Microsoft Visual Basic Programmen für Microsoft Outlook zu vermeiden
Einleitung für MAPI
Wir beabsichtigen nicht eine komplette Beschreibung der MAPI Architektur oder ihre Anwendung Momente zu geben (der Benutzer kann diese Information aus vielen anderen Quellen, einschließlich MSDN einholen). Wir konzentrieren uns lieber auf die praktischen Verfahren der MAPI Anwendung, soviel der Inhalt des Artikels erlaubt.
Um die MAPI Merkmale zu entdecken, benutzen wir das ins OutlookSpy ergänzte Probeversion-Programm, zugänglich unter dimastr.com. Zusätzliche Einbaueinheit installieren und danach bekommen Sie eine wunderbare Möglichkeit sowohl das Objektmodell als von Outlook und den CDO-Satz zu entdecken.
Meldung öffnen; Schaltfläche CurrentItem an der OutlookSpy Werkzeugtafel klicken, dann kommt das MailItem Objekt, das die Meldung im OOM repräsentiert. Das Merkmal MAPIOBJECT finden, klicken und dann Schaltfläche Browse betätigen — dabei wird das IMessage Interface des entsprechenden MAPI Objekts durch OutlookSpy angezeigt
Mit dem IMessageInterface sind die nachstehenden Verfahren zugänglich:
GetAttachmentTable |
Zurück zur Zubehörtabelle der Meldung. |
OpenAttach |
Zubehör öffnen. |
CreateAttach |
Neues Zubehör hervorrufen. |
DeleteAttach |
Zubehör entfernen. |
GetRecipientTable |
Zurück zur Empfängerstabelle der Meldung. |
ModifyRecipients |
Empfänger der Meldung hinzufügen, entfernen oder ändern. |
SubmitMessage |
Alle Änderungen in der Meldung werden gespeichert mit Markierung zum Senden. |
SetReadFlag |
Wertzuweisung oder Löschen von MSGFLAG_READ flag im PR_MESSAGE_FLAGSMerkmal und Steuerung beim Senden der abgelesenen Berichte. |
|
Actually, a message is presented to us in MAPI as a table of
attachments, a table of recipients, and a set of properties. The list of
the object properties can be obtained by invoking
IMAPIProp::GetPropList, and the properties themselves through
IMAPIProp::GetProps. What we see on the "GetProps" tab of the
OutlookSpy is the outcome of the two functions performance.
Let's get a closer look at the PR_SENDER_EMAIL_ADDRESS
property which has been already mentioned above. Tag
PR_SENDER_EMAIL_ADDRESS corresponds to the hexadecimal
&H0C1F001E, where the lower part &H001E is the type of property
PT_STRING8, which is a standard ANSI-string. Visual Studio is
supplied with files MAPIDEFS.H and MAPITAGS.H, the first containing
property type declarations, and the second containing declarations of
the properties themselves. The two files are also available in Microsoft
Platform SDK.
However, some features cannot be accessed through invoking
IMAPIProp::GetProps. Values of such properties as
PR_BODY (message body) may be pretty great, so upon invocation
of the function error code MAPI_E_NOT_ENOUGH_MEMORY will be
returned. To get values of such properties, IMAPIProp::OpenProperty
method, which opens a property as a stream (IStream), is used.
Besides, there are some properties that contain values in
compressed form, e.g., PR_RTF_COMPRESSED, which contains compressed
message body in the RTF format. When such property is being read
with IMAPIProp::OpenProperty, the value will be loaded "as is".
To get the data in the RTF format, use the MAPI
WrapCompressedRTFStream function to read the stream.
Well, now we know enough about object properties to get sender
address or message body without warnings of the security system.
Of course, if we also have learned how to operate MAPI from Visual Basic.
Visual Basic software developers can access MAPI properties
of an object through CDO via the collection Fields. ID field of a Field
object is nothing else but MAPI-property tag. With OutlookSpy, having
accessed a message through CDO, you can switch to the Script tab and
run the following Jscript code:
for (a = 1; a <= Fields.Count; a++)
{
Debug.Print(a + " " + Fields.Item(a).ID + " " + Fields.Item(a).Name);
Debug.Print(Fields.Item(a).Value);
Debug.Print("==================================");
}
This code will print all the object properties your saw while
exploring the IMessage interface and which could be obtained
through IMAPIProp::GetProps. However, execution of this code will
result in security system warnings.
|