Indice articolo

Come descritto tempo fa nell’articolo http://blog.smeup.com/imap/ in Sme.UP ERP è possibile ascoltare cartelle di posta IMAP per rilevare l’arrivo di mail e permettere al gestionale di gestire le mail ricevute.

Nell’articolo sopracitato avevamo descritte i protagonisti di questo ascolto: l’Ascoltatore, che si occupa di monitorare la casella di posta, di scaricare il messaggio arrivato e di comunicare l’arrivo del messaggio e il Decisore che si occupa di gestire a livello applicativo la mail ricevuta.

Abbiamo ora prodotto un nuovo connettore che permette una migliore efficacia per questa funzionalità.

 

Perché un nuovo plugin?

Il limite dell’’ascoltatore ImapFolderConnector è che può reperire e notificare l’arrivo delle mail essenzialmente durante il suo periodo di attività, mentre non si possono recuperare le mail a partire da una certa data o in caso di fermo del provider.

Questo limite ha fatto sì che in SmeUP Provider (così come in SmeUP Gateway) si è deciso di implementare e distribuire a standard un diverso plugin di ascolto ImapMessageMarkerConnector.

Nell’ ImapMessageMarkerConnector vengono introdotte le seguenti novità:

  1. meccanismo di modifica dell’header dei messaggi con un marker proprietario per l’identificazione dei messaggi che sono stati elaborati;
  2. possibilità di elaborare i messaggi a partire da una certa data;
  3. possibilità di elaborazione dei messaggi a richiesta senza polling.

L’ImapMessageMarkerConnector quindi dato un codice di marcatura e una data di partenza dell’analisi, si collega alla casella di posta ed elabora i messaggi a partire da tale data, una volta scaricato il messaggio lo marca aggiungendogli l’header in modo che negli ascolti successivi riconosca il messaggio come già elaborato.

Questa logica permette di elaborare i messaggi a partire da una certa data e di recuperare i messaggi non elaborati in caso di fermo del Provider.

 

Configurazione

Quindi i protagonisti dell’ascolto non sono cambiati, è cambiato il nome e la logica dell’Ascoltatore. Questo cambiamento comporta anche delle modifiche a livello di configurazione dello script.

Innanzitutto è cambiata il nome della classe da richiamare:

com.smeup.iotspi.imapmessagemarker.ImapMessageMarkerConnector.

Inoltre sono stati aggiunti quattro parametri di sezione di cui i primi tre sono obbligatori:

PollFlagCode → rappresenta il valore della marcatura del messaggio

PollStartDate → rappresenta la data a partire dalla quale elaborare i messaggi in formato YYYYMMDD

ActivatePolling → flag di attivazione dell’ascolto all’avvio del plugin (il plugin è stato predisposto anche per chiamate spot stile LOA38)

StartDelay → parametro per ritardare la partenza dell’ascolto (in millisecondi). Questo parametro è stato aggiunto per permettere il coordinamento con altri servizi che devono essere attivi al momento dell’ascolto della casella di posta (si pensi, ad esempio alla H80 per il trasferimento dei file).

Riportiamo un esempio di script LOA37_XX completo.

::A37.SUPPRV DtaQ="CODICEPROVIDER"

-- unità fisica
::SEZ Cod="EM1" Txt="Ascolta Casella"
::A37.CLSSEZ Class="com.smeup.iotspi.imapmessagemarker.ImapMessageMarkerConnector" TOg="" Ogg="" Pgm="X8"

-- variabili configurazione unità fisica
::A37.CNFSEZ Name="Server" Value="indirizzo-server[:porta]"
::A37.CNFSEZ Name="Protocol" Value="[imaps]"
::A37.CNFSEZ Name="Username" Value="user"
::A37.CNFSEZ Name="Password" Value="password"
::A37.CNFSEZ Name="Poll" Value="5000"
::A37.CNFSEZ Name="Folder" Value="Inbox"
::A37.CNFSEZ Name="SaveDir" Value="\\server\condivisione\cartella"
::A37.CNFSEZ Name="ExplodeMsg" Value="true"
::A37.CNFSEZ Name="PollFlagCode" Value="XXXXXX"
::A37.CNFSEZ Name="PollStartDate" Value="20201129"
::A37.CNFSEZ Name="ActivatePolling" Value="true"
::A37.CNFSEZ Name="StartDelay" Value="600000"
::SUB Cod="M00" Txt="Mail Listener"

