Question

Je travaille sur une application deamon que les utilisations boîte de réception de courrier électronique sous sa file d'attente d'entrée. Les temps de réponse doit être aussi élevée que possible avec le serveur frais généraux réduits au minimum, de sorte que la boîte de réception e-mail vote est hors de question. Comme protocole IMAP permet aux notifications sur les nouveaux e-mails, ce qui est idéal pour l'application.

Cependant, j'ai rencontré des problèmes quand j'ai essayé de mettre en œuvre ce mécanisme dans mon Delphi / application Indy. TIdIMAP4 fonctionne très bien (à part quelques problèmes Unicode qui ne sont pas pertinents dans mon cas), mais je ne pouvais pas trouver le moyen de mettre en œuvre des notifications en elle.

Cela devrait être un problème de GIYF de simple, mais pour certains à moi inconnu raison, je ne peux pas trouver toutes les informations pertinentes sur les composants Indy lors de la recherche en ligne.

Une solution ou une approche alternative serait très apprécié.

Edit:. Depuis Indy ne appearently supporte pas les notifications asynchrones de courrier électronique, quelqu'un sait quels composants gratuits pour delphi permettrait que

Était-ce utile?

La solution

TIdIMAP4 ne prend pas en charge la réception des notifications asynchrones, telles que les nouvelles notifie email. Il faudrait pour cela changer la mise en œuvre de TIdIMAP4 à un modèle multithread semblable à ce que TIdTelnet utilisations, mais plus complexe en raison de la commande / modèle de réponse de blocage de courant de TIdIMAP4. Pour l'instant, vous devez interroger périodiquement la boîte de réception.

Autres conseils

Pourquoi ne pas l'application d'un serveur smtp, au lieu de client.

De cette façon, vous avez une notification directe que le courrier électronique est envoyé directement à votre application, au lieu de tirer de nouveaux messages.

Il y a quelques solutions de repli, dans ce courriel ne sera pas la file d'attente si votre application est en baisse, même si je suis sûr que l'échange ms, ou postfix etc peut être configuré pour travailler avec elle assez bien.

Ok. Ceci est une solution de rechange. En supposant qu'il n'y a aucune raison que vous souhaitez des e-mails d'utilisation (par exemple, vos informations sont à venir sous forme d'une source externe via e-mail), alors je suggère une table de base de données pour être une manière beaucoup plus simple pour créer une file d'attente d'entrée.

poll simplement la base de données sur une base régulière. Ce serait beaucoup, beaucoup plus rapide que l'interrogation d'une boîte de réception de courrier électronique, et beaucoup plus rapide que vous pensez que ce sera. Polling une base de données est très rapide et vous pouvez facilement interroger une table de base de données de plusieurs centaines de fois par minute avec très peu d'effet appréciable sur les performances.

Il suffit de créer une table pour stocker vos articles Q et ajouter un champ supplémentaire que vous pouvez stocker un horodatage ou indicateur que cet élément q a été traitée, vous prenez juste l'élément suivant unhandled la pile

ex mssql

select Top 1 * from tbl_MyQ where AlreadyHandled = 0 

mysql

select  * from tbl_MyQ where AlreadyHandled = 0 Limit 1

puis

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

Les bases de données sont rapides, exécutez un test si votre inquiétude. Et ils sont beaucoup beaucoup moins compliqué que les événements IMAP et les boîtes de réception de courrier électronique.

Si la boîte de réception e-mail (IMAP) est une exigence de base dans votre architecture et il n'y a pas de clients IMAP disponibles, je vous conseille de trouver un client IMAP avec notification asynchrone écrite dans une autre langue (C, C # ou même Java) à mettre en œuvre un « proxy » ou une passerelle qui alors déclenchera votre application démon Delphi lorsque de nouveaux messages arrivent.

Le démon Delphi pourrait utiliser un protocole basé sur simple prise de courant ou http pour recevoir les messages (TIdHTTPServer, TIdTCPClient).

Si la courbe d'apprentissage de Indy est raide, vous pouvez écrire un protoype avec la bibliothèque TCP / IP Synapse Ararat qui est gratuit et open source, cela fonctionne très bien dans mes Delphi 2009 applications (sauf que le compilateur se plaint de certains chaîne / ansi conversions).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top