【发布时间】:2010-11-13 08:40:04
【问题描述】:
我正在尝试使用 VBA 从 MS Access 发送电子邮件,但无法使用 sendobject 函数,因为它不支持外部文件附件。
有人知道我该怎么做吗?
谢谢
【问题讨论】:
我正在尝试使用 VBA 从 MS Access 发送电子邮件,但无法使用 sendobject 函数,因为它不支持外部文件附件。
有人知道我该怎么做吗?
谢谢
【问题讨论】:
有关此问题的综合答案(来自 Access 的电子邮件),请参阅 Tony Toews's Access EMail FAQ。 Tony 建议这样做directly via Winsock,因为这样可以避免担心 CDO 等组件的版本或分发 DLL 或安装 ActiveX 控件。正如 Tony 承认的那样,缺点是代码密集程度更高。
【讨论】:
如果您打算使用 CDO 解决方案 (http://www.paulsadowski.com/WSH/cdo.htm),那么您应该知道,从 Office 2007 开始,CDO 不再与 Outlook 捆绑在一起。如果您要使用 CDO 解决方案,您需要下载 CDO 库 here 并确保该库也安装在您计划部署解决方案的任何机器上。另一种选择是Outlook Redemption。但两者都可以正常工作。两者都需要部署。
【讨论】:
CDO 似乎效果最好。您可以谷歌 CDO.Message 或查看此链接:http://www.paulsadowski.com/WSH/cdo.htm
【讨论】:
可以在 VB 6.0 中使用 MAPISession 控件,所以我想它也可以在 VBA 中使用。
另一种方法是使用 Outlook 对象模型,但需要安装 MS Outlook。但是,大多数拥有 Access 的用户通常在他们的桌面上也有 Outlook。见How to automate Outlook by using Visual Basic
还有一个决定 - 您可以使用 .NET(例如 VB.NET)编写一个非常小的组件,该组件将使用 System.Net.Mail 来编写和发送 SmtpMail。对于您作为 VBA 开发人员来说,这不会很困难。您可以使用单个函数 SendEmail 编写一个类。 然后你可以把这个类暴露给 COM,见Exposing .NET Framework Components to COM 然后您将拥有一个可以从您的 VBA 项目中调用的 ActiveX DLL(使用 CreateObject("") 等)
【讨论】: