E-mail gateway
Il framework MasonSQL è dotato di un sistema di messaggistica per gli utenti con le seguenti modalità di inoltro:
- visualizzazione dei messaggi nel portale web
- trasmissione del messaggio per posta elettronica
- trasmissione del messaggio per SMS
I messaggi vengono generati dall'applicazione e salvati nel database. Un processo provvede allo smistamento dei messaggi con cadenza ogni minuto.
Maggiori dettagli:
HandlingEmailAndSmsMessages
Si vuole ora permettere la ricezione di messaggi di posta di posta elettronica da filtrare al loro ingresso e inoltrare nel sistema di messaggistica di MasonSQL.
I messaggi provengono dal server di posta elettronica che provvederà, per ciascun messaggio, a richiamare uno script che valuterà la sua destinazione nel sistema di messaggistica di MasonSQL e provvederà al suo inoltro secondo le regole impostate.
Il server di posta da utilizzare dipende dall'ambiente di installazione e non necessariamente lo script verrà installato sullo stesso server web o server di database.
Documentazione
L'attuale documento
HandlingEmailAndSmsMessages è parziale. In particolare non descrive lo schema delle tabelle
messages
e
messages_users
e come esse siano utilizzate per l'archiviazione dei messaggi ed il controllo dello stato di avanzamento gestito dallo script
/opt/masonsql/bin/cronjobs
.
Si deve quindi completare la documentazione riguardante la gestione dei messaggi finora implementata integrandola successivamente con la documentazione del filtro e gateway qui definiti.
Regole di inoltro
Le regole di inoltro devono permettere di individuare i destinatari in base alle intestazioni ed al corpo del messaggio, utilizzando delle espressioni regolari.
Le regole potranno definire i destinatari a singoli utenti, a gruppi, o in base ad una query SQL che restituirà l'elenco dei destinatari.
Esempi:
Filtro |
Destinatari |
Email |
SMS |
Subject |
Short Message |
Message |
{{Subject}} =~ m/error/i |
SELECT login FROM anagrafiche WHERE email ~* {{To|psql}}; |
x |
x |
'ERRORE' |
"Errore da {{Subject}}" |
{{EMAIL}} |
{{BODY|perl}} =~ m/Memoria insufficiente/i |
@Admins carlos |
|
|
'Memoria insufficiente' |
"{{Subject}}" |
"{{BODY}}" |
{{From}} eq 'root@server.local' and {{BODY}} =~ m/avvis[oi]/i |
@Users |
x |
|
"Da {{From}}" |
"Da: {{From}}\n\n{{BODY}}" |
|
-
Filtro:
codice di valutazione della regola
-
-
{{BODY}}
contiene il corpo del messaggio
-
{{HEADERS}}
contiene le intestazioni del messaggio
-
{{EMAIL}}
contiene tutto il messaggio, comprese le intestazioni
-
{{Ccccc-Cccc}}
contiene l'intestazione di nome Ccccc-Cccc
(es. Return-Path, Date, from, To, Subject, X-Mailer)
-
Destinatari:
- I gruppi sono indicati con il carattere "@" all'inizio del nome
- La query viene identificata se inizia con "SELECT" e termina con il carattere ";"
-
Email:
il messaggio è anche inviato via email
-
SMS:
il messaggio è anche inviato via SMS
-
Subject:
Soggetto del messaggio
-
Short Message:
Messaggio breve (usato per gli SMS)
-
Message:
Messaggio lungo (usato anche come corpo nell'invio per e-mail)
Ambiente di sviluppo
Lo script deve essere sviluppato nel linguaggio
Perl
e nello stesso ambiente dell'attuale script
/opt/masonsql/bin/cronjobs
che deve essere usato come "scheletro" utilizzando lo stesso codice per la lettura dei parametri, per la connessione al database.
I package da utilizzare nello sviluppo dovranno essere concordati con
GuidoBrugnara, tra i quali:.
- Email::MIME semplice parsing di e-mail in formato MIME
- DTL::Fast Implementazione in Perl del linguaggio di template usato in Django
Filtraggio delle E-mail
- Database Detail
- New table public.email_gateway_rules will be created to store filter rules.
Column | Type | Modifiers |
id | sequence | |
filter | character varying (240) | |
recipients | character varying | |
email | boolean | |
sms | boolean | |
subject | character varying | |
short_message | character varying | |
message | character varying | |
rule_ord | integer | |
- Processing Detail - Initialize Process
-
Script Location:
/opt/masonsql/bin/email_gateway.pl
-
Validate Inputs:
Validate user has provided all required inputs to program.
-
Read Configuration:
Read configuration file provided by user.
-
Set DB Handler:
Read and set database handler.
-
Load Filter Rules:
Read filter table and load all configured rules. All rules are loaded in same order preference given for each rule.
-
Load Users:
Load all user login data. This will be used when to forward message to multiple recipients.
- Processing Detail - Filter Emails Process
-
Read Inputs:
Read input either from list of files or from STDIN.
- Process Inputs: Process each input provided by user in below sequence.
- Load headers given in email context.
- Substitute DTL tags in the filter and check (if true)
- Substitute DTL tag in the other field (recipients, subject, short_message, message)
- Prepare email message as per defined rule.
- Forward Emails: Forward email to MasonSQL messaging system.single quote
- Store message "messages" table with all required fields
- Store multiple records for each login in "messages_users" table.
- Process should stop validating as soon as first rule get qualified.
-
Send Emails:
MasonSQL system has pre-built process to send mail for each recipient added in "messages_uses" table. This mail sent process will not be a part of email gateway process flow.
- Perl Modules - Perl packages used to parse email contents.
- Email::MIME MIME message handling of RFC2822 message format and headers.
- DTL::Fast - Perl implementation of Django templating language
- Developmend of custom Tags
-
perl
- escape text with Perl syntax and return a perl string delimited by single quotes
-
psql
- escape text with Postgresql syntax and return a psql string delimited by [[https://www.postgresql.org/docs/9.4/static/sql-syntax-lexical.html][String Constants with C-style Escapes (4.1.2.2)]
Configuration Parameter:
Config Parameter |
Description |
Example |
DBIconnect |
Database connection parameter with dbname, user and password detail. |
dbi:Pg:dbname=masonsql;user=[user_name];password=[password] |
Usage:
The script can be called in several ways:
# MasonSQL scripts directory
cd /opt/masonsql/bin
# with extended parameters name
./email_gateway --config <config_file> --files <file1.eml,file2.eml,file3.eml>
# with abbreviated parameters
./email_gateway -c <config_file> -f <f1.eml,f2.eml,f3.eml>
# providing e-mail from standard input
cat f1.eml | ./email_gateway -c <config_file>