Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17


How do I send email from Foxpro 9 in windows 7 Pro 64 bit (outlook is installed)

Posted on 2015-01-23
Medium Priority
Last Modified: 2015-01-29
I have a FOXPRO/CDO snippet that works perfectly fine on xp pro as long as the windows component SMTP mail service is installed, but fails with a sendusing configuration not valid in windows 7 pro 64 bit. I looked at the net for solutions, but there was a lot of contradictory postings. I think the reason its not working is that CDOSYS.DLL doesn't work if Outlook 2007 or higher is installed on the workstation. I do have an ASP object called SMTP that shows up under IIS manager.

So has anybody sent email from VFP in a different way ? E.g by calling .net routines?
Any comments about does this work using RDO (redemption) or WestWind)
Question by:Peter Heinicke
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
LVL 30

Accepted Solution

Olaf Doschke earned 1200 total points
ID: 40568004
I already answered your private message about this, but it's good you ask public, you may get other answers.

For mails I used Outlook.Application automation and BLAT, way back I got CDO code working, too, but don't use it productive. Googling a bit here's an overview what products install CDO:
It has your problem of using Outlook 2007 mentioned, too. Maybe follow the link to

There are very many ways to mail and they are all listed in the foxpro wiki and Craig Boyd also made extensive blog article about it. There also is a solution without any requirements posted in Atoutfox, but not speaking french, I don't find it. AFAIK it was very low level code and still depended on winsock.

Bye, Olaf.
LVL 43

Assisted Solution

pcelba earned 800 total points
ID: 40568114
CDO should be everywhere independently on Outlook version. I works for me on W7/64 with Office 2010 installed. It also works under other OS configurations. I did not find a configuration under which it could fail...

The code to send a message with ZIP attachment is following:
PROCEDURE SendDataTransfer
LPARAMETERS lcDestination, lcSender, lcSMTP, lcUser, lcPwd, lcZIPFile, lcError

*Updated from

LOCAL cdoSendUsingPickup, cdoSendUsingPort, cdoAnonymous, cdoBasic, cdoNTLM, objMessage, llSuccess

LOCAL loEx AS Exception

cdoSendUsingPickup = 1 &&Send message using the local SMTP service pickup directory. 
cdoSendUsingPort = 2 &&Send the message using the network (SMTP over the network). 

cdoAnonymous = 0 &&Do not authenticate
cdoBasic = 1 &&basic (clear-text) authentication
cdoNTLM = 2 &&NTLM

objMessage = CreateObject("CDO.Message") 
objMessage.Subject = "Testing e-mail " + TTOC(DATETIME())
objMessage.From = lcSender
objMessage.To = lcDestination 
objMessage.TextBody = "This is some sample message text.." + CHR(13) + CHR(10) + ;
            "It was sent using SMTP authentication."

*==This section provides the configuration information for the remote SMTP server.

objMessage.Configuration.Fields.Item("") = 2 

*Name or IP of Remote SMTP Server
objMessage.Configuration.Fields.Item("") = lcSMTP

*Type of authentication, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item("") = cdoBasic

*Your UserID on the SMTP server
objMessage.Configuration.Fields.Item("") = lcUser

*Your password on the SMTP server
objMessage.Configuration.Fields.Item("") = lcPwd

*Server port (typically 25)
objMessage.Configuration.Fields.Item("") = 25 

*Use SSL for the connection (False or True)
objMessage.Configuration.Fields.Item("") = .F.

*Connection Timeout in seconds (the maximum time CDO will try to establish a connection to the SMTP server)
objMessage.Configuration.Fields.Item("") = 60


*==End remote SMTP server configuration section==


llSuccess = .T.

  lcError = TRANSFORM(loExc.ErrorNo) + " " + loExc.Message

RELEASE objMessage

RETURN llSuccess

Open in new window

Calling sample:
lcErrorMsg = ''
IF SendDataTransfer("", "", ;
"", "username", "password", "d:\path\", @lcError)
  *-- Success
  *-- Error
  WAIT WINDOW "Error: " + m.lcError

Open in new window

Note that the code uses clear text authentication. Other ways would need some additional testing.

Expert Comment

ID: 40568190
I started using a VFP library called VFPEXMAPI.FLL when I ran into problems with different versions of Outlook, and have been using it ever since.  You can read about it here:
U.S. Department of Agriculture and Acronis Access

With the new era of mobile computing, smartphones and tablets, wireless communications and cloud services, the USDA sought to take advantage of a mobilized workforce and the blurring lines between personal and corporate computing resources.

LVL 30

Expert Comment

by:Olaf Doschke
ID: 40568222
The KB article I posted earlier was last reviewed 2011, but it suggests CDO is no system component and only comes with other software. Also it says CDO does not come with Office 2007. So there can be situations you don't find it installed on a system. The link I quoted will give you an installation.

Anyway, I find Outlook automation quite simple and as you have it, why not use it?

#DEFINE olMailItem   0
loOutlook   = CREATEOBJECT('Outlook.Application')
loMail = loOutlook.CreateItem( olMailItem )
loMail.To = ""
loMail.Subject="the subject"
loMail.Body ="This is the mail text" && also see HTMLBody and RTFBody and Bodyformat
loMail.Send() && or loMail.Display()

Open in new window

SMPT server, pass, etc. is configured in OL, this is using the main OL account, if you want to send from one of many accounts, you need to logon to the MAPI namespace, but for my purposes this is totally sufficient. For Attachments loMail has an Attachment collection, of course starting empty. Use loMail.Attachments.Add(). You also have CC, BCC, Importance, etc.

If there wasn't the safety requirements at some corporations, you could use this everywhere Outlook is used. As you have that under your control it's easy enough to allow your own applications to automate outlook without any variant of Redemption, by configuring the Outlook behaviour for programmatic usage in it's security center options.

Bye, Olaf.
LVL 30

Expert Comment

by:Olaf Doschke
ID: 40569284
Just a remark: EE seems faster than ever in marking questions as neglected. As far as I found this is already done after 12 hours with no expert response. The question has answers, makes me wonder a bit.

And a test: We'll see, if a fresh post changes the question status again.

Bye, Olaf.

Expert Comment

ID: 40569789
I used to use Outlook automation as described by Olaf and it was simple to implement.  However, as I recall, we ran into difficulties with the CREATEOBJECT method when Outlook was updated, and I think there may have been other issues, too.  That's why I switched to VFPEXMAPI.FLL.  It doesn't seem tp care which version of Outlook is installed.
LVL 30

Expert Comment

by:Olaf Doschke
ID: 40570041

you will only have problems with outlook security and/or with outlook not installed as desktop application, but using the Webapps of Office 365. That's all.

Outlook security can be configured, if you're not limited by group policies or that setting is handled by an exchange server.

Office 2007 surely isn't a problem, I can also still automate Outlook 2013 in the same manner, as I have both the Cloud Office365 and local installations. Configuring desktop outlook with the office 365 exchange server, all my Mails are in both local pst file and in the cloud, outlook is automatable and I can make use of all cloud advantages.

Bye, Olaf.

Author Closing Comment

by:Peter Heinicke
ID: 40578174
Key thing to note is that there are a multitude of ways to do this, you don't have to buy westwind just for this purpose.

Featured Post

Create CentOS 7 Newton Packstack Running Keystone

A bug was filed against RDO for the installation of Keystone v3. This guide is designed to walk you through the configuration for using Keystone v3 with Packstack. You will accomplish this using various repos and the Answers file.

Question has a verified solution.

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

When you start your Windows 10 PC and got an "Operating system not found" error or just saw  "Auto repair for startup" or a blinking cursor with black screen. A loop for Auto repair will start but fix nothing.  You will be panic as there are no back…
The Windows functions GetTickCount and timeGetTime retrieve the number of milliseconds since the system was started. However, the value is stored in a DWORD, which means that it wraps around to zero every 49.7 days. This article shows how to solve t…
The Task Scheduler is a powerful tool that is built into Windows. It allows you to schedule tasks (actions) on a recurring basis, such as hourly, daily, weekly, monthly, at log on, at startup, on idle, etc. This video Micro Tutorial is a brief intro…
Want to learn how to record your desktop screen without having to use an outside camera. Click on this video and learn how to use the cool google extension called "Screencastify"! Step 1: Open a new google tab Step 2: Go to the left hand upper corn…

722 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