来自http://www.dimastr.com/redemption/faq.htm#1
当我使用 Redemption 发送消息时,它只是留在草稿文件夹中
消息提交是扩展 MAPI 中的一个两步过程:
调用 IMessage::Submit()
刷新传出消息队列。
如果您使用的是 Exchange Server,则不需要第 2 步,因为 Exchange 邮件存储与 Exchange 传输提供程序紧密绑定。但是,如果您使用 POP3/SMTP 传输和 PST 文件作为消息存储,则需要步骤 #2。要刷新消息队列,请创建 Redemption.MAPIUtils 对象的实例并在调用 SafeMailItem.Send 后调用其 DeliverNow 方法(类似于 CDO 中的 Session.DeliverNow):
MailItem.Send
Set Utils = CreateObject("Redemption.MAPIUtils")
Utils.DeliverNow
但是,如果您使用带有 PST 文件和 POP3/SMTP 传输提供程序的 Outlook 2002 或更新版本,或者以仅 Internet 模式安装的 Outlook 2000,则会出现一个问题:无法使用扩展 MAPI 刷新队列。 Outlook 的那部分完全被破坏了。但请注意,任何配置的带有 Exchange Server 或 Outlook 2000 C/W 的 Outlook 2002/2003(在线)都可以。
如果您在缓存模式下将 Outlook 2003 或更高版本与 Exchange 结合使用,则会出现同样的问题。取消选中 Exchange Server 属性中的“使用缓存模式”以强制使用联机模式 - 这将确保邮件立即传递。
作为最后的手段,您可以在发送消息后模拟单击 Outlook 中的“发送/接收”按钮:
MailItem.Send
Set Btn = Application.ActiveExplorer.CommandBars.FindControl(1, 5488)
Btn.Execute
请注意,在 Outlook 2003 中,该按钮现在是下拉菜单,真正的发送/接收是按钮的子项:
Set Btn = Application.ActiveExplorer.CommandBars.FindControl(1, 7095)
Btn.Execute
请注意,上面的代码假设有一个活动的资源管理器;如果您以编程方式启动 Outlook(并且以前不是由用户启动)并且不显示任何文件夹,则不会出现这种情况。在这种情况下,您可以使用 Namespace.SyncObjects 集合开始同步。:
set NS = Application.GetNamespace("MAPI")
NS.Logon
Set Sync = NS.SyncObjects.Item(1)
Sync.Start
在 Outlook 2010 中,您还可以使用 Namespace.SendAndReceive 方法。