MailServer. Daniele Dolfini, Giovanni Franza, Neil Otupacca IPAP3 2010/2011. Relazione sulla costruzione del sistema di messaggeria elettronica.



Documenti analoghi
2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Configurazione di Outlook Express

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Servizio di Posta elettronica Certificata (PEC)

Servizio di Posta elettronica Certificata (PEC)

Servizio di Posta elettronica Certificata (PEC)

Servizio di Posta elettronica Certificata (PEC)

FPf per Windows 3.1. Guida all uso

INTEGRATA OTTIMIZZAZIONE DEI PROCESSI AZIENDALI

1. Manuale d uso per l utilizzo della WebMail PEC e del client di posta tradizionale

CREAZIONE DI UN AZIENDA

Documentazione API web v 1.0

Servizio di Posta elettronica Certificata (PEC)

Manuale Utente PEC e Client di Posta tradizionale

INTEGRATA OTTIMIZZAZIONE DEI PROCESSI AZIENDALI

19. LA PROGRAMMAZIONE LATO SERVER

I M P O S T A R E U N A C C O U N T D I P O S T A C O N M O Z I L L A T H U N D E R B I R D

SWISSCAST. Descrizione della modalità di esportazione di documenti in pagine HTML

LA GESTIONE DELLE VISITE CLIENTI VIA WEB

Le caselle di Posta Certificata attivate da Aruba Pec Spa hanno le seguenti caratteristiche:

Il sofware è inoltre completato da una funzione di calendario che consente di impostare in modo semplice ed intuitivo i vari appuntamenti.

MANUALE ESSE3 Gestione Registro delle lezioni

File, Modifica, Visualizza, Strumenti, Messaggio

Integrazione InfiniteCRM - MailUp

COME CONFIGURARE UN CLIENT DI POSTA

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

Corso di Amministrazione di Reti A.A. 2002/2003

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

appunti delle lezioni Architetture client/server: applicazioni client

Utilizzo di Certificati SSL e relative implicazioni

Architettura del. Sintesi dei livelli di rete. Livelli di trasporto e inferiori (Livelli 1-4)

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Reti di Calcolatori. Il Livello delle Applicazioni

Manuale Utente. Gestione Richieste supporto Data Warehouse. Della Ragioneria Generale dello Stato. Versione 1.0. Roma, Ottobre 2015

Guida alla registrazione on-line di un DataLogger

Manuale Utente. Gestione Richieste supporto BDAP. Versione 1.0

MANUALE UTENTE Fiscali Free

1 Introduzione Installazione Configurazione di Outlook Impostazioni manuali del server... 10

Manuale per la configurazione di un account di PEC in Mozilla.

Manuale d uso Lexun Area Riservata proprietà di logos engineering - Sistema Qualità certificato ISO 9001 Det Norske Veritas Italia

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

Configurazione client di posta elettronica per il nuovo servizio . Parametri per la Configurazione dei client di posta elettronica

PANNELLO DI CONTROLLO

Scenari esemplificativi di utilizzo delle Mailing List

Presidenza del Consiglio dei Ministri

Alfa Layer S.r.l. Via Caboto, Torino ALFA PORTAL

Soluzione dell esercizio del 2 Febbraio 2004

A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.

MANUALE UTENTE FORMULA PEC

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress

MANUALE MOODLE STUDENTI. Accesso al Materiale Didattico

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

MANUALE PER L UTILIZZO DELLA FUNZIONE EVENTI Rel.1.2 del 29 gennaio 2004

PANNELLO DI CONTROLLO

Omnia Web Timesheet. Manuale utente

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Sistema di gestione Certificato MANUALE PER L'UTENTE

SERVIZIO DI MESSAGGISTICA ALL UTENTE. Manuale per l operatore

Guida alla registrazione on-line di un NovaSun Log

Guida alla configurazione

Protocolli applicativi: FTP

SMS API. Documentazione Tecnica YouSMS HTTP API. YouSMS Evet Limited

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

URI. Introduzione. Pag. 1

MANUALE DI UTILIZZO: INTRANET PROVINCIA DI POTENZA

Corso Analista Programmatore Web PHP Corso Online Analista Programmatore Web PHP

manuale utente per Viabizzuno online

Sistema Informativo Gestione Fidelizzazione Clienti MANUALE D USO

Procedura SMS. Manuale Utente

Organizzazione degli archivi

Manuale Terminal Manager 2.0

Configurazione di Microsoft Outlook 2007

ALICE AMMINISTRAZIONE UTENTI WEB

PROGRAMMA GESTIONE TURNI MANUALE UTENTE. Programma Gestione Turni Manuale Utente versione 1.1

Mac Application Manager 1.3 (SOLO PER TIGER)

INFORMATIVA SUL DIRITTO ALLA PRIVACY PER LA CONSULTAZIONE DEL SITO WEB

