vbMAPI Outlook Security Evader
(v1.3.9)
Tips for VB.NET
On this page you'll find:
Overview
vbMAPI is now also supported on the VB.NET platform (Windows Forms only - not ASP.NET). vbMAPI provides support for both 32-bit (x86) and 64-bit (x64) builds of your VB.NET application.
Support is provided through using COM Interop to access our Virtual-COM objects, thereby avoiding the need to distribute any DLLs to your end-users.
How to install
vbMAPI for VB.NET is provided as a single source file: vbMAPI.vb
This file is installed automatically by our vbMAPI installer and can be found in your folder:
%program files%\EverythingAccess.com\vbMAPI\VB.NET
Note: On 64 bit operating systems, vbMAPI is installed to the 32-bit version of your Program Files folder (usually called 'Program Files (x86)'). The single vbMAPI.vb file provides all the functionality (both 32 bit and 64 bit versions) in one single source file.
Limitations
At the moment, vbMAPI is not thread-safe and therefore you will run into problems if you try to access vbMAPI objects across multiple .NET threads. This is being addressed in a future revision (due by end September 2010).
If you really need multi-threaded support, then create a completely seperate instance of vbMAPI in each thread using the following snippet:
Dim InitInstance As New _vbMAPI_Init
Dim Session As vbMAPI_Session
Session = InitInstance.NewSession()
But be careful not to share any vbMAPI objects across threads.
Adding vbMAPI to your VB.NET project
To add vbMAPI to your VB.NET application, open the project in Visual Studio and go to the "Project" > "Add Exisiting Item" menu option. Now, navigate to your %program files%\EverythingAccess.com\vbMAPI\VB.NET folder and select the vbMAPI.vb source file. The file will now be imported into your project.
Tip: when updating the vbMAPI source module, follow the same procedure as above.
Important: Before you begin!
vbMAPI supports running in both 32 bit and 64 bit modes, which is automatically determined based on the CPU setting of your VB.NET application.
- If your CPU setting is AnyCPU, then running your application on an x86 system causes the application to run in 32 bit mode.
- If your CPU setting is AnyCPU, then running your application on an x64 system causes the application to run in 64 bit mode.
Now, here is the important info:.
If vbMAPI is running in 64-bit mode, then your MAPI software also needs to run in 64-bit. Currently the only 64-bit MAPI client is Outlook 2010 64-bit edition. If you want to target both 32 bit and 64 bit MAPI clients, then you should offer two seperate builds of your application (not setting AnyCPU in your project build configuration).
More commonly, you will just want to support 32-bit MAPI clients (since there is only one 64 bit MAPI client to-date), therefore in most circumstances you need to set your project configuration to target the x86 platform ONLY.
Using vbMAPI in VB.NET
Now that you have imported the vbMAPI source module into your project, you can now use vbMAPI in the same way as the VBA/VB6 version. To get you started, add a button to your form and add the following code:
Dim Session As vbMAPI_Session
Dim Store As vbMAPI_Store
Dim Folder As vbMAPI_Folder
Dim FolderItems As vbMAPI_FolderItems
Dim Item As vbMAPI_MailItem
Session = vbMAPI_Init.NewSession
Session.LogOn()
Store = Session.Stores.DefaultStore
Folder = Store.GetDefaultFolder(EnumDefaultFolderType.FolderType_Drafts)
FolderItems = Folder.Items
Item = FolderItems.Add
Item.To_ = "some_email_address@mail.com"
Item.Subject = "Some Subject"
Item.HTMLBody.Value = "<b>HTML message here...</b>"
Item.Send() For more examples, see the general documentation: QuickStart: The Basics
Differences to the VB6 / VBA version
The only differences are between the languages themselves. For example, there are two main differences that you need to be aware of if copying any of the examples from this manual:
- Enumerations need to be preceeded by the enumeration name (see the example on this page compared to on the QuickStart: The Basics page.
- Not all default members are set in the VB.NET version due to the language only allowing default members for collections. For example, in the above example you will note that we had to use Item.HTMLBody.Value - this is due to the Value property not being allowed to be a default member in VB.NET