我正在为使用Outlook Redemption的应用程序编写测试,该应用程序绝对必须运行64位(它连接到Windows MAPI和Outlook x64).不幸的是,我不能为我的生活让它在64位运行测试.我试过使用一个.runsettings文件(编辑表示64位)和一个.testsettings文件(也编辑过),最后我选择了Test>TestSettings>Default Processor Architecture>64-bit,但无济于事.
每次,System.Environment.Is64BitProcess都为false,当我加载dll连接到Outlook和MAPI时,我得到了可怕的COM异常:Wrong OS or OS version for application (Exception from HRESULT: 0x800401FA (CO_E_WRONGOSFORAPP))这表示安装了64位Outlook,并且尝试访问它的进程是32位.
我在更改设置后重新启动了VS 2012,因为我已经读过可能需要重新启动的地方.有没有人有任何其他建议?我可以把它写成一个运行非正式测试并报告其状态的控制台应用程序,但我的下一步是将这些测试集成到自动构建中.任何帮助将不胜感激.
.testsettings中的主机设置页面的屏幕截图

有趣的是,我做了一个小实验.我用一个控制台应用项目创建了一个新的解决方案.我在那里放了一个公共方法,只是返回true.当我运行控制台应用程序并暂停执行时,我看起来确实运行了64位; 没问题.然后我添加了一个测试项目,创建了一个调用该方法的测试.我还添加var is64 = Environment.Is64bitProcess并在其后添加断点.
可以预见,在不改变任何选项的情况下,is64是错误的.我从测试下拉列表中选择了64位默认架构,然后清理了解决方案,并再次运行测试,结果相同,运行32位.我重新启动VS2012,清理,构建,结果相同.我创建了一个testsettings文件,并在Test菜单中引用它,清理构建,同样,重新启动,清理,构建相同.我创建了一个runsettings文件,set <TargetPlatform>x64</TargetPlatform>,在测试菜单中引用它,再次运行它,并得出相同的结果.QTAgent32.exe继续运行该过程,绝对拒绝注意我的运行64位的要求.
我发誓,如果我必须删除QTAgent32.exe并将QTAgent重命名为该名称,我会的.当我想要顽固的时候,我不会把我的意愿压在计算机的喉咙上.如果你不想看到我虐待工作站,请有人告诉我出了什么问题.想想电脑.
我正在开发一个Outlook Addin,我必须处理大量的项目.这需要花费很多时间,因此我尝试在不同的线程中运行处理(使用Task.Factory.StartNew).但是,这会导致Outlook随机崩溃.
我正在使用Redemption来处理MAPITable,以减少工作量并仅加载相关数据.
目前,唯一对我有用的是在主线程上运行我的所有逻辑(在按钮单击事件中),但是这会长时间锁定Outlook的用户界面,从用户的角度来看这是不可接受的.
有没有人有一些关于如何使用Outlook Addin中的后台线程的指针?
我有一封Outlook电子邮件,我需要处理它的附件.但是当通过附件进行迭代时,如果附件是签名,我想跳过它.
要知道附件是否是我正在使用的签名:
outlookMailItem.Attachments[i].PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E");
Run Code Online (Sandbox Code Playgroud)
但我得到一个Outlook安全警报.
有没有其他方法使用更安全的代码?可以使用Redemption来完成吗?
感谢您的时间.
我目前正在评估redemption将 MSG 文件转换为 EML 文件的库。
RDOSession session = new RDOSession();
RDOMail msg = session.GetMessageFromMsgFile(msgFile);
msg.SaveAs(emlFile, rdoSaveAsType.olRFC822);
Run Code Online (Sandbox Code Playgroud)
到目前为止,与我针对“野生 MSG 文件语料库”测试过的其他所有内容相比,Redemption 在这里做得非常好。
然而,内部电子邮件地址存在问题。对于内部电子邮件地址,生成的 EML 文件personal仅包含地址的一部分,但不包含带有符号的真实电子邮件地址@。
在任何情况下,我都可以看到RDOMail的收件人对象包含SMTPAddress属性中的真实电子邮件地址。但是Address包含外部地址的“真实电子邮件地址”的属性有所不同,但类似于/O=EXAMPLE ORGANIZAION/OU=SOME GROUP/cn=Recipients/cn=FBarney内部地址的属性。
后者正是在生成的 EML 文件中缺少真实电子邮件地址的地址。
所以我试图覆盖这样的Address属性:
recipient.Address = recipient.SMTPAddress;
Run Code Online (Sandbox Code Playgroud)
但这对最后生成的 EML 文件没有任何影响。
如何在不丢失内部地址的真实电子邮件地址的情况下将 MSG 转换为 EML 并进行兑换?
在Exchange 2007 SP3上使用RDO 4.8.0.1184和Delphi 2006
我有以下代码(缩写):
Msg := MailSession.GetMessageFromMsgFile(sTempFile, false);
Msg.UnRead := true;
Msg.Save;
Msg.Move(some_folder);
ShowMessage('EntryID: ' +Msg.EntryID);
Run Code Online (Sandbox Code Playgroud)
生成的对话框显示空的EntryID.我尝试在各个地方打印EntryID,但它总是一个空字符串.我究竟做错了什么?
我在兑换时遇到问题,因为 Outlook 32 位可以安装在 64 位机器上。RedemptionLoader 不能确定安装在 64 位机器上的 Outlook 的位版本。有没有人遇到过这个?
我目前正在编写一个脚本,该脚本将读取来自某个发件人的邮件,该邮件将发送一些命令以便脚本运行.
发件人发送带有命令的邮件,例如:ipconfig /all > result.txt并且在收件人端运行的脚本将此命令复制到.bat文件并运行.bat文件来处理该命令.
$junk = $routlook.GetDefaultFolder(23)
$MI = $junk.items
foreach($m in $MI)
{
if($m.SenderEmailAddress -eq '<sender-address>')
{
Echo "@ECHO OFF" > com.bat
Echo $MI.item(1).Body > com.bat
.\com.bat
}
break
}
Run Code Online (Sandbox Code Playgroud)
c# ×3
email ×2
outlook ×2
.net ×1
32bit-64bit ×1
64-bit ×1
batch-file ×1
delphi ×1
eml ×1
mapi ×1
msg ×1
mstest ×1
powershell ×1
vsto ×1