当在赎回中调用RdoMail.Send()时出现REGDB_E_CLASSNOTREG错误

问题描述:

我有一个软件使用Rdo Redemption类在草稿文件夹中创建电子邮件,然后发送电子邮件。当在赎回中调用RdoMail.Send()时出现REGDB_E_CLASSNOTREG错误

它适用于99%的客户端机器。但只有少数客户在其Outlook中拥有“Google App同步”功能。他们在调用RdoMail.Send()时遇到REGDB_E_CLASSNOTREG错误时出现异常。

我可以看到电子邮件已在草稿文件夹中成功创建。但不能发出并得到这个类没有注册异常。

这里是我的示例代码(从http://www.dimastr.com样本如下):

set Session = CreateObject("Redemption.RDOSession") 
Session.Logon 
set Drafts = Session.GetDefaultFolder(olFolderDrafts) 
set Msg = Drafts.Items.Add 
set Account = Session.Accounts("Google App - [email protected]&quo t;) 
Msg.Account = Account 
Msg.To = "[email protected]" 
Msg.Recipients.ResolveAll 
Msg.Subject = "test" 
Msg.Body = "Test body" 
Msg.Save 

' Have REGDB_E_CLASSNOTREG error when call Send() 
Msg.Send 

注:我试图注册Redemption.dll和Redemption64.dll但没有运气。

的功能名称失败是RDOMail.Send()(在http://www.dimastr.com/redemption/RDOMail.htm定义)

有谁以前遇到类似的问题?针对该问题的任何解决方案(似乎只与Google App与MAPI同步的客户端计算机相关)?我怎样才能找出每个COM类没有注册?

谢谢!

+0

我将调试版本的Redemption发送到您的私人电子邮件地址。 –

最后,发现缺什么,我的问题的解决方案:当安装为Outlook2016(Outlook 2013中)“点击运行”模式和“谷歌应用程序同步”是设置发生

问题。当调用RDOMail.Sned()时,发生REGDB_E_CLASSNOTREG错误。

使用将procmon后,我们发现以下注册表项丢失:

Windows注册表编辑器5.00版

[HKEY_CLASSES_ROOT\CLSID\{9EADBD1A-447B-4240-A9DD-73FE7C53A981}] 
@="CLSID_IMimeMessage" 

[HKEY_CLASSES_ROOT\CLSID\{9EADBD1A-447B-4240-A9DD-73FE7C53A981}\InprocServer32] 
@="C:\\Program Files\\Microsoft Office\\Root\\Office16\\OUTLMIME.DLL" 
"ThreadingModel"="Both" 

[HKEY_CLASSES_ROOT\CLSID\{9EADBD1A-447B-4240-A9DD-73FE7C53A981}\Typelib] 
@="{9EADBD25-447B-4240-A9DD-73FE7C53A981}" 

一次,我们把这些注册表项,RDOMail.Send()是工作用于MAPI Google App Sync电子邮件帐户。

我做了进一步的谷歌搜索,它似乎Outlook C2R(点击运行)可能不会正确地把所有的COM注册表。