Уведомление о прибытии электронной почты с клиентом Indy IMAP (Delphi 2009)

StackOverflow https://stackoverflow.com/questions/3161268

Вопрос

Я работаю над приложением deamon, который использует почтовый ящик в качестве очереди ввода. Время отклика должно быть максимально высокой, насколько это возможно, с сервером, поддерживающимся как минимум, поэтому входящие в почтовой почте опроса нет вопроса. Поскольку протокол IMAP позволяет уведомлениями о новых электронных письмах, это идеально подходит для приложения.

Тем не менее, я столкнулся с неприятностями, когда я попробовал реализовать этот механизм в моем приложении Delphi / Indy. TIDIMAP4 отлично работает (кроме некоторых проблем с Unicode, которые не имеют значения в моем случае), но я не мог найти способ внедрения в нем уведомления.

Это должно быть простой проблемой Giyf, но для некоторых мне - мне неизвестная причина, я не могу найти какую-либо соответствующую информацию о компонентах Indy при поиске онлайн.

Решение или альтернативные подходы будут глубоко оценены.

Редактировать: Поскольку Indy не поддерживает уведомления Asynchronous E-mail, никто знает, какие бесплатные компоненты для Delphi позволят этому.

Это было полезно?

Решение

TIDIMAP4 не поддерживает прием асинхронных уведомлений, таких как новое письмо уведомляет. Это требовало бы изменения внедрения TIDIMAP4 в многопоточную модель, аналогичную тому, что использует TIDTELNET, но более сложный из-за модели TIDIMAP4 в текущей блокировке модели / реакции. На данный момент вы должны периодически опросить входящие коробки.

Другие советы

Почему бы не сделать приложение SMTP-сервер вместо клиента.

Таким образом, у вас есть прямое уведомление, поскольку электронное письмо отправляется прямо в ваше приложение, вместо того, чтобы вытащить новое электронное письмо.

В этом письме есть несколько отблесений, в этом письме не будет очередь, если ваше приложение недоступен, хотя я уверен, что MS Exchange или PostFix ETC может быть настроен для работы с ним довольно хорошо.

Ok. Это альтернативное решение. Предполагая, что нет причин, которые вы хотите использовать электронные письма (например, ваша информация приходит, образуется внешний источник по электронной почте), то я предложил бы таблицу базы данных, чтобы быть гораздо более простым способом создания очереди ввода.

Просто опробуйте базу данных на регулярной основе. Это было бы намного быстрее, чем опросить почтовый ящик, и гораздо быстрее, чем вы думаете, что это будет. Опыление базы данных очень быстро, и вы можете легко опросить таблицу базы данных несколько сотен раз в минуту с очень небольшим заметным влиянием на производительность.

Просто создайте таблицу, чтобы сохранить ваши элементы q и добавить дополнительное поле, которое вы можете хранить временную метку или флаг, чтобы этот элемент был обработан, тогда вы просто проходите следующий необработанный элемент вне стека

например, MSSQL.

select Top 1 * from tbl_MyQ where AlreadyHandled = 0 

mysql.

select  * from tbl_MyQ where AlreadyHandled = 0 Limit 1

тогда

update tbl_MyQ Set AlreadyHandled = 1 where QueueID = #ItemIDRetrieved#

Базы данных быстро, запустите тест, если вы обеспокоены. И они намного менее сложны, чем IMAP события и почтовые ящики.

Если почтовый почтовый ящик (IMAP) является основным требованием в вашей архитектуре, и нет доступных клиентов IMAP, я бы попытался найти клиент IMAP с асинхронным уведомлением, написанным на другом языке (C, C # или даже Java) для реализации A ' Proxy 'или Gateway, который затем заставит ваше приложение Delphi Daemon, когда появляются новые сообщения.

Демон Delphi может использовать простой протокол на основе сокета или HTTP для получения сообщений (TIDHTTPSERVER, TIDTCPCLIARD).

Если кривая обучения INDY является крутой, вы можете написать Protoype с помощью библиотеки TCP / IP Ararat Synapse TCP / IP, которая является бесплатным и открытым исходным кодом, она очень хорошо работает в моих приложениях Delphi 2009 (за исключением того, что компилятор жалуется на некоторую строку / ANSI преобразования).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top