Servizio di Posta elettronica Certificata (PEC)

IFInet Secure Webmail

Collegamento remoto vending machines by do-dots

Configurazione Client di Posta Elettronica

SERVICE BROWSER. Versione 1.0

Manuale Operativo per l utilizzo della piattaforma E-Learning@AQ. Versione 1.1

BDX 3D-EDITOR (autore: Marco Bedulli) Scopo del software. Caratteristiche fondamentali. Linguaggi utilizzati. Navigazione 3D

Libero Emergency PC. Sommario

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti

Manuale Gestore. STWS Web Energy Control - Servizio di telelettura sul WEB

MANUALE UTENTE. In questo manuale verranno descritte tutte le sue funzioni. Il sistema OTRS è raggiungibile al seguente link:

MANUALE PARCELLA FACILE PLUS INDICE

NAVIGAZIONE DEL SI-ERC: UTENTE PROGETTISTA

1. Manuale d uso per l interfaccia web di Gestione PEC2

Software Servizi Web UOGA

Integrazione del progetto CART regione Toscana nel software di CCE K2

La posta elettronica. Informazioni di base sul funzionamento

OSSERVATORIO REGIONALE CONTRATTI PUBBLICI DI LAVORI, SERVIZI E FORNITURE

Informatica per la comunicazione" - lezione 13 -

Console di Amministrazione Centralizzata Guida Rapida

Manuale di configurazione del client di posta Microsoft Outlook COME LEGGERE LA CASELLA PEC

COME CONFIGURARE LA PEC SU MICROSOFT OFFICE OUTLOOK 2007

SCOoffice Mail Connector for Microsoft Outlook. Guida all installazione Outlook 2002

Transcript:

MailServer Daniele Dolfini, Giovanni Franza, Neil Otupacca IPAP3 2010/2011 Relazione sulla costruzione del sistema di messaggeria elettronica. Parte relativa ai server Giovanni Franza Sono stati implementati tre servizi relativi alle tre modalità di accesso al servizio 1. SSL per accesso amministrativo 2. SMTP per l'inserimento dei messaggi 3. POP3 per la lettura dei messaggi Tutti i tre servizi sono stati implementati come classi che estendono la classe Thread, dato che la loro principale caratteristica è quella di funzionare indipendentemente. La classe principale del pacchetto (MailServer), che contiene il metodo main(), istanzia le tre classi SSL, SMTP, POP e le attiva utilizzando il metodo start(), disponibile in quanto le classi estendono Thread. La classe principale attende che un operatore dia un invio sulla console per terminare tutte le operazioni. In tutti e tre i servizi si ottiene un socket facendo uso di una factory (SSLSocketFactory per SSL e SocketFactory per SMTP e POP) in modo da semplificare al massimo le operazioni, sopratutto per ció che riguarda SSL. Ottenuto il socket ci si mette in attesa e, ricevuto una connessione, si attiva un Worker. Ogni worker estende la rispettiva classe (SSLWorker estende SSL, SMTPworker estende SMTP, POPWorker estende POP) e quindi Thread, per cui sono eseguibili in maniera asincrona e permettono quindi di non dover serializzare le richieste, operando quindi come un server reale. Tutti i Worker sono realizzati con la massima seplicità e sono classi separate a causa delle loro particolarità: SSLWorker individua una parte minimale degli header ovvero quello relativo al GET/POST dal quale puó reperire la parte interna della URL cercata e quello relativo al Content-Length indispensabile per la lettura dei dati che il POST accoda alla richiesta. SMTPWorker e POPWorker fanno entrambi uso di una macchina a stati finiti realizzata tramite una classe (StateManager) condivisa in quanto sufficentemente generica. La classe StateManager viene nutrita con oggetti di tipo Action che corrispondono alle azioni lecitamente richieste alla StateMachine. Per introdurre questi oggetti la classe StateMachine dispone di un metodo add( Action a ) il quale immagazzina l'azione e la mette in relazione con gli stati corretti. Ció viene fatto a partire da costanti simboliche (StateManager.SAME, StateManager.CHANGE, StateManager.ABORT) che definiscono le operazioni senza che sia necessario computare manualmente la tabella degli stati. La StateMachine ha inoltre un medodo nexthop( String data, Integer state ) che verifica la fattibilità del comando data ricevuto in relazione allo stato state. MailServer, pagina 1 di 5

