2017-07-04 130 views
0

目前我正在将应用程序迁移到新版本的过程中,我面临应用程序中的问题。基本上它是一个将向用户发送报告的VBA Access应用程序。对于邮件递送部分它采用Redemption.dll邮件卡在使用兑换发送的Outlook 2013发件箱

当前版本:

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

迁移到

  • 视窗7

  • 的MS Office 2013

  • Redemption.dll v 4.5.0.812

方案1:在Win 7的机器使用redemption.dll V 4.5 .0.812当我运行应用程序时,报告交付功能运行时没有错误。但我注意到邮件卡在发件箱中。当我打开Outlook 2013邮件得到交付。所以,当我保持展望开放,并运行邮件交付功能。

方案2:现在在Win 7的机器使用开发者版本redemption.dll v 5.14过的邮件会卡在发件箱。

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

让我知道你是否需要更多信息。

由于

回答

0

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

当我使用赎回发送消息时,它简单地停留在草稿文件夹

消息提交是在扩展MAPI一个两步过程:

  1. 调用IMessage :: Submit()

  2. 刷新传出的消息队列。

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

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

但是有一个问题没有,如果你正在使用Outlook 2002或更新的PST文件和POP3/SMTP传输提供程序或安装在Internet Only模式下的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方法。

+0

感谢德米特里的回复。在经过它之后,我在Outlook 2013中取消选中“使用缓存模式”以强制在线模式,并且邮件确实立即发送。现在我有另一个查询,如上所述**“如果您使用Outlook 2003或更高版本的Exchange以缓存模式”**,但在我当前版本的Outlook 2003中,使用缓存模式为“已选中”,邮件交付时不存在任何问题。因此,关闭缓存模式是解决方案,或者是否有任何更改可以做,并保持缓存模式。 – DeadShot

+0

您可以使用Namespace.SendAndReceive,但请记住它是异步的,您需要确保Outlook保持引用,直到发送/接收完成。 –

+0

再次感谢德米特里,我错了我在错误的机器中检查使用缓存模式。它不适用于Outlook 2003和更高版本。精彩的是,不需要任何代码更改 – DeadShot

相关问题