hMailServer - серверные скрипты - запускать функцию внешних DLL?
Может быть, это глупый вопрос, и существуют лучшие подходы, но мне интересно, есть ли возможность перехватить событие на входящей электронной почте, используя сценарий на стороне сервера, и внутри этого сценария будет внешний вызов DLL или сценарий, который подключается к базе данных и записывает некоторые метаданные из входящего сообщения (так же, как внешняя DLL)?
Сценарий может быть:
- Сообщение приходит на hMailServer от отправителя
- Некоторые триггеры запускаются
- Функция триггерных вызовов во внешней DLL, которая будет анализировать тело сообщения электронной почты и записывать данные о получателе, теме, адресе сообщения и количестве вложений в специальную таблицу базы данных для целей быстрого списка и уведомления по электронной почте, которая может находиться в той же базе данных, что и hmailserver.
- пусть сообщение будет доставлено
Цель: получить мгновенную информацию обо всех электронных письмах, содержащих от, до, тему, перекс сообщения (первые 100 символов), флаг вложений и флаг чтения, доступные через запрос SQL, без необходимости подключения к IMAP или PO3. Таким образом, используя один SQL-запрос, я могу получить все уведомления для всех учетных записей и отправить их через signalR.
Я понял, что в базе данных MS SQL hmailserver есть таблица с именем hm_messages, которая автоматически заполняется при поступлении электронной почты, но не содержит темы, в основном не содержит отправителей и определенно не содержит тела и количества вложений. Строка в этой таблице содержит только информацию об учетной записи, папке, флагах, датах и имени *.eml файла. Я мог бы написать триггер с функцией SQLCLR, который мог бы делать то же самое, что упомянуто выше, но даже если у меня есть имя файла *.eml, у меня нет его фактического местоположения на жестком диске. Так что я вернулся на круги своя.
В противном случае мне придется загружать сообщения со всех учетных записей в цикле времени, что приводит к краже процессора и памяти моего сервера, особенно там, где имеется около 60 учетных записей электронной почты и тысячи сообщений, и приходится повторять их все.
1 ответ
hMailServer
поддерживает скрипты в VBScript/JScript и предоставляет события, указывающие на приход новых сообщений.
Оба языка сценариев поддерживают COM, поэтому могут использовать, например, ADO для подключения к базе данных или могут взаимодействовать с (с поздней привязкой) сборкой COM Visible .Net.
Так что да, он может делать то, что вы просите, но я бы тщательно подумал о масштабируемости этого
Как вы сами узнали, вы можете использовать VB-Script и JScript для запуска определенных событий hMailServer, вызываемых C:\Program Files (x86)\hMailServer\Events\EventHandlers.vbs
Вы также можете использовать любой язык COM/DCOM или инструментарий, который может получить доступ к технологии Microsoft COM. Главный объект сервера hMailServers - это сервер OutOfProcess, который поддерживает позднее связывание и поздний доступ на основе библиотеки типов.
Чтобы использовать его через привязку среды выполнения, вы можете просто вызвать любой объект COM API hMailServer с помощью VB-Script. Если вы хотите получить доступ к hMailServer с помощью C#.NET или VB.NET или собственного C/C++, вам необходимо импортировать hMailServers Typelibe (hMailServer.tlb it hMailServer \bin folder)
Примеры того, как вы можете получить доступ к hMailServer из C# и других языков, можно найти в следующих статьях:
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-APIhttps://www.hmailserver.com/documentation/latest/?page=com_objects
Необходимые инструменты: Visual Studio 2013, но не ранее и не выше.