Dato che in alcuni casi le verifiche sono complesse è stata introdotta una interfaccia ( ) la quale definisce due metodi ( verify( String, Object ) e getresponse( Object ) che permettono di eseguire verifiche e di dare risposte. Per essere chiari: quando il comando ricevuto identifica un utente ( comando USER di POP3 o comando RCPT TO: di SMTP ) occorre chiamare un opportuna classe per conoscere l'esistenza dell'utente. Ció viene fatto con una classe User che viene istanziata e passata come parametro di creazione della corrispondente Action. Tale classe ha un metodo verify al quale viene passato come primo parametro il nome dell'utente (in realtà l'indirizzo di email) ed un null come secondo parametro. La funzione cerca l'utente e, se esistente, ritorna un puntatore ad un oggetto persistente con i dati, come gestito dalla parte di gestione utenti, mailbos e persistenza preparata da Nello Otupacca. La scelta puó sembrare bizzarra ma la sua ratio si vede nella gestione del comando PASS al quale è abbinata la password: la Action relativa ha un puntatore ad un oggetto Pass che ha il metodo verify capace di comparare la password con quella immagazzinata nell'oggetto Mailbox individuato dalla classe User appena vista. Il passaggio dell'informazione tra le due Action è compito di StateManager il quale memorizza l'oggetto Mailbox tornato da User.verify() e lo ripropone come parametro a Pass.verify. In sostanza l'oggetto StateManager gestisce uno stato interno costituito dallo stato vero e proprio (livello del diaologo con il client) e dall'oggetto (mantenuto volutamente generico) che in questo caso indica la mailbox. Ovviamemte gli oggetti StateManager sono creati e configurati dagli oggetti POP e SMTP e poi sono ereditati dai relativi Workers che li duplicano per mantenere disaccopiati i relatii thread (ricordiamoci che lo StateManager contiene uno stato e quindi ne serve uno per ogni dialogo attivo perna in indescrivibile confusione che renderebbe l'applicazione non funzionante. Sistemati i protocolli POP e SMTP occorre tornare brevemente al protocollo SSL in quanto possiede un'altra particolarità. Per rendere piú sicuro possibile il protocollo le azioni di GET e POST non accedono al filesystem ma intergiscono con opportuni listener. Nell'attivare il protocollo SSL vengono registrati dei Listener (che devono implementare l'interfaccia ServerHandler). Quando il server SSL riceve una GET o una POST passa tutto il ricevuto (headers ed eventuali dati) come una stringa al metodo run( String ) del listener associato alla stringa interna alla URL ricevuta per poi ritrasmettere la stringa resa dal metodo al client. Ció rende piú robusto il server lasciandolo, allo stesso tempo, flessibile a sufficenza per introdurre nuove classi. Il compito di registrare gli handler è nella funzione Main nella già citata classe MailServer. MailServer, pagina 2 di 5

Il quadro complessivo delle classi realizzate è Classe Tipo Scopo MailServer Classe Attiva tutto il server SSL Classe Gestisce il protocollo SSL SMTP Classe Gestisce il protocollo SMTP POP Classe Gestisce il protocollo POP3 SSLWorker Classe Gestisce la singola connessione SSL SMTPWorker Classe Gestisce la singola ricezione di un messaggio in ingresso POPWorker Classe Gestisce il singolo dialogo con un client che scarica la sua mailbox StateManager Classe Gestisce lo stato di ogni dialogo POP3/SMTP Action Classe Gestisce la singola fase di ogni dialogo POP3/SMTP Interfaccia Gestisce i necessati controlli accessioni a particolari Action User Classe Gestisce identificazione Mailbox per SMTP e POP3 Pass Classe Gestisce autenticazione Mailbox per POP3 Stat Classe Reperisce le statistiche per Mailbox per POP3 List Classe Lista le mail contenute in una Mailbox per POP3 Uidl Classe Lista hash per le mail in una Mailbox per POP3 Retr Classe Reperisce una Mail in POP3 Dele Classe Cancella una Mail in POP3 Dump Classe Utile per debug POP3/SMTP ServerHandler Interfaccia Definisce un'interfaccia per il listener su SSL ServerEcho Classe Listener di debug per SSL Gerarchia delle classi Superclasse/Interfaccia Classe Sottoclasse Thread SSL SSLWorker Thread SMTP SMTPWorker Thread POP POPWorker StateManager Action User Pass Stat MailServer, pagina 3 di 5

