在VFP中利用API实现批量邮件发送
?牐犈坑始⑺捅淼ィㄈ鏭31020503a^)包含四个命令按钮(“选择包含邮件表”、“确认邮件列表”、“转到邮件处理器”、“退出”),两个标签,一个下拉组合框,一个编辑框,一个文本框(与下拉组合框重合)。处理的流程是这样的:程序先检测是否有打开的表,如果有,就不提示,没有就提示目前没有打开的表,可以单击“选择包含邮件表”,选择一个数据表打开。以后就可以从下拉组合框中选择包含邮件地址的字段,然后单击“确认邮件列表”,筛选符合条件的邮件地址,这些邮件地址会出现在编辑框里面。如果想删除或添加邮件地址,就可以在编辑框中进行。接下来单击“转到邮件处理器”,则这些电子邮件地址会被系统默认的邮件接受和发送程序如Foxmail、Outlook等程序接受作为“收件人”,并且出现邮件编辑窗口,在编辑窗口就可以方便地写信啦!下面依次说明核心代码。
?牐牎把≡癜始怼钡氖蟊甑セ魇录耄?
?牐爉.cfilename2 = getfile(“dbf”) &&显示文件打开选择窗口,选择一个dbf文件
?牐爄f file(m.cfilename2)= .t.
?牐爑se &cfilename2 exclusive &&以独占方式打开表
?牐爀lse
?牐爎eturn
?牐爀ndif
?牐爐hisform.cbomailziduan.RowSourceType = 8 &&确定数据源类型为表结构
?牐爐hisform.cbomailziduan. RowSource = cfilename2 &&确定数据源名称
?牐犗吕楹峡騝bomailziduan的鼠标单击事件代码:
?牐爐hisform.txtmailziduan.value = thisform.cbomailziduan.value
?牐牎叭啡嫌始斜怼? 的鼠标单击事件代码:
?牐爄f dbf(1)==''
?牐爄f messagebox(“没有打开的表,请选择包含邮件表重试!”,64,“邮件处理”)=1
?牐爎eturn
?牐爀ndif
?牐爀ndif
?牐燿o form frm查找 &&利用vfp本身提供的一个查找类构造一个查找表单。符合条件的记录将被下面的程序利用。
?牐燽rowse nomenu noedit nodelete &&显示符合条件的记录
?牐爉.lcemail=upper(alltrim(thisform.txtmailziduan.value))&&获取电子邮件字段名称
?牐爉.lmailok = .f.
?牐?&&检查字段是否存在。
?牐爁or i =1 to fcount?煟?
?牐爄f m.lcemail <> field(i)??
?牐爀lse
?牐爉.lmailok = .t.
?牐爀xit
?牐爀ndif
?牐爀ndfor
?牐爄f m.lmailok == .f.
?牐爄f messagebox(“表中不存在该字段,请修改字段名重试!”,64,“邮件处理”)=1
?牐爎eturn
?牐爀ndif
?牐爀ndif
?牐?&&在下面的程序段中,将把符合条件的数据输出到一个文本文件。再把文本内容读入edtmaillist编辑框供编辑修改。
?牐爄f file(“maillist.txt”)= .t.
?牐燿elete file maillist.txt &&如果临时文件已经存在,则先删除。
?牐爀ndif
?牐燙OPY TO maillist FIELDS &lcemail TYPE DELIMITED WITH blank
?牐燞andlemail = fopen(“maillist.txt”)
?牐爉.cmail=''
?牐?&&读取邮件地址的程序段。
?牐燿o while .not. feof(handlemail)
?牐爉.cmail = alltrim(fgets(handlemail))+','+m.cmail
?牐爀nddo
?牐爐hisform.edtmaillist.value = m.cmail
?牐爁close(handlemail)
?牐爄f file(“maillist.txt”)= .t.
?牐燿elete file maillist.txt
?牐爀ndif
?牐爎eturn
?牐牎白接始?理器” 的鼠标单击事件代码:
?牐爔gjfileopen(“mailto:” + thisform.edtmaillist.value)
?牐爎eturn
?牐牨淼サ腶ctivate事件代码:
?牐燬ET PROCEDURE TO XGJUDF
?牐爄f dbf(1)==''
?牐爄f messagebox(“没有打开的表,请选择包含邮件表重试!”,64,“邮件处理”)=1
?牐爎eturn
?牐爀ndif
?牐爀ndif
?牐爐hisform.cbomailziduan.RowSourceType = 8 &&指定下拉组合框的数据源类型。
?牐爐hisform.cbomailziduan.RowSource = alias(1) &&指定下拉组合框的数据源。
?牐爔gjudf中的xgjfileopen()函数
?牐?********
?牐牶得鳎豪肁PI中的ShellExecute函数,调用相应程序处理文件的打开,如.doc文件用Word打开,发邮件使用默认的邮件处理器。
?牐牪问齧.cxgjfilename代表文件的名字,如发邮件写m.cxgjfilename=“mailto:labman2001@sina.com”,打开rtf文件可写 m.cxgjfilename=“C:\Documents and Settings\xgj\My Documents\客户.rtf”
?牐?********
?牐爁unction xgjfileopen()
?牐爌arameter m.cxgjfilename
?牐?&& 声明ShellExecute函数
?牐燚ECLARE INTEGER ShellExecute IN shell32.DLL INTEGER HWND,;
?牐燬TRING lpszOP,;??
?牐燬TRING lpszFile,; ??
?牐燬TRING lpszParams,; ??
?牐燬TRING lpszDir,;??
?牐營NTEGER fsshowcmd
?牐?&& 声明GetDesktopWindow函数,该函数激活Windows桌面
?牐燚ECLARE INTEGER GetDesktopWindow IN win32api
?牐?&& 指定从Windows桌面上运行ShellExecute函数
?牐燞WND = GetDesktopWindow?煟?
?牐爈pszOP = “”
?牐?&& 指定ShellExecute操作的文件为mailto:labman2001@sina.com
?牐爈pszFile = alltrim(m.cxgjfilename)??
?牐爈pszParams = “”
?牐?&&指定ShellExecute的缺省目录为C:\
?牐爈pszDir = “C:\”
?牐爁sshowcmd = 1
?牐?&& 执行ShellExecute命令
?牐燣NRETURN=ShellExecute(HWND,lpszOP,lpszFile,lpszParams,lpszDir,fsshowcmd)?牐爎eturn