hMailServer - 服务器脚本 - 触发外部 DLL 函数?

hMailServer - server scripts - trigger external DLL function?

也许这是一个虚拟问题并且存在更好的方法,但我想知道是否有可能使用服务器端脚本在传入电子邮件上捕获事件并且该脚本内部将是外部 DLL 调用或连接到的脚本数据库并从传入消息中写入一些元数据(与外部 DLL 相同)?

场景可能是:

  1. 邮件从发件人
  2. 发送到 hMailServer
  3. 一些触发器开始
  4. 外部 DLL 中的触发器调用函数将解析电子邮件正文并写入有关收件人、主题、消息 perex 和 特殊数据库的附件计数 table 用于快速列表和 可以位于同一位置的电子邮件通知用途 数据库作为 hmailserver
  5. 让消息传递

目标:获得所有电子邮件的即时信息,包括发件人、收件人、主题、消息 perex(前 100 个字符)、附件标志和阅读标志,可通过 SQL 查询访问,而无需连接到 IMAP 或 PO3 .因此,使用一个 SQL 查询,我可以获得所有帐户的所有通知并通过 signalR 发送它们。

我意识到在 MS SQL 中,hmailserver 的数据库 table 称为 hm_messages,它在电子邮件到达时自动填充,但不包含主题,大部分没有发件人,也绝对没有正文和附件计数。 table 中的行仅包含有关帐户、文件夹、标志、日期和 *.eml 文件名称的信息。我可以用 SQLCLR 函数编写一个触发器,它可以执行与上述相同的操作,但即使我有 *.eml 文件名,我也没有它在硬盘上的实际位置。所以我回到原点。

否则我必须在一个时间循环中从所有帐户下载邮件,这会窃取我的服务器 CPU 和内存,尤其是在其中有大约 60 个电子邮件帐户和数千条邮件并且必须迭代它们的情况下到处都是。

hMailServer 支持 VBScript/JScript 中的脚本并提供 events 以指示新消息到达。

两种脚本语言都支持 COM,因此可以使用例如 ADO 连接到数据库或可以与(后期绑定)COM 可见 .Net 程序集互操作。

所以是的,它可以做你要求的,但我会仔细考虑这样做的可扩展性

如您所知,您可以使用 VB-Script 和 JScript 来 运行 hMailServer 特定事件,由 C:\Program Files (x86)\hMailServer\Events\EventHandlers.vbs

您也可以使用任何可以访问 Microsoft COM 的 COM/DCOM 语言或工具包 技术。 hMailServers 主服务器对象是一个 OutOfProcess 服务器,它支持 后期绑定和基于 Typelib 的后期访问。

要通过运行时绑定使用它,您可以调用任何 hMailServer COM API 对象 VB-Script。如果您想通过 C#.NET 或 VB.NET 或本机 C/C++ 访问 hMailServer 您需要导入 hMailServers Typelib(hMailServer.tlb 它是 hMailServer \bin 文件夹)

可以找到如何从 C# 和其他语言访问 hMailServer 的示例 在以下文章中:

C#.NET https://www.hmailserver.com/forum/viewtopic.php?f=21&t=31507

VB.NET https://www.hmailserver.com/forum/viewtopic.php?f=21&t=31508

原生 C/C++ (Win32/Win64) https://www.hmailserver.com/forum/viewtopic.php?f=21&t=31510

COM-API 文档 https://www.hmailserver.com/documentation/latest/?page=com_objects

所需工具: Visual Studio 2013 年但不早于也不高于。