ServerHandler List Uidl Dele Dump ServerEcho Composizioni Classe SSL SMTP POP SSLWorker SMTPWorker POPWorker Componenti HashMap<String,ServerHandler> StateManager, User StateManager, User, Pass, Stat, List, Uidl, Dele SSL, Socket SMTP, Socket Pop, Socket Users e Messages Neil Otupacca La parte di gestione degli utenti e dei messaggi è stata implementata principalmente con due classi: User e Message, queste ultime sono delle sottoclassi di PersistentObject la quale si occupa di rendere persistenti gli oggetti che identificano rispettivamente gli utenti e i propri messaggi. Allo stato attuale, la persistenza è realizzata tramite un database MySQL locale rispetto al server, ad ogni modo, le classi User e Message sono realizzate in modo da essere indipendenti dal tipo di persistenza utilizzata che, all occorrenza, potrebbe essere implementata su un altro supporto. Sebbene i messaggi di ogni utente siano salvati su un unica tabella messages (discriminati da una FOREIGN KEY che fa riferimento alla PRIMARY KEY dell utente stesso nella tabella users ), concettualmente i messaggi sono associati all utente proprietario per dipendenza diretta. Questo significa che i messaggi (i relativi oggetti) sono accessibili solo attraverso l utente proprietario e, di conseguenza, tramite l oggetto utente relativo. Sono inoltre disponibili due ulteriori classi di iterazione con le quali è possibili iterare la lista di tutti gli utenti e tutti i messaggi di un determinato utente. Suddetti iteratori sono ottenuti dalla classe User: con il metodo statico getuseriterator() si ottiene l iteratore per gli utenti, con getmessageiterator() invece, si ottiene l iteratore per i messaggi appartenenti all utente identificato dall oggetto user. Dato che il tipo di persistenza è trasparente alle classi User e Message, le operazioni di lettura, aggiornamento e scrittura su database sono implicite. Ergo, quando si crea ad esempio un oggetto utente, passando al suo costruttore le sue properties, l utente stesso viene aggiunto al database immediatamente; modificando tramite gli appositi setters i dati di un utente, tali modifiche vengono aggiornate nella relativa tabella, in sintesi, l oggetto in memoria è sempre consistente con la relativa immagine sul database. Le classi User e Message sono a disposizione sia per essere utilizzate in un contesto di richiesta via SMTP e POP, che per una richiesta HTTPS. MailServer, pagina 4 di 5

In quest ultimo caso, tra la ricezione di un messaggio HTTP e l eventuale interazione con User/Message si frappone la classe WebAdminPage che, dopo aver analizzato il tipo di richiesta, si avvale di tali classi. A fare da corollario alle due classi pricipali della sezione mailbox, sono state implementate svariate classi di utility per svolgere compiti di parsing sui dati in ricezione, eccone una breve descrizione: RFC822Parser Una volta istanziato un oggetto di questa classe, passando al suo constructor la stringa contenente il QTC (headers + body), è possibile estrarre varie informazioni quali ad esempio il subject, il mittente ecc. HTTPRequestParser Un oggetto di questo tipo viene istanziato passando al suo constructor la stringa della richiesta HTTP ricevuta. In seguito sarà possibile estrarre svariate informazioni indispensabili per l interpretazione della request. In particolar modo, sono disponibili i dettagli della URL, del metodo (GET/POST), gli headers e le variabili di GET/POST. FriendlyNameAddress MySQLDateFormatter Questa classe permette di determinare l indirizzo email da una indirizzo in formato FriendlyName, quindi Label<address>. Tramite questa classe è possibile formattare la data MySQL, con formato YYYY-MM-DD hh:mm:ss, in un formato definito da una stringa di formattazione. La stringa di formattazione, in stile printf(), è costituita da degli specificatori, introdotti dal carattere %, e da eventuale testo normale che viene restituito as-it-is. A completamento del progetto, sono state create delle classi di Exception per gestire tutti quei casi particolari o di errore che possono verificarsi nel corso dell utilizzo del MailServer. Infine, i test inseriti comprendono il metodo testgetuser() che presuppone la presenza di MySQL e della entry con l account del sottoscritto. WebAdminPage Daniele Dolfini La parte amministrativa della mailbox è fatta da delle pagina html statiche contenenti la struttura delle relative pagine e dei placeholder dove bisogna inserire delle informazioni su richiesta, e da tre classi che servono per leggere le pagine html, sostituire i placeholder e ritornare la pagina. La classe WebAdminPage si occupa di ricevere la richiesta della pagina voluta, chiama il metodo buildpage della classe BuildPage per generare la pagina con le informazioni richieste e ritorna il codice html della pagina come stringa. Attualmente ritorna sempre la stessa pagina, è stata creata la classe HTTRequestParser che dovrebbe venir usata da questa classe per sapere cosa è stato richiesto e ritornare le relative informazioni. La classe BuildPage si occupa di aprire il file contenente il codice html della pagina html richiesta, sostituire i placeholder con le informazioni necessarie, contenute in un hashmap, e ritornare la pagina html completa come stringa. Questa classe genera anche l hashmap, nella versione attuale del programma vengono gestite tre pagine, due che non necessitano sostituzioni, e che comunque contengono il placeholder <!-- ***noreplacement***--> che sarà la chiave dell hashmap e come valore avrà una sringa vuota, la terza pagina invece contiene il placeholder <!--***userlist***--> che come valore nell hashmap avrà la lista degli utenti che viene presa tramite i metodi della classe User. La classe FileIO contiene i metodi per leggere e scrivere file, nel nostro programma utilizziamo solo i metodi per leggere il codice html base. MailServer, pagina 5 di 5