hMailServer - серверные скрипты - запускать функцию внешних DLL?

Может быть, это глупый вопрос, и существуют лучшие подходы, но мне интересно, есть ли возможность перехватить событие на входящей электронной почте, используя сценарий на стороне сервера, и внутри этого сценария будет внешний вызов DLL или сценарий, который подключается к базе данных и записывает некоторые метаданные из входящего сообщения (так же, как внешняя DLL)?

Сценарий может быть:

  1. Сообщение приходит на hMailServer от отправителя
  2. Некоторые триггеры запускаются
  3. Функция триггерных вызовов во внешней DLL, которая будет анализировать тело сообщения электронной почты и записывать данные о получателе, теме, адресе сообщения и количестве вложений в специальную таблицу базы данных для целей быстрого списка и уведомления по электронной почте, которая может находиться в той же базе данных, что и hmailserver.
  4. пусть сообщение будет доставлено

Цель: получить мгновенную информацию обо всех электронных письмах, содержащих от, до, тему, перекс сообщения (первые 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, но не ранее и не выше.

Другие вопросы по тегам