问题标签 [mapi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
9 回答
58282 浏览

php - 使用 PHP 访问 Exchange 的最佳方式?

我正在用 PHP 编写一个 CMS 应用程序,其中一个要求是它必须能够与客户的 Exchange 服务器交互。我之前已经写过几次这个功能,并且一直使用WebDAV来完成它,但现在我不再使用它了。

我将在 Windows server 2008 上的 IIS 或 Apache(无偏好)上运行该站点。我需要做的一些事情包括将联系人添加到给定用户的地址簿、作为给定用户发送电子邮件以及运行联系人报告用户。

所有这一切都可以通过 WebDAV 轻松完成,但如果有更好的方法不需要任何可能很快就会被弃用的功能。

有任何想法吗?

更新:

贾斯汀,我喜欢使用 com 对象的想法,我只是担心维护第三个产品以使一切正常......

约翰,我可以用 C# 编写一个 Web 服务来与这些函数交互,并使用我的 PHP 应用程序访问它,但它也有点偏僻。

到目前为止,我并不是 100% 相信其中任何一个都比 WebDAV 更好......

谁能告诉我我在哪里傻?

0 投票
8 回答
3998 浏览

.net - MAPI 和托管代码体验?

官方不支持在托管代码中使用 MAPI 函数。显然,MAPI 使用自己的内存管理,它在托管代码中崩溃和烧毁(请参阅此处此处

我要做的就是启动带有主题、正文和一个或多个附件的默认电子邮件客户端。

所以我一直在研究MAPISendDocuments,它似乎有效。但是我一直无法鼓起勇气在生产代码中实际使用该功能。

有没有人经常使用这个功能?你有什么恐怖故事吗?

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

聚苯乙烯。附件支持是一项要求,因此 Mailto: 解决方案不适合我。

0 投票
1 回答
674 浏览

performance - 查找具有给定 PR_SEARCH_KEY 的所有消息

我需要在queryExchange 服务器上查找所有具有特定值的邮件PR_SEARCH_KEY。我是否必须打开每个邮箱并遍历它,还是有更快的解决方案?

编辑:这是一个程序,需要在我通过日记邮箱收到的所有邮件副本的主题行前添加一些内容。

0 投票
3 回答
3087 浏览

c++ - 如何找出提供给 IExchangeManageStore::GetMailboxTable 的信息存储的可分辨名称?

有一篇Microsoft 知识库文章,其中包含用于打开给定信息存储中的所有邮箱的示例代码。到目前为止它可以工作(需要在比 VC++ 6.0 更新的编译器上进行一些复制和粘贴)。

在某一时刻,它使用信息存储的可分辨名称调用 IExchangeManageStore::GetMailboxTable。对于 Exchange 2007 试用版虚拟服务器映像,它必须如下所示:

使用OutlookSpy并单击 IMsgStore 和 IExchangeManageStore 会在“Server DN:”旁边显示所需的字符串。

我想避免强迫用户将其放入配置文件中。因此,如果 OutlookSpy 可以做到,我的应用程序如何找出当前打开的邮箱所在的信息存储的可分辨名称?

0 投票
3 回答
544 浏览

vb6 - 为 MAPI-MIME 转换创建 IDL

我正在尝试为 IConverterSession 接口创建 IDL,但我对MIMETOMAPI方法的定义感到困惑。它将LPMESSAGE pmsg参数指定为 [out] 但注释声明它指向要加载的 MAPI 消息的指针。

我不清楚这些函数是否分配了 MAPI 消息对象并设置了指针,在这种情况下它不应该是指向 MESSAGE 指针的指针吗?或者调用代码是否应该已经实例化了消息对象,在这种情况下为什么标记为 [out] 而不是 [in]?

Utlitmately 这个接口将从 VB6 代码中使用,因此它必须是 [in] 或 [in, out] 但我确实需要知道是否在我使用的 IDL 中:-

或者

0 投票
1 回答
276 浏览

c++ - 如何使用 MAPI 在我的应用程序中同步通讯录?

我正在使用的系统包含一个地址簿。我正在寻找通过 MAPI 将地址与当前用户通讯簿同步的示例代码。我需要双向同步。

如果您知道任何具有易于使用功能的开源库,我会很高兴听到它。如果您知道一个不是开源的库,那也很好。最好的是一个库,它的许可证允许我在我们自己的解决方案中使用它。

如果你,上帝保佑,知道一个图书馆可以让我很容易地在 MAPI 提供者中发布我的地址簿 - 好吧,那么我很想听到它!

使用外部地址簿并放弃我们自己的地址簿不是为我们的客户服务的选择。

使用 vanilla MAPI 的良好工作代码示例当然也是可以接受的。;-)

0 投票
2 回答
839 浏览

c++ - 通过 MAPI 读取 Exchange 服务器时间

我想计算 Exchange 邮箱中邮件的年龄,以确保它们在我们的程序(C++、MAPI)处理它们之前至少在那里停留一分钟。这样我们使用的垃圾邮件过滤器应该有足够的时间来完成它的工作。

因为我们的程序运行的 PC 上的时间可能与 Exchange 服务器使用的时间不同,所以我们的程序必须通过 MAPI 读取服务器时间。

有没有优雅的解决方案?我能想到的一种方法是修改一些 Item 并立即阅读它的PR_LAST_MODIFICATION_TIME,但我想避免这种情况。

编辑:
我们的程序是一个批处理作业,每 10 分钟运行一次并读取日志邮箱。

0 投票
1 回答
880 浏览

outlook - Outlook 联系人同步 - 如何识别要同步的正确对象?

我有一个通过 CDO 将 Outlook 联系人同步到数据库(并返回)的 Web 应用程序。DB 只包含每个联系人一次(至少理论上,当然会发生双联),为联系人提供单点更改,无论有多少用户在 Outlook 中拥有该特定联系人(如交互或类似产品)。

同步过程不是自动的,而是用户初始化的。在用户决定同步他们的联系人之前,可以经过任意时间跨度。与此同时,其他用户可能已经更新了这些联系人的一个子集。

一般来说,这运行良好,但我从来没有能够解决这个基本问题:

我如何毫无疑问地识别邮箱中的联系人对象?

  1. 我不能依赖PR_ENTRYID,这个属性会随着联系人移动或邮箱移动而改变。
  2. 我不能依赖我自己的 ID(例如 DB 表 ID),因为这些会与联系人一起复制。
  3. 我绝对不能依赖姓名或电子邮件地址等字段,它们可能会发生变化和更新。

目前我使用 1(首选)和 2(后备)的组合。但不可避免地,有时用户会遇到同步到错误联系人的问题,因为没有一个给定的PR_ENTRYID,而是两个具有相同 DB ID 的,其中选择了错误的一个。

那里有一堆 Outlook 同步产品,所以我想这个问题一定是可以解决的。

0 投票
1 回答
2109 浏览

c# - Outlook PropertyFrom MAPI Schema Property ID

I am looking to get the actual property name from a MAPI schema property. I'm obtaining the MAPI Schema property "http://schemas.microsoft.com/mapi/proptag/0x67AA000B" but I would like to know what field this corresponds to (I.E. Anniversary, BusinessAddress, etc). Any insight would be appreciated.

0 投票
2 回答
2222 浏览

outlook - MAPI:PR_SEARCH_KEY 的格式

有谁知道 MAPI 属性的格式PR_SEARCH_KEY

在线文档对此有这样的说法:

搜索关键字由地址类型(大写字符)、冒号“:”、规范形式的电子邮件地址和终止空字符组成。

交换文件MS-OXOABK是这样说的:

PtypBinary 类型的 PidTagSearchKey 属性是一个二进制值,它由 ASCII 字符串“EX:”后跟转换为全大写的对象的 DN,后跟零字节值连接而成。

然而,我在这个属性中看到的所有 MAPI 消息都将它作为某种二进制 16 字节序列,看起来像一个 GUID。还有其他人有关于它的更多信息吗?它总是16字节吗?

谢谢!