问题

使用托管代码中的MAPI函数没有正式支持.显然,MAPI使用自己的内存管理,它在托管代码中崩溃和烧伤(见here here )

我想要做的就是使用主题、主体和一个或多个附件启动默认的电子邮件客户端.

所以我一直在研究 MAPISendDocuments ,它似乎有效.但我无法拿出勇气在生产代码中实际使用该函数.

有没有人使用过这个函数?你有什么恐怖故事?

PS.不,我不会使用附件的命令行参数ShellExecute Outlook.exe.

PPS.附件支持是一个需求,因此Mailto:解决方案不会为我削减它.

  最佳答案

有一个单独的助手EXE,它采用命令行参数(或管道到其StandardInput)来完成所需要的并从主应用程序调用它.这将MAPI东西保持在主应用程序的进程空间之外.好的,您仍然在混合MAPI和.NET,但是在非常短暂的进程中.假设MAPI和CLR开始导致长时间运行的进程出现问题.

我们使用Dmitry Streblechenko的杰出 Redum Data Objects 库,它允许我们在JScript中编写这样的“shim”代码并调用它,它使CLR和MAPI世界保持在单独的进程中,但是支持的方式.

@Chris Fournier re.编写一个非托管DLL.这不起作用,因为问题是在同一过程中混合MAPI和托管代码.

  相同标签的其他问题

.netemailpinvokemapi