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

时间:2017-07-04 15:37:47

标签: email outlook-vba mapi outlook-redemption outlook-2013

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

当前版本:

  • Windows XP
  • MS Office 2003
  • Redemption.dll v 4.5.0.812

迁移到

  • Windows 7

  • MS Office 2013

  • Redemption.dll v 4.5.0.812

场景1:在运行应用程序时使用 redemption.dll v 4.5.0.812 的Win 7计算机中,报告传递功能正常运行。但我注意到的是邮件卡在发件箱中。当我打开Outlook 2013时,邮件会被发送。因此,当我保持Outlook开放并运行该功能时,邮件将被传递。

场景2:现在,在使用开发人员版本 redemption.dll v 5.14 的Win 7计算机中,邮件也会卡在发件箱中。

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

如果您需要更多信息,请与我们联系。

由于

1 个答案:

答案 0 :(得分:1)

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

当我使用Redemption发送邮件时,它只会停留在“草稿”文件夹中

邮件提交是扩展MAPI中的两个步骤:

  1. 调用IMessage :: Submit()

  2. 刷新传出消息队列。

  3. 如果您使用的是Exchange Server,则不需要执行步骤2,因为Exchange邮件存储与Exchange传输提供程序紧密绑定。但是,如果您使用POP3 / SMTP传输和PST文件作为邮件存储,则需要执行步骤2。要刷新消息队列,请在调用SafeMailItem.Send之后创建Redemption.MAPIUtils对象的实例并调用其DeliverNow方法(类似于CDO中的Session.DeliverNow):

    MailItem.Send
    Set Utils = CreateObject("Redemption.MAPIUtils")
    Utils.DeliverNow
    

    如果您使用Outlook 2002或更高版本的PST文件以及仅在Internet模式下安装的POP3 / SMTP传输提供程序或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方法。