也许这是一个伪问题,也有更好的方法,但我想知道是否有可能使用服务器端脚本在收到的电子邮件上捕捉事件,并且在该脚本中是外部DLL调用或连接到数据库并从传入消息中写入一些元数据的脚本(与外部DLL相同)?
场景可能是:
- 邮件将从发件人发送到hMailServer
- 某些触发器启动
- 触发器调用外部DLL中的函数,该函数将解析电子邮件正文,并写入有关收件人、主题、邮件长度和用于speedlisting和的特殊数据库表的附件计数电子邮件通知目的可能位于数据库作为hmailserver
- 让消息传递
目标:通过SQL查询无需连接IMAP或PO3即可访问包含发件人、收件人、主题、邮件主题(前100个字符)、附件标志和阅读标志的所有电子邮件的即时信息。因此,使用一个SQL查询,我可以获得所有帐户的所有通知,并通过signalR发送它们。
我意识到,在hmailserver的MS SQL数据库中,有一个名为hm_messages的表,当电子邮件到达时,它会自动填充,但不包含主题,大多不包含发件人,也绝对不包含正文和附件计数。该表中的行仅包含有关*.eml文件的帐户、文件夹、标志、日期和名称的信息。我可以用SQLCLR函数编写一个触发器,它可以像上面提到的那样做,但即使我有*.eml文件名,我也没有它在硬盘上的实际位置。所以我又回到了原点。
否则,我必须在时间循环中从所有帐户下载消息,这会占用我的服务器CPU和内存,尤其是在大约有60个电子邮件帐户和数千条消息的情况下,我必须对它们进行迭代。
hMailServer
支持VBScript/JScript中的脚本编写,并提供指示新消息到达的事件。
这两种脚本语言都支持COM,因此可以使用ADO连接到数据库,或者可以与(后期绑定的)COM Visible.Net程序集进行互操作。
所以,是的,它可以满足您的要求,但我会仔细考虑做这个的可扩展性
当你发现自己时,你可以使用VB脚本和JScript运行hMailServer特定的事件,由C:\Program Files(x86)\hMailServer\Events\EventHandlers.vbs 调用
您还可以使用任何可以访问Microsoft COM的COM/DCOM语言或工具包技术hMailServers主服务器对象是OutOfProcess Server,它支持后期绑定和基于Typelib的后期访问。
要通过运行时绑定使用它,您只需调用任何hMailServer COM API对象使用VB脚本。如果要通过C#、VB.NET或本机C/C访问hMailServer++您需要导入hMailServers Typelibe(hMailServer.tlb it hMailServer\bin文件夹)
可以找到如何从C#和其他语言访问hMailServer的示例在以下文章中:
C#.NEThttps://www.hmailserver.com/forum/viewtopic.php?f=21&t=31507
VB.NEThttps://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,但不是更早版本,也不是更高版本。