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 MessageSorted ascending
{{From}} eq 'root@server.local' and {{BODY}} =~ m/avvis[oi]/i @Users x   "Da {{From}}" "Da: {{From}}\n\n{{BODY}}"  
{{BODY|perl}} =~ m/Memoria insufficiente/i @Admins carlos     'Memoria insufficiente' "{{Subject}}" "{{BODY}}"
{{Subject}} =~ m/error/i SELECT login FROM anagrafiche WHERE email ~* {{To|psql}}; x x 'ERRORE' "Errore da {{Subject}}" {{EMAIL}}

  • 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>

Comments

 
Versione pagina: r22 - 08 Sep 2023, GuidoBrugnara
Questo sito utilizza FoswikiCopyright (©) Leader.IT - Italy P.I. IT01434390223 Informativa privacy & uso dei cookies