使用 Redemption 发送的邮件卡在 Outlook 2013 的发件箱中

Mail Stuck in Outbox of Outlook 2013 sent using Redemption

目前我正在将应用程序迁移到新版本,我在应用程序中遇到了问题。基本上它是一个 VBA Access 应用程序,它将向用户发送报告。对于邮件投递部分,它使用 Redemption.dll

当前版本:

迁移到

场景 1: 在 Win 7 机器中使用 redemption.dll v 4.5.0.812 当我 运行应用程序,报告传递函数 运行s 没有错误。但我注意到邮件卡在发件箱中。当我打开 Outlook 2013 时,邮件已送达。因此,当我保持 outlook 打开并 运行 邮件被发送的功能时。

场景2:现在在使用开发者版本redemption.dllv 5.14的Win 7机器中邮件也卡在发件箱。

可能是什么原因,是否需要更改代码或是否更改了一些与 Outlook 2013 相关的设置? 任何类型的帮助都会非常有用....非常需要它:-) 如果需要更改代码,是否可以保留 redemption.dll 版本 v 4.5(根据要求)

如果您需要更多信息,请告诉我。

谢谢

来自http://www.dimastr.com/redemption/faq.htm#1

当我使用 Redemption 发送消息时,它只是留在草稿文件夹中

消息提交在扩展 MAPI 中分为两个步骤:

  1. 调用IMessage::Submit()

  2. 正在刷新传出消息队列。

如果您使用的是 Exchange 服务器,则不需要步骤 #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 文件的 Outlook 2002 或更新版本,并且 POP3/SMTP 传输提供商或以仅互联网模式安装的 Outlook 2000,则会出现一个问题:无法使用扩展刷新队列MAPI。 Outlook 的那部分简直是坏掉了。但请注意,带有 Exchange Server 的 Outlook 2002/2003(在线)或 Outlook 2000 C/W 在任何配置中都可以。

如果您在缓存模式下使用 Exchange 的 Outlook 2003 或更高版本,则会出现同样的问题。取消选中 Exchange Server 属性中的 "Use cached mode" 以强制使用联机模式 - 这将确保立即传递邮件。

作为最后的手段,您可以在发送邮件后在 Outlook 中模拟单击 "Send/Receive" 按钮:

MailItem.Send
Set Btn = Application.ActiveExplorer.CommandBars.FindControl(1, 5488) 
Btn.Execute

请注意,在 Outlook 2003 中,该按钮现在是一个下拉菜单,真正的 Send/Receive 是该按钮的子项:

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 方法。