-- varibili di configurazione dell'unità logica
::A37.SUBVAR Name="Sender" Txt="Mittente" TpDato="STRING" DftVal="*BLANKS" TpVar="IN"
::A37.SUBVAR Name="EmlFile" Txt="File messaggio" TpDato="STRING" DftVal="*BLANKS" TpVar="IN"
::A37.SUBVAR Name="MessageID" Txt="ID Messaggio su cartella IMAP" TpDato="STRING" DftVal="*BLANKS" TpVar="IN"

-- variabili di messaggio
::A37.MSGVAR Name="EmlFile" IO="I" Ogg="J7EML"
::A37.MSGVAR Name="From" Ogg="INMAIL"
::A37.MSGVAR Name="To" Ogg=""
::A37.MSGVAR Name="Subject" IO="I" Ogg=""

 

Un parametro su cui vorrei porre l’attenzione, ma che non è cambiato rispetto al plugin precedente, è il SaveDir che rappresenta il percorso in cui verranno salvati i messaggi elaborati. Questo percorso deve essere raggiungibile dal provider per cui andrà aggiunto il percorso nei PROVIDER_PATHS (o PROVIDER_MAPPING nel caso gel gateway) e va verificato attraverso la pagina di debug che sia raggiungibile in lettura e in scrittura. Per le istruzioni riguardo a questo passaggio rimando all’articolo http://blog.smeup.com/fslistener/ nella sezione “Come inserire un PROVIDER_PATHS”.

Job AS400

Un altro aspetto che non è cambiato rispetto a prima, ma che ritengo degno di nota, è che, come tutti i plugin scaturiti dal costruttore LOA37, anche l’ImapMessageMarkerConnector genera lato AS400 un job separato da quello del provider. Questo job si disattiva se trascorre un timeout di inattività, ma viene riattivato in automatico nel momento in cui l’ascoltatore ha un evento da comunicare al decisore.

 

Non dimentichiamoci dei log

Il provider produce nell’application data dell’utente che lo avvia numerosi log che si rivelano molto utili soprattutto in fase di configurazione e inizializzazione per capire e risolvere eventuali problemi. Nel caso di questi plugin che generano un ascolto e che sono legati al costruttore LOA37 i log interessati sono quelli con suffisso loiotspi.

Come potete vedere in figura il log *_loiotspi.log è il log generico del costruttore loa37 nel quale troveremo l’elenco degli script loa37 individuati e, per ognuno di essi, l’esito dell’inizializzazione del framework e l’elenco dei parametri passati al plugin.

Qui potremo capire se abbiamo configurato correttamente lo script, se è stato caricato correttamente dal framework e se l’istanza è stata inizializzata.

Il log  *_loiotspi-XX.sez.log è il log specifico delle varie sezioni dello script LOA37_XX e contiene l’attività della singola istanza del plugin caricato per quella sezione.

In questo log potremmo vedere eventuali errori specifici per l’istanza del plugin caricata in una determinata sezione dello script.

Facciamo un esempio pratico per capire meglio: se nello script LOA37_XX che fa partire l’ascolto di una cartella IMAP tramite il plugin ImapMessageMarkerConnector non ho impostato un parametro, ad esempio il parametro PollStartDate che è necessario per l’inizializzazione del plugin, vedrò l’errore nel log generico *_loiotspi.log che mi dirà che non ha inizializzato l’interfaccia per mancanza del parametro PollStartDate.

Mentre se i parametri obbligatori ci sono tutti, ma per esempio ho scritto male la password della casella di posta, questo errore lo vedrò nel log specifico *_loiotspi-XX.sez.log che mi darà un errore di autenticazione.

Un altro aspetto da tenere presente è che per evitare una produzione di log esagerata i log specifici per sezione vengono scritti solo se il provider ha impostato un livello di log a DEBUG. Quindi nel caso troviate il log *_loiotspi-XX.sex.log vuoto, dovete modificare il wrapper.conf per settare il SMEUP_PROVIDER_LOGLEVEL a DEBUG e riavviare il provider.

 

Conclusione

Avendo creato un plugin del tutto nuovo, gli script che dovessero richiamare l’ImapFolderConnector rimangono comunque funzionanti. Naturalmente suggeriamo l’utilizzo del nuovo plugin ImapMessageMarkerConnector per una gestione più completa e performante.