Microsoft Word时“作为附件发送”功能,它产生在Outlook与附加的文档新的消息。

我想用一个自定义邮件代理,以取代Outlook中,但我不知道如何实现这一目标。现在我的邮件代理就是运行,并需要一个文件名作为参数的程序。

据我所知,“发送作为附件”是使用称为MAPI一些DLL / API。我需要改变我的应用程序,所以它不只是接受文件名参数,但可以接收MAPI(?)调用MS Word使用时,“发送作为附件”。

此外,我需要创建我自己的Mapi32.dll存根简单地重定向到我的应用程序更改默认的邮件代理。

如果任何人对如何才能实现更多的信息,我会很感激!

有帮助吗?

解决方案

在写自己的MAPI实现关键是要建立一个DLL同时与适当的出口和调用约定,以便系统存根MAPI DLL(C:\ WINDOWS \ SYSTEM32 \ MAPI32.DLL,应该是一样的mapistub .DLL)通过电话传递到您的DLL。 MAPI函数被调用与__stdcall调用约定。此外关键的是设置正确的注册表项,以便您的MAPI DLL文件被系统存根选择,看起来你已经发现,以指定特定的MAPI正确的,当你的广告应用程式,使MAPI调用DLL使用。

我这样做确切的事情刚刚:写我自己的骨架MAPI DLL,并且有很多的麻烦系统存根打电话给我的扩展MAPI功能。其中的关键是MAPI32.DLL调用GetProcAddress的对“富@ x”的切入点,在MAPI接口不是“foo”的入口点,以测试你的DLL是否是“兼容”与扩展MAPI(我想简单MAPI调用它不使用“富@ X”,但普通“foo”的入口点名称)。我也不得不编译我的骨架库接口文件在我的项目“作为C”,而不是“以C ++”为了得到好的符号名。

例如,调用MAPIInitialize应声明这样在源代码:

HRESULT __stdcall MAPIInitialize( LPVOID lpMapiInit )
...

和你需要指定与这样的条目的DEF文件:

EXPORTS
    MAPIInitialize@4=_MAPIInitialize@4
    MAPIInitialize=_MAPIInitialize@4

有关简单MAPI调用(而不是扩展的MAPI调用),你可能不需要“双出口”。为了看什么看出口像一个工作MAPI实现,你可以做到这一点(如果您有您的系统上安装了Outlook):

c:\> dumpbin /exports c:\Program Files\Common Files\SYSTEM\MSMAPI\1033\msmapi32.dll

(或替代你在HKLM\Software\Clients\Mail\Microsoft Outlook\DLLPathEx注册表找到路径)

其他提示

OK,回答我的问题。我需要建立与定义的“MAPISendDocuments”和/或“MAPISendMail则”功能的DLL。

此DLL可以有任何名称,并在HKLM注册表中引用/软件/客户/邮件/ MyMailApp /的DLLPath。

用Delphi发现实施例...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top