MAPI MAPISendMailAuthor: 徐艺波(xuyibo) Views: 124 UpdateTime:2007-8-30 |
留言 |
这篇文章介绍XP下系统使用mapi32.dll发送邮件的实现细节,和相关注册表的位置。
当你在开始运行中输入:mailto:[email protected]?subject=hello email后,如果配置好了邮件发送设置,那么将自动弹出你的邮件客户端,比如在我的机器上:
你可能要问系统怎么知道改调用outlook express,而不是foxmail或office outlook,请看下面的对话框:
邮件设置保存在注册表:HKEY_LOCAL_MACHINESOFTWAREClientsMail下,其默认值为默认的电子邮件程序。
每一项的结构为:
|
发送邮件接口:
ULONG FAR PASCAL MAPISendMail( |
实现的时候先动态加载MAPI32.DLL,然后GetProcAddress到函数MAPISendMail,填充MapiMessage数据结构即可。
MAPISendMail动态的枚举可用的发送邮件的客户端程序,处于效率的考虑,MAPISendMail设置了一个全局变量:BOOL bHaveFoundValidMailApp;当这个变量为FALSE的时候说明前面执行过这个函数时没有找到邮件程序,直接退出,否则的话就开始枚举。我们首先要明白一下:mapi的结构非常类似NDIS的,就是上层构建一个抽象接口,根据需要调用合适的下面的相应接口。MAPISendMail依次从下面的文件中枚举的邮件客户端为:
omi9.dll |
在我的机器上,执行MAPISendMail最终将调用C:Program FilesOutlook Expressmsoe.dll中的导出函数MAPISendMail。
Email:[email protected] QQ:85521028 Copyright ©2002-2007 XuYibo All rights reserved. License | Contributor |