MSMAPI email

Posted on 2013-06-10
Last Modified: 2013-10-23
I have a VFP 9 exe application with an msmapi activex control.

When the user sends an email it fails intermittently with a message that the target email is not in the address book, even though the target email address is recorded in outlook.
Question by:TomPreen
LVL 29

Expert Comment

by:Olaf Doschke
ID: 39234016
Could you show your code?

A target mail address doesn't need to be in the address book, unless you only specify the name of the recipient, which outlook then looks up in an address book, but maybe not in the one you think of. If you specify the mail address, Outlook should not need to do so.

Bye, Olaf.
LVL 29

Expert Comment

by:Olaf Doschke
ID: 39234025
more concrete: instead of using RecipDisplayName and ResolveName() rather use RecipAddress

Bye, Olaf.

Author Comment

ID: 39234152
I am specifying the email address the problem is it fails to send and errors with a message that the email address does not exist.

Are you saying that if I do not code ResolvName() then it will send regardless of an entry in the address book?
LVL 41

Expert Comment

ID: 39234211
If you will use CDO mail (described e.g. here: or here: you'll never have problems with Outlook Addressbook...

CDO mail is easy and reliable.
LVL 12

Expert Comment

ID: 39234759
an email it fails intermittently
errors with a message that the email address does not exist.

Are you 100% certain that you are always attempting a legitimate email address?

I have clients who repeatedly make typo mistakes entering their client's email addresses or their client themselves provide invalid email address syntax (such as leave off the .COM, put spaces into the address, use commas instead of periods, etc.) and it will result in a similar email error message from Outlook when encountered.

Good Luck
3 Use Cases for Connected Systems

Our Dev teams are like yours. They’re continually cranking out code for new features/bugs fixes, testing, deploying, testing some more, responding to production monitoring events and more. It’s complex. So, we thought you’d like to see what’s working for us.

LVL 29

Expert Comment

by:Olaf Doschke
ID: 39235112
Again: Could you show your code?
Or do you not have it, are you just the user of an EXE?

I only guess you are the developer and have found the code in Craig S. Boyd's Blog article about Mailing with VFP via MAPI. That code uses the name resolving feature of MAPI. If your software does that, you rather specify the normal name of a person, eg "firstname lastname" and name resolving finds the mail adress. Specifying a mail address in the first place then is wrong, as a mail adress isn't the display name of a address book entry.

In development terms: You need to call the ResolveName() method of the MAPI.Message object, if Outlook (or other MAPI mail clients) should resolve the mail adress from the name you specify in RecipDisplayName, but only then. And specifying something unknonw as display name would cause the error you experience.

If you specify RecipAddress instead of RecipDisplayName, you don't have to resolve the mail adress, as you specify it in the first place, RecipAddress is the propery of a MAPI Message, which is set by ResolveName(), but if you specify it, you don't depend on name resolving. This is what most users of a mail software or a mail feature of an application do, entering the mail address. But that is not what works with Craig's sample code.

If you're the programmer:
You have a ton of different possibilities to send mails in a VFP application. As you want to support Outlook, I'd rather automate Outlook.Application than anything else.

MAPI is only good, to support many MAPI compliant mail clients, but it's much easier to send mails via SMTP directly. Using CDO would go in that direction.

Google VFP Mail and you'll find many possible solutions. This won't help you of course, if you're just a user, but then you're halfways wrong here in this section, we only can make guesses about what your EXE really does and why it errors with that message.

The only thing you can try is enter the display name into the application, the name Outlook displays for the recipient, rather than the mail address.

Bye, Olaf.

Author Comment

ID: 39235466
Here is the code.

Tcto is a fixed entry from a parameter table. The same email address is always used.

LPARAMETERS tcTo, tcSubject, tcBody, tfile
LOCAL llreturn

IF Thisformset.FrmEmail.TMCsession.SessionID > 0
     WITH THisformset.FrmEmail.TMCSEND
      .Sessionid = Thisformset.FrmEmail.TMCsession.SessionID
      .RecipDisplayName = tcTo
      .RecipType = 1
      .MsgSubject = tcSubject
      .MsgNoteText = tcBody
      .AttachmentIndex = .AttachmentCount
      .AttachmentName = "sltran.csv"
      .AttachmentPosition = .AttachmentIndex
      .AttachmentPathName = tfile
      .SEND(.T.) && send in .T. to not send email automatically but instead see it in outlook
      llreturn = .t.
    CATCH TO oerr
    llreturn = .f.
    =MESSAGEBOX("Error No "+STR(oerr.errorno,4,0)+" "+oerr.message)
   return llreturn

 =MESSAGEBOX("Cannot access mailbox")
RETURN llreturn
LVL 29

Expert Comment

by:Olaf Doschke
ID: 39235735
Well, yes, that's a shortened version of what you find at,guid,8f569366-c76a-4873-9029-f31c07cf125e.aspx

Your error says the  .ResolveName() method fails finding the recipient you set via tcTo, so double check your value, you may also need to login to a certain user account instead of the default.

How about rather using,guid,fb9e9267-3642-4176-94ea-9239691b61fa.aspx

Bye, Olaf.

Author Comment

ID: 39236922
I am not the end user. This code is part of an application that sends information to the target email once a month so I do not have control over the parameter setting for tcto but the client assures me that it is a valid email address they use regularly.

Normally for automated email I use SMTP where the server is held in a parameter and the email client is bypassed but this would not work on their system as email is routed through yahoo.

Having looked at the MSDN description for resolvename() I can see why failure is possible so I will recode to use RecipAddress for target email.
LVL 29

Accepted Solution

Olaf Doschke earned 500 total points
ID: 39278645
I fear what I said about RecipAddress does not work. I'll second pavel in that other methods to send mail from VFP are easier and don't depend on an addressbook entry.

For options look into

Bye, Olaf.

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Using UDFs in grids 3 232
How VFP9 apps runs under Windows 8 64 bits? 6 500
export vfp file to csv WITHOUT field names 2 535
Templates to migrate from vfp to WPF 7 107
Microsoft Visual FoxPro (short VFP) is a programming language with it’s own IDE and database, ranking somewhat between Access and VB.NET + SQL Server (Express). Product Description: (http://msd…
Knowledge base software has turned out to be a quite reliable method for storing information, promoting collaborative work and for sharing valuable input and solutions.However, some organizations are trying to develop a knowledge base that works wit…
This Micro Tutorial hows how you can integrate  Mac OSX to a Windows Active Directory Domain. Apple has made it easy to allow users to bind their macs to a windows domain with relative ease. The following video show how to bind OSX Mavericks to …
This Micro Tutorial demonstrates using Microsoft Excel pivot tables, how to reverse engineer competitors' marketing strategies through backlinks.

920 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

14 Experts available now in Live!

Get 1:1 Help Now