Visual FoxPro 9桌面应用如何使用受支持方式发送电子邮件
Visual FoxPro 9 桌面应用邮件发送官方支持方案
以下是目前受微软官方支持的几类实现方案:
1. Outlook 对象模型(OOM)调用
- 适用场景:终端用户设备已安装Outlook 2010及以上版本的企业环境
- 实现逻辑:直接在VFP中创建Outlook应用实例,调用原生接口构造并发送邮件,发送记录可自动同步到Outlook客户端发件箱
- 示例代码:
LOCAL oOutlook, oMail oOutlook = CREATEOBJECT("Outlook.Application") oMail = oOutlook.CreateItem(0) WITH oMail .Recipients.Add("收件人邮箱地址") .Subject = "邮件主题" .Body = "邮件正文内容" * 附件添加逻辑:.Attachments.Add("本地文件完整路径") .Send() ENDWITH RELEASE oMail, oOutlook
- 注意:首次调用会触发Outlook安全提示,可通过企业组策略配置信任VFP应用后消除。
2. 系统内置CDOSYS组件调用
- 适用场景:无Office依赖的场景,Windows XP及以上系统原生自带该组件,需注意:该组件和已废弃的CDO 1.2.1不属于同一产品,是Windows系统官方支持的内置邮件组件
- 实现逻辑:调用
cdosys.dll提供的接口,直接对接SMTP服务发送邮件,无需依赖本地邮件客户端 - 示例代码片段:
LOCAL oMsg, oConf oMsg = CREATEOBJECT("CDO.Message") oConf = CREATEOBJECT("CDO.Configuration") WITH oConf.Fields .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "你的SMTP服务器地址" .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 && 加密传输可填465/587端口 .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2 .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1 .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "发件人账号" .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "发件人授权密码" .Update() ENDWITH oMsg.Configuration = oConf WITH oMsg .From = "发件人邮箱" .To = "收件人邮箱" .Subject = "邮件主题" .TextBody = "邮件正文" * 附件添加逻辑:.AddAttachment("本地文件完整路径") .Send() ENDWITH RELEASE oMsg, oConf
3. .NET互操作调用System.Net.Mail类库
- 适用场景:需要适配现代SMTP服务(包括要求TLS加密、OAuth2认证的企业邮箱、Outlook 365、Gmail等)的场景,终端设备需安装.NET Framework 4.0及以上版本,是目前兼容性最强的官方支持方案
- 实现逻辑:VFP9支持调用.NET程序集,直接使用微软官方维护的
System.Net.Mail命名空间下的类实现邮件发送,完全符合现代邮件传输安全规范 - 示例代码片段:
LOCAL oSmtp, oMail * 初始化SMTP客户端 oSmtp = CREATEOBJECT("System.Net.Mail.SmtpClient", "SMTP服务器地址", 587) WITH oSmtp .EnableSsl = .T. .Credentials = CREATEOBJECT("System.Net.NetworkCredential", "发件人账号", "发件人授权密码/应用密码") ENDWITH * 构造邮件 oMail = CREATEOBJECT("System.Net.Mail.MailMessage", "发件人邮箱", "收件人邮箱", "邮件主题", "邮件正文") * 附件添加逻辑:oMail.Attachments.Add(CREATEOBJECT("System.Net.Mail.Attachment", "本地文件完整路径")) * 执行发送 oSmtp.Send(oMail) RELEASE oMail, oSmtp
方案选择参考
- 终端环境统一安装Outlook的企业场景,优先选择Outlook对象模型方案,部署成本最低
- 需要无依赖适配老旧Windows环境,选择CDOSYS组件方案
- 需要对接支持OAuth2认证的现代云邮箱服务,优先选择.NET互操作方案
内容的提问来源于stack exchange,提问作者Andrus
相关产品推荐
相关产品推荐

