Solved

Send attachment without MAPI controls

Posted on 1998-05-10
4
219 Views
Last Modified: 2012-06-21
I am doing this in Access 97.  I am attempting to send and receive MAPI messages with attached files and cannot get SIMPLE MAPI go do it.  I believe SIMPLE MAPI cannot.  I have tried with the msmapi32.ocx control but cannot get this to distribute to the client PC so I have given up.

Is there any other method of using attachments in MAPI without the msmapi32.ocx control.  Also, my cilents are using Exchange and not Outlook so I don't think Outlook Automation will work.

Thanks,
Ken

Bonus Question: How can I find out the default MAPI profile for a use so that I don't need to ask them the first time they use the application?  It must be possible since forcing the profile dialog to appear has the default profile as the default selection in the dialog's combo box.

Thanks
0
Comment
Question by:kfenske
  • 2
  • 2
4 Comments
 
LVL 4

Expert Comment

by:zsi
Comment Utility
kfenske,

Regarding the OCX issue.  I noticed that you made another post about difficulties that you are experiencing in distributing your application.  Once you have resolved that problem, you will find that the msmapi32.ocx problem should go away.

There are alternatives to using msmapi.  In addition to third-party controls (such as Quiksoft's EasyMail, et. al.), you can program directly to the MAPI API layer.  However, I don't recommend it.  It takes a lot of work, is not well documented, and I am not even sure if you can do it directly from Access.  The OCX is there for a reason :)


You can determine the default MAPI profile by reading the registry.  
In NT, this information is found at HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\DefaultProfile"

In 95, it's at HKEY_CURRENT_USER\Software\Microsoft\Windows Messaging Subsystem\Profiles\DefaultProfile"

Hope this helps!

zsi
0
 

Author Comment

by:kfenske
Comment Utility
I have two questions concerning your helpful answer:
1. Do you know if there might be a licensing issue I'm running into?  I once got a message to that effect during testing but can't find any info on a file or registry entry to add for the license.

2. Thanks for the profile info, could you tell me how to read the registry from Access Basic?

Thanks,
Ken
0
 
LVL 4

Accepted Solution

by:
zsi earned 100 total points
Comment Utility
I'm not sure what might be causing the license problem.  It only came up once, you say?

As for the registry, Access 97 Basic is actually a subset of Visual Basic.  Therefore, the following code should work.  You might have to play with it a little to get it to work in Access...

Put the following code in its own code module:
------------------------------------------------------------------
Option Explicit


Private Declare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegQueryValueExStr Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, ByVal lpData As String, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As Long
Private Declare Function RegDeleteValue Lib "advapi32.dll" Alias "RegDeleteValueA" (ByVal hKey As Long, ByVal lpValueName As String) As Long
Private Declare Function RegSetValueExStr Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As String, ByVal cbData As Long) As Long
Private Declare Function RegFlushKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Const HKEY_CURRENT_USER = &H80000001
Private Const HKEY_LOCAL_MACHINE = &H80000002
Private Const REG_SZ = 1
Private Const ERROR_SUCCESS = 0&
Function GetRegValue(lRoot As Long, sKey As String, sEntry As String) As String
   
   Dim Ret As Long
   Dim hKey As Long
   Dim KeyName As String
   Dim Ret2 As Long
   Dim I As Integer
   Dim sValue As String
   Dim l As Long
   
   
   sValue = Space(256)
   Ret = RegOpenKey(lRoot, sKey, hKey)
   
   If Ret = ERROR_SUCCESS Then
      l = 256
     
      Ret2 = RegQueryValueExStr(hKey, sEntry, 0&, REG_SZ, sValue, l)
     
      If Ret2 = ERROR_SUCCESS Then
         If l > 0 Then  ' if it's more than just a null
            GetRegValue = Left(sValue, l - 1)
         End If
      End If
     
      Ret = RegCloseKey(hKey)
   
   End If
   
End Function


--------------------------
To get the registry value, invoke this command

DefProf = GetRegValue(HKEY_CURRENT_USER, "Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles", "DefaultProfile")

This example is for WinNT.  For Win95, just use the line

DefProf = GetRegValue(HKEY_CURRENT_USER, "Software\Microsoft\Windows Messaging Subsystem\Profiles", "DefaultProfile")

0
 

Author Comment

by:kfenske
Comment Utility
I think I figured out the problem with licensing.  It seems that I had copied the mapisession and mapimessage objects from my VB app to the Access app.  While this worked fine on my machine it did not work on the client.  When I recreated the objects directly in Access it seems to have fixed the problem.

Thanks for the great answer on the registry!

Ken
0

Featured Post

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

The debugging module of the VB 6 IDE can be accessed by way of the Debug menu item. That menu item can normally be found in the IDE's main menu line as shown in this picture.   There is also a companion Debug Toolbar that looks like the followin…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…

772 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now