首页 / 知识
关于 .net:MAPI 和托管代码体验?
2023-04-11 19:31:00

MAPI and managed code experiences?官方不支持在托管代码中使用 MAPI 函数。显然,MAPI 使用自己的内存管理,它在托管代码中崩溃和烧毁(请参阅此处和此处) 我要做的就是启动带有主题、正文和一个或多个附件的默认电子邮件客户端。 所以我一直在研究 MAPISendDocuments,它似乎有效。但是我一直没有勇气在生产代码中实际使用该功能。 有人经常使用这个功能吗?你有什么恐怖故事吗? PS。不,我不会使用附件的命令行参数 shellExecute Outlook.exe。 PPS。附件支持是一项要求,因此 Mailto: 解决方案不适合我。 有一个单独的帮助程序 EXE,它接受命令行参数(或管道到它的 StandardInput),它执行所需的操作并从您的主应用程序调用它。这将 MAPI 内容保留在您的主应用程序的进程空间之外。好的,您仍在混合 MAPI 和 .NET,但过程非常短暂。假设是 MAPI 和 CLR 开始导致运行时间较长的进程出现问题。 我们使用 Dmitry Streblechenko 出色的 Redemption Data Objects 库,它允许我们在 JScript 中编写这样的"shim"代码并调用它,这将 CLR 和 MAPI 世界保持在单独的进程中,但以受支持的方式。 @Chris Fournier 回复。编写非托管 DLL。这不起作用,因为问题是在同一进程中混合 MAPI 和托管代码。 MAPISendDocuments 已弃用,可能会被删除。 调用进程。在 Mailto: 协议上启动(如下所示)将为您提供基本功能,但不提供附件。
您可以使用附件路径执行此方法,但此选项仅适用于某些旧版本的 Outlook,例如 98。我认为这是由于潜在的安全风险。 如果有人确实使用了 Outlook.exe,它将在 Outlook 2003(和 2007 取决于设置)下发出安全警告。 我已经使用 MAPISendMail 函数和几个内部类来package一些其他 MAPI 相关结构。只要这是唯一的用途,虽然不是微不足道的安全操作,但它是可能的,因为它需要非常密切关注各种非托管数据类型和内存分配/释放和 GC。虽然它仍然不受支持,但我在生产代码中使用它(虽然它尚未发布)。 当我向 Matt Stehle 询问此事时,我收到的回答是:
使用它并不是一件好事,但也不是说有任何其他选项可以从托管代码中实际执行此操作。 您还可以使用托管代码支持的 Outlook Redemption;我不确定它是否有一个简单的 MAPISendDocuments 替换,但如果您有问题,Dmitry 会很有帮助。 至于"崩溃和烧伤",这里是一位 MS 支持人员的另一句话,这里
您应该能够创建一个非托管 DLL 来使用 MAPI 执行您想要的操作,然后从您的托管代码中调用该 DLL。我不会编写一个直接的 MAPI package器,而是执行您需要的所有 MAPI 功能的东西,该 MAPI 包含在非托管 DLL 中。这可能是从托管代码中使用 MAPI 的最安全方式。 以下代码不使用 MAPI,但它会打开带有任意附件的"撰写邮件"窗口。 (实际上,它完全未经测试,但我在一个我认为有效的应用程序中挖掘了它)
对于有 MAPI 经验的人来说,与输入这篇文章并阅读响应(无意冒犯)相比,他们需要更少的时间来编写代码以从非托管代码(阅读:纯 C )中完全按照您的意愿行事。 你很幸运,你需要的功能是有限的。您只需要一个简单的 C 实用程序即可在命令行上获取所需的参数并发出正确的 MAPI 调用。然后,您可以从托管代码中获取所有这些实用程序,就像您要执行任何其他进程一样。 HTH |
最新内容
相关内容
pythoneval函数作用
pythoneval函数作用,培训,字符串,函数,作用,表达式,对象,结果,引号,计算器,以上,pythoneval(str)函数很强大,官方解释为:将字符串str当成有效的pythonprint函数不要换行怎么写
pythonprint函数不要换行怎么写,培训,灵活,函数,对象,参数,文件,空格,结尾,字符,下面,从语法上讲,调用python3.0的print函数有如下的形式:printpython如何自定义一个函数
python如何自定义一个函数,代码,名称,培训,函数,圆括号,参数,定义,表达式,选择性,字符串,python函数是组织好的,可重复使用的,用来实现单一,或相python内置函数在哪
python内置函数在哪,培训,函数,包装,模块,对象,字符串,列表,数据类型,属性,类型,所谓内置函数,就是在Python中被自动加载的函数,任何时候都可以pythonrange函数怎么用
pythonrange函数怎么用,步长,培训,函数,负数,整数,语法,字母,实例,以上,以下,pythonrange()函数可创建一个整数列表,一般用在for循环中。函数python函数如何不返回none
python函数如何不返回none,培训,函数,语句,变量,赋值,参数,实际,结果,字符串,语法,python中,用def语句创建函数时,可以用return语句指定应该返python如何调用python函数
python如何调用python函数,函数,代码,概念,培训,名字,工作,系统,基础,语句,定义,函数function是python编程核心内容之一,也是比较重要的一块。python什么是匿名函数
python什么是匿名函数,代码,培训,函数,标准,名字,有限,表达式,变量,语句,画虎不成反类犬,当我们在创建函数时,有些时候,不需要显式地定义函数,直python调用函数和打印函数的区别
python调用函数和打印函数的区别,培训,函数,区别,变量,实例,分配,以上,参数,东西,更多,python调用函数和打印函数的区别1、当你调用一个返回python函数中使用for循环
python函数中使用for循环,培训,函数,内部,都会,实例,以上,更多,内容,python函数中使用for循环1、在for循环中使用函数需要更长的执行时间,因python如何为函数和模块起别名
python如何为函数和模块起别名,名称,培训,函数,别名,模块,冲突,关键字,以上,两个,程序,python如何为函数和模块起别名1、如果要导入的函数的python单元测试中的函数整理
python单元测试中的函数整理,培训,环境,测试,方法,函数,单元,条件,实例,里面,以上,python单元测试中的函数整理1、setUp准备环境。执行每个测