答案:
是否可以在VFP写的程序中实现E-MAIL的发送功能,大致的代码是如何实现的,谢谢!!
PS:我用的是VFP6
---------------------------------------------------------------
在VFP中发送电子邮件
* 声明ShellExecute函数
DECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,;
STRING lpszOP, ;
STRING lpszFile, ;
STRING lpszParams, ;
STRING lpszDir, ;
INTEGER fsshowcmd
* 声明GetDesktopWindow函数,该函数激活Windows桌面
DECLARE INTEGER GetDesktopWindow IN win32api
* 指定从Windows桌面上运行ShellExecute函数
HWND = GetDesktopWindow()
lpszOP = ""
* 指定ShellExecute操作的文件为mailto: qyjohn@letterbox.com
lpszFile = "mailto: qyjohn@letterbox.com"
lpszParams = ""
* 指定ShellExecute的缺省目录为C:\
lpszDir = "C:\"
fsshowcmd = 1
* 执行ShellExecute命令
LNRETURN = ShellExecute(HWND, lpszOP, lpszFile, lpszParams, lpszDir,fsshowcmd)
*-------------------------------------------
DECLARE INTEGER ShellExecute IN shell32.DLL ;
INTEGER hndWin, STRING cAction, STRING cFileName,;
STRING cParams, STRING cDir, INTEGER nShowWin
M.EMAIL='SUNYA@126.com'
LcMail="mailto:"+M.EMAIL+"?Subject=請購單確認,請簽核"+"&Body="+;
"您好!";
+CHR(10)+CHR(13)+" PQ2006300158:"+'未確認,請及時確認並簽核,謝謝!!';
+CHR(10)+CHR(13)+' '+'王小虎';
+CHR(10)+CHR(13)+' '+DTOC(DATE())
ShellExecute(0,"open",LcMail,"","",1)
------------------------------------------------
文章出处:http://www.vfptop.com/bcxjylist.asp?id=55
如何用VFP发送带附件的电子邮件
*---------------------------------
Doug Hennig提供一个可用于从应用程序中发送 e-mail 的类. 它组合两个 MAPI ActiveX 控件到一个易于使用的类中.
在今天,许多许多用户希望能在他们的应用程序中发送 e-mail. 例如, 典型的商业应用程序中的客户表单中可能有一字段用于保存客户的 e-mail 地址. 在这样的应用程序中,没有一种快速的、不需要切换到 Outlook Express 并复制和粘贴它们的 e-mail 地址的方法(如表单或工具栏上的按钮或菜单项) 来发送一个 e-mail 给客户是一种羞耻. 双倍的羞耻是由于 添加该功能到 VFP 应用程序是如此容易. 本文探讨一些可用于从你的应用程序中发送 e-mail 的一些类.
MAPI ActiveX controls
要使用应用程序可以发送 e-mail 的最简单的方法是使用 VFP 自带的MAPI ActiveX 控件. 有两个相关控件, 都在文件 MSMAPI32.OCX 中: MAPIMessages 和 MAPISession. 这些控件一起工作-MAPISession 控件负责管理由件会话期, MAPIMessages 控件用于发送和接收信息. 两个控件都是非可视的. 你可以将它们拖放到表单中或用代码 CREATEOBJECT 来实例它们(这些控件的ProgIDs 是 MSMAPI.MAPIMessages 和 MSMAPI.MAPISession).
这些控件的属性, 事件和方法 (PEM) 在帮助文件 MAPI98.CHM 中描述(位于我的系统中的 \WINDOWS\HELP 目录). 代替描述如何使用这些控件, 我们将探讨一个我创建的组合两个控件到一个易于使用的对象的容器类. 我们将明白ActiveX 的 PEM 是如何用于我们正在探讨的类的代码中的. 另外, 虽然这些控件可以发送和接收邮件, 本文将只着重于发送信息.
SFMAPI
为了隐藏两个控件的复杂的处理, 我创建了 SFMAPI 类 (在 SFMAPI.VCX 中). SFMAPI 是基于 SFContainer 容器类的, 我们的容器基类在 SFCTRLS.VCX 中定义. 它包括一个 MAPIMessages 控件 (名为 oMAPIMessage 在 SFMAPI 中) 和一个 MAPISession 控件 (oMAPISession). 我设置容器的 Visible 属性为 .F. (由于它是一个在运行时非可视的控件) 并添加了一系列的属性: aAttachments, 一个用于保存与信息相关的文件名的受保护的数组; aRecipients, 一个收件人信息的受保护的数组; cMessage, 要发送的信息体; cSubject, 信息主题; lLoggedIn, 一个受保护的属性,如果成功登录到 MAPI 则它的值为.T.; 以及 lSignoffAfterSend, 若为 .T. 意味着 SFMAPI 将在发送完信息后中止联接 MAPI 会话期.
要用 SFMAPI 发送一条信息, 用调用 NewMessage 方法开始. 该信息简单地初始化 aRecipents 和 aAttachments 为单纯的空的入口; 它只在你以前用该对象发送过信息才真正地需要. 其次, 为每一个接受者调用 AddRecipient 方法一次, 传递 e-mail 地址和可选的接受者名字和类别 (1是主要接受者, 2是复制接受者, 3是 blind 复制接受者). 该方法在确信 aRecipients 数组是可用的后, 添加传递的信息到 aRecipients 数组:
lparameters tcAddress, ;
tcName, ;
tnType
local lcName, ;
lnType, ;
lnCount
assert vartype(tcAddress) = 'C' and ;
not empty(tcAddress) ;
message 'Invalid address specified'
lcName = iif(type('tcName') <> 'C' or empty(tcName), ;
tcAddress, tcName)
lnType = iif(type('tnType') <> 'N' or ;
not between(tnType, 1, 3), 1, tnType)
with This
lnCount = iif(empty(.aRecipients[1, 1]), 1, ;
alen(.aRecipients, 1) + 1)
dimension .aRecipients[lnCount, alen(.aRecipients, 2)]
.aRecipients[lnCount, 1] = lcName
.aRecipients[lnCount, 2] = tcAddress
.aRecipients[lnCount, 3] = lnType
endwith
如果信息有任何附件, 调用 AddAttachment 方法, 它与 AddRecipient 类似但添加指定的文件名到 aAttachments 数组.
最后, 设置 cSubject 属性为信息主题, 设置 cMessage 为信息体, 并调用 Send 方法. 如果想显示对话框传递 .T.. 注意当从 VFP 5 中调用该方法时,你必须这样做,以避免一个 "不可用的调用" 错 (在 VFP 6 中不会出现该错误).
我们将探讨一下 Send 方法的代码. 它开始时确保至少有一个接收者, 然后,如果还没有登录到 MAPI则调用 SignOn 方法 (我们马上就要看到). 如果失败, Send 返回 .F.
lparameters tlDisplayDialog
local lnI
with This
* 确信至少有一个接收者