Gestione delle E-Mail da inviare ai Client
La gestione delle e-mail spedite ai client per inviare loro i risultati delle ricerche effettuate e' affidata alla classe
gestoreMail. Ogni istanza di questa classe contiene l'indirizzo
e-mail di un client che ha effettuato una richiesta e mette a disposizione 2 metodi:
- checkMail: questo metodo controlla la validita' dell'indirizzo e-mail contenuto
nell'istanza corrispondente. Il controllo non e' solo sintattico (esistenza di '@' o meno): infatti, viene
contattato l'host specificato nell'indirizzo sulla porta TCP 25 (servizio SMTP) e vengono inviati i seguenti
comandi:
- helo indirizzo_mittente // saluta il server
- vrfy user // controlla l'esistenza dell'account dell'utente specificato nell'indirizzo
A seconda della risposta del server il metodo ritorna true (l'indirizzo e' valido)
o false (l'indirizzo non e' valido).
Si suppone che sull'host contattato sia presente un server SMTP e, soprattutto, che il comando vrfy funzioni correttamente
(nella realta' per motivi di sicurezza esso risulta essere disabilitato o ritorna sempre una risposta positiva).
- sendMail(nomeFile): questo metodo invia la mail contenente i risultati di una
ricerca (file 'nomeFile') o un messaggio di errore (nel caso in cui 'nomeFile' sia "errore").
Anche in questo caso viene contattato l'host sulla porta TCP 25 e vengono inviati al server i seguenti comandi:
- helo indirizzo_mittente // saluto
- mail from: result@treesearch.org // mittente
- rcpt to: destinazione // destinatario
- data // inizio dati
- To: destinazione
- Subject: TreeSearch Result
- ... dati o messaggio di errore ...
- .
- quit
(in caso di successo sendMail ritorna 0, altrimenti -1)
Osservazione: si e' osservato che affinche' tutto funzioni correttamente
e' necessario leggere sempre tutti i messaggi di risposta del server SMTP prima di chiudere la connessione,
anche se questi non interessano (le prove sono state effettuate con il server di posta SendMail).
Nota: l'invio delle e-mail puo' essere disabilitato mediante la costante ConstantsM.useMail
e in questo caso i due metodi menzionati ritornano sempre un valore si successo.