题
使用书兼职能从内部管理的编码是正式支持。显然,衡使用其自身的存管理和崩溃和烧伤内管理的代码(见 在这里, 和 在这里,)
所有我想做的就是推出所默认的电子邮件的客户 与主题,身体, 和一个或更多的附件.
所以我已经找到 MAPISendDocuments 并且它似乎工作。但我还没有能够鼓起勇气,实际上使用的功能在生产中的代码。
有人用这种功能?你有任何的恐怖故事?
PS。不,我不会shellExecute Outlook.exe 有的命令行的参数对于附件。
PPS。附件支持是一个 要求 , ,因此Mailto:解决方案不切对我来说。
解决方案
有一个独立的辅助EXE需要的命令行params(或管其StandardInput),并需要什么,并呼吁从你的主要应用程序。这使书兼东西之外的主要应用程序的过程的空间。确定,你还混书兼并。净但是在非常短暂的进程。所作的假定是,书兼并CLR开始引起的问题与长期过程。
我们用德米特里*梅德Streblechenko是一流的 兑换数据的对象 库,它允许我们写这样的"垫"代码在JScript和调的是,这使CLR和书兼世界,在独立的过程,但支持的方式。
@克里斯Fournier。写一个非托管DLL。这不会的工作,因为该问题是混书兼并管理的码 在同样的过程.
其他提示
MAPISendDocuments是不可能删除。你应该使用MAPISendMail代替。看看 简单的书兼
叫过程。开始上 邮寄地址:协议 (如以下所示)会给你基本功能,但不附件。
Process.Start("mailto:name@domain.com?subject=TestCode&Body=Test Text");
你可以做这种方法与附件的道路,但这一选项只适用于某些老版本的前景如98.我假设这是由于验证的潜在风险。
如果有人使用outlook.exe 这将得到安全警告下outlook2003年(和2007年受抚养者在设置)。
你应该能够使非托管DLL执行的操作你想使用书兼,然后援引这DLL从管理的代码。我不会写一直书兼包装,但执行的所有功能需要的书兼中非托管DLL。这很可能是最安全的方式使用书兼从管理的代码。
我已经这样做了使用MAPISendMail功能和几内部的类包装的一些其他书兼相关结构。只要这是唯一使用,它是可能的,虽然不容易做到安全,因为它需要一个非常密切地关注各种不受管理的数据类型和内存配置/释放和GC。虽然它仍然不支持,我使用这个生产编码(尽管它没有运送)。
当我问Matt Stehle关于这一点,响应我收到的是:
我真的不知道的一个更好的方法来做到这一点,任何问题,你跑到这里可能是重复性支持的情况(即维生素b6或不受管理C++)。我只知道,如果你遇到了一个方案是一个问题是造成具体地说通过这一功能被称为。净,我们不会有任何其他建议然后你不用.网。
不完全是一个祝福的使用,但也不是说有任何其他选项实际做这种管理的代码。
以下代码不使用书兼正因为如此,但这不会打开"撰写邮件"窗口与任意附件。
(实际上,这是完全未经测试,但是我挖出来在应用程序,我认为有工作)
using Microsoft.Office;
using Microsoft.Office.Core;
...
Outlook.Application outlook = new Outlook.Application();
Outlook.MailItem mail = (Outlook.MailItem) outlook.CreateItem(Outlook.OlItemType.olMailItem);
mail.BodyFormat = Outlook.OlBodyFormat.olFormatRichText;
mail.HTMLBody = "stuff";
mail.Subject = "more stuff";
string file = File.ReadAllBytes(...);
mail.Attachments.Add(file, Outlook.OlAttachmentType.olByValue, 1, file)
mail.Display(false);
有人经验丰富的与书兼,这将需要他们小时候的曲柄的行为会做你想要什么从不受管理的代码(阅读:纯C++)于输入这个职位和响应(无意冒犯).
你是幸运的功能需要是有限的。所有你需要的是一个简单的C++的工具来取params你需要的命令行和问题的权书兼话。然后,你这一切的实用程序托管的代码就像你想要执行的任何其他进程。
禾田