我有一个使用Rdo Redemption类在草稿文件夹中创建电子邮件然后发送电子邮件的软件。
它适用于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 - peter.pan@...&quo t;)
Msg.Account = Account
Msg.To = "user@..."
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 :(得分:0)
最后,找出遗漏的内容并解决我的问题:
安装Outlook2016(Outlook 2013)作为“单击运行”模式并设置“Google App sync”时出现问题。调用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电子邮件帐户。
我做了进一步的Google搜索,似乎Outlook C2R(点击运行)可能无法正确放置所有COM注册表。