Domanda

Sto lavorando su un'applicazione demone che utilizza la posta elettronica in arrivo come la sua coda di input. I tempi di risposta dovrebbero essere più in alto possibile con il server in testa ridotto al minimo, in modo polling casella di posta elettronica è fuori discussione. Come protocollo IMAP permette le notifiche sui nuovi messaggi di posta elettronica, questo è l'ideale per l'applicazione.

Tuttavia, ho incontrato problemi quando ho provato attuare questo meccanismo nel mio / applicazione Indy Delphi. TIdIMAP4 grandi opere (a parte alcuni problemi Unicode che sono irrilevanti nel mio caso), ma non sono riuscito a trovare il modo per implementare le notifiche in esso.

Questo dovrebbe essere un problema semplice GIYF ma per qualche a-me-sconosciuta ragione, non riesco a trovare tutte le informazioni utili sui componenti di Indy durante la ricerca on-line.

una soluzione o alternativi approcci sarebbe molto apprezzato.

Modifica:. Dal momento che Indy appearently non supporta le notifiche di posta elettronica asincroni, qualcuno sa quali componenti gratuito per Delphi permetterebbe che

È stato utile?

Soluzione

TIdIMAP4 non supporta la ricezione di notifiche asincrone, come ad esempio nuove Notifica di posta elettronica. Ciò richiederebbe la modifica di implementazione TIdIMAP4 ad un modello simile a quello che multithread TIdTelnet usi, ma più complessa a causa del modello di blocco di comando / risposta di corrente di TIdIMAP4. Per il momento, è necessario interrogare periodicamente la casella di posta elettronica.

Altri suggerimenti

Perché non rendere l'applicazione di un server SMTP, invece di cliente.

In questo modo si ha la notifica diretta come l'e-mail viene inviata direttamente per la vostra applicazione, invece di tirare nuova email.

Ci sono un paio di ricadute, in che la posta elettronica non sarà coda se la vostra applicazione è giù, anche se sono sicuro che MS Exchange, o postfix ecc può essere configurato per lavorare con esso abbastanza bene.

Ok. Questa è una soluzione alternativa. Supponendo che non v'è alcun motivo che si desidera utilizzare messaggi di posta elettronica (ad esempio, le informazioni vengono modulo in arrivo una sorgente esterna tramite e-mail), poi vorrei suggerire una tabella di database per essere un modo molto più semplice per creare una coda di input.

È sufficiente interrogare il database su base regolare. Questo sarebbe molto, molto più veloce di polling una casella di posta, e molto più rapidamente di quanto si pensa che sarà. Polling di un database è molto veloce e si potrebbe facilmente interrogare una tabella del database diverse centinaia di volte al minuto, con molto poco effetto apprezzabile sulle prestazioni.

È sufficiente creare una tabella per memorizzare i vostri articoli Q e aggiungere un campo aggiuntivo che è possibile memorizzare un timestamp o flag che questo oggetto q è stata gestita, quindi basta prendere l'oggetto non gestita successivo dallo stack

es mssql

select Top 1 * from tbl_MyQ where AlreadyHandled = 0 

mysql

select  * from tbl_MyQ where AlreadyHandled = 0 Limit 1

poi

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

I database sono veloci, eseguire un test se il vostro preoccupato. E sono molto molto meno complicato di eventi IMAP e caselle di posta elettronica.

Se la casella di posta elettronica (IMAP) è un requisito fondamentale nella vostra architettura e non ci sono client IMAP disponibili, cercherei di trovare un client IMAP con notifica asincrona scritta in una lingua diversa (C, C # o anche Java) per implementare un 'Proxy' o gateway che poi farà scattare il tuo Delphi demone app quando arrivano nuovi messaggi.

Il demone di Delphi potrebbe utilizzare un semplice protocollo basato presa o http per ricevere i messaggi (TIdHTTPServer, TIdTCPClient).

Se la curva di apprendimento di Indy è ripida, si potrebbe scrivere un prototipo con la libreria Ararat Synapse TCP / IP che è gratuito e open source, funziona molto bene nei miei Delphi 2009 applicazioni (ad eccezione che il compilatore si lamenta un po ' stringa / ANSI conversioni).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top