1213 serveis [5] Correu electronic i pagines web

Post on 01-Jul-2015

101 views 3 download

Transcript of 1213 serveis [5] Correu electronic i pagines web

SERVEIS

5 Correu electrònic i pàgines web

CORREU JavaMail

“Necessito enviar missatges de correu electrònic

des d’una aplicació Java..”

L’API JavaMail és una extensió estàndard per llegir, compondre i

enviar missatges electrònics.

Utilitzem aquest paquet per crear components tipus Mail User

Agent (MUA) similars a Outlook. JavaMail està dissenyat per enviar

i rebre missatges de correu electrònic.

Per portar a terme l’enviament de missatges de correu electrònic es

serveix de varis protocols (per exemple, SMTP, POP o IMAP).

CORREU Protocols

Protocols d’emmagatzematge de missatges: Llegir missatges

des d’un servidor.

IMAP (Internet Message Access Protocol, Protocol d’accés als

missatges per Internet).

POP (Post Office Protocol, Protocol de l’oficina de Correus).

Protocols de transport de missatges: Envia missatges a un

servidor

SMTP (Simple Mail Transfer Protocol, Protocol senzill de

Transferència de correus).

Extensions de multipropòsit de correus de Internet (MIME):

Estàndard per descriure els missatges de correu electrònic.

CORREU Protocols

El protocol SMTP és el protocol utilitzat per enviar

correus electrònics.

Els protocols POP o IMAP són els protocols dels

que ens servim per descarregar els missatges de

correu electrònic que es troben en el nostre

servidor de correu.

CORREU JavaMail

JavaMail permet l’enviament i la recpeció de missatges de

correu electrònic i ens proveeix de classes essencials per

realitzar aquestes tasques.

CORREU JavaMail: Classes principals

CORREU Estructura del missatge

CORREU javax.mail

Les classes bàsiques que componen l’API són:

Session Message Address Authenticator

Transport Store Folder

Totes aquestes classes es troben dins del

paquet javax.mail de l’API JavaMail.

CORREU javax.mail: Session

La configuració per un compte de Gmail per l’enviament de

correus electrònics és la següent:

Requereix usuari i contrasenya. L’usuari és el compte

de correu – exemple@gmail.com -.

Protocol smtp.

TLS, si es troba disponible.

Port 587 – com sabeu, per defecte no és el port de

SMTP.

CORREU javax.mail

Per l’enviament d’un correu electrònic mitjançant un

compte de Gmail com a servidor de correu utilitzarem

les següents classes:

Session Message Address Authenticator

Transport Store Folder

Totes aquestes classes es troben dins del

paquet javax.mail de l’API JavaMail.

CORREU javax.mail: Session

La classe session representa la nostra connexió amb el

servidor de correu electrònic – en el nostre cas, Gmail -.

S’obté amb el mètode Session.getDefaultInstance()

passant-li un paràmetre:

Un Properties amb les propietats de la connexió.

Properties és una classe de Java estàndard

java.util.Properties. En aquesta classe guardarem

dades – de tipus String – donant-lis un nom a cadascun

per poder recuperar-los.

Això ho fem mitjançant el mètode setProperty().

CORREU javax.mail: Session

Properties és una classe de Java estàndard

java.util.Properties. En aquesta classe guardarem dades –

de tipus String – donant-lis un nom a cadascun per poder

recuperar-los.

Properties p = new Properties( ); p.setProperty(“un nom”, “un valor”); p.setProperty(“PI”, “3.1416”);

Les Properties que necessiten Session són específiques, és

a dir, han de tenir uns noms concrets i uns possibles valors

concrets.

CORREU javax.mail: Session

Quines són les classes estrictament necessàries per

connectar-nos amb Gmail i poder enviar missatges?

Properties p = new Properties ( ); // Nom del host de correu – smtp.gmail.com – props.setProperty(“mail.smtp.host”, “smtp.gmail.com”); // TLS si es troba disponible props.setProperty(“mail.smtp.starttls.enable”, “true”); // Port de gmail per l’enviament de correus Props.setProperty(“mail.smtp.port”, “587”); // Nom de l’usuari Props.setProperty(“mail.smtp.user”, exemple@gmail.com); // Si requereix o no usuari i contrasenya per connectar-se Props.setProperty(“mail.smtp.auth”, “true”);

CORREU javax.mail: MimeMessage

Ara construirem un missatge senzill de text. Per això

instanciarem la classe MimeMessage i li posem varies

dades.

En el constructor haurem de passar l’objecte Session.

MimeMessage message = new MimeMessage(session);

Posarem, a continuació el FROM i el TO del missatge – és a

dir, qui l’envia i a qui va adreçat -. Per afegir aquestes dades

utilitzarem els mètodes setFrom() i addRecipient() de

MimeMessage i li posem varies dades.

CORREU javax.mail: MimeMessage

En el constructor de la classe InternetAddress introduirem

l’adreça de correu.

Pels destinataris utilitzarem el mètode addRecipient() de

MimeMessage.

Message.RecipientType.To Destinatari principal del missatge

Message.RecipientType.CC Destinatari al que s’envia còpia del missatge

Message.RecipientType.BCC Destinatari al que s’envia còpia oculta del

missatge

// Qui envia el correu message setFrom(new InternetAddress (exemple@gmail.com)); // A qui va adreçat Message.addRecipient(Message.RecipientType.TO, new InternetAddress(destinatari@domini.com));

CORREU javax.mail: MimeMessage

Ara ja podem omplir l’assumpte (subject) del missatge i el

text. Els mètodes que utilitzarem són setSubject() i setText().

Message.setSubject(“Hola”); Message.setText(“Missatget amb JavaMail” + “dels bons”);

També podriem crear el mateix text però amb text html i

amb floritures de negreta i cursiva.

message.setText(“Missatget amb JavaMail<br>” + “<b>dels</b> <i>bons</i>”, ISO-8859-1”, “html”);

CORREU javax.mail: Transport

Per enviar el missatge, utilitzem la classe Transport que

s’obté de Session.

El mètode getTransport() requereix un paràmetre String amb

el nom del protocol a utilitzar. Com el de Gmail és smtp,

posarem smtp.

Transport t = session.getTransport(“smtp”);

Ara establirem la connexió, donant el nom d’usuari i

contrasenya.

t.connect (exemple@gmail.com, “la contrasenya”);

CORREU javax.mail: Transport

Ara enviarem el missatge:

t.sendMessage(message, message.getAllRecipients());

t.close ();

El mètode per enviar missatges és sendMessage() i NO

solament send(). El mètode send() és estàtic i no té en

compte la connexió, l’usuari o la contrasenya.

Un cop haguem enviat el missatge, ja podrem tancar la

connexió.

CORREU JavaMail: Instal·lació

JavaMail és una llibreria desenvolupada per SUN

encaminada a l’enviament de correus electrònics

directament des de la nostra aplicació JAVA.

La instal·lació de la lliberia es pot realitzar mitjançant la

importació des de l’entorn de desenvolupament (Eclipse).

1) Descarreguem la lliberia (enllaç)

2) Accedim a les propietats del projecte amb el botó dret del ratolí.

3) Seleccionem l’opció “java Build Path” i accedim a l’opció “Add external

JARs”, busquem l’arxiu “mail.jar” que es troba dins de l’arxiu que

acabem de descarregar.

CORREU javax.mail & Gmail (1)

CORREU javax.mail & Gmail (2)

CORREU javax.mail & Gmail (3)

CORREU javax.mail & Gmail (4)

SSL i TLS Seguretat de la capa de transport

La TLS (Transport Layer Security, Seguretat de la Capa de

Transport) i la seva antecessora SSL (Secure Sockets Layer,

Capa de Sòcol Segur) són protocols criptogràfics que

proporcionen comunicacions segures per la xarxa.

...................

// TLS si es troba disponible props.setProperty(“mail.smtp.starttls.enable”, “true”); // Port de gmail per l’enviament de correus Props.setProperty(“mail.smtp.port”, “587”); // Nom de l’usuari Props.setProperty(“mail.smtp.user”, exemple@gmail.com); // Si requereix o no usuari i contrasenya per connectar-se Props.setProperty(“mail.smtp.auth”, “true”);

Servidor de correu sortint (SMTP) – necessita TLS o SSL:

smtp.gmail.com Utilitza autenticació: Sí Port per a TLS/STARTTLS: 587 Port per a SSL: 465

SSL i TLS Protocols criptogràfics

Per què s’utilitza el SSL?

• Perquè transferir informació important mitjançant una xarxa

pot ser d’alt risc en múltiples situacions com, per exemple,

davant la suplantació de la identitat.

SSL i TLS Protocols criptogràfics

• Actualment, el protocol criptogràfic SSL s’utilitza per protegir

tot tipus de comunicacions en l’àmbit de Internet,

principalment les connexions HTTPS.

• Una evolució del protocol SSL és el TLS.

• Tant SSL com TLS estan pensats per protegir les

comunicacions entre un client i un servidor.

• Els protocols ofereixen la possibilitat de xifrar les dades que

es transmeten per assegurar la confidencialitat.

SSL i TLS Protocols criptogràfics a Java

• Per utilitzar comunicacions xifrades a Java, hem de canviar

les classes java.net.Socket i java.net.serverSocket per

javax.net.ssl.SSLSocket i javax.net.ssl.SSLServerSocket.

• Només canviant les declaracions dels sockets i inicialitzant-

los com sockets SSL protegim les les comunicacions d’una

aplicació.

• La resta de línies del programa no han de ser modificades

per res.

SSL i TLS Protocols criptogràfics a Java

• Les classes javax.net.ssl.SSLSocket i

javax.net.ssl.SSLServerSocket són classes abstractes i, per

tant, no en podem crear objectes directament.

• Per crear objectes d’aquestes classes ho farem mitjançant

factories de sòcols. Les factories de sockets SSL venen

representades per les classes SSLSocketFactory i

SSLServerSocketFactory.

• Podrem crear una conneció SSL contra el host indicat

mitjançant el port indicat. Fariem el mateix pels sòcols de

servidor.

SSLSocketFactory ssf = (SSLSocketFactory)SSLSocketFactory.getDefault(); SSLSocket s = ssf.createSocket(host, port);

SSL i TLS KeyStores i TrustStores

• Ja tenim els sòcols creats. I ara, com ens autentiquem?

• El protocol SSL utilitza certificats X.509 per l’autenticació.

• Quan utilitzem factories de sockets “per defecte”, els

certificats d’autenticació (per identificar-se) es busquen al

disc, en arxius en format KeyStore.

• Una aplicació de xarxa que utilitzi SSL haurà de disposar

d’una KeyStore en disc on hi hagi el seu certificat i la seva

clau privada.

SSL i TLS KeyStores i TrustStores

• Si l’apliació estableix una comunicació i la part remota i

entrega un certificat, aquesta ha de decidir si el certificat

rebut és de confiança (trusted) o no.

• En les versions “per defecte” de SSL aquesta comprovació

també es realitza amb un KeyStore anomenat TrustStore.

• Si el certificat rebut es troba dins del TrustStore, llavors

s’accepta la comunicació. En cas contrari, es donaria un

error d’autenticació.

SSL i TLS KeyStores i TrustStores

• Un KeyStore conté claus privades i els certificats amb les seves

corresponents claus públiques. Solament és necessari si som un

servidor i requerim autenticació dels clients.

• Un TrustStore conté certificats d’altres parts amb les que esperem

comunicar-nos o d’Autoritats Certificadores en les que confiem per

identificar altres parts.

Web Llegint directament des d’una URL

• Mitjançant una crida al mètode

openStream () de la URL podem obtenir

un flux amb el que llegir el contingut de la

URL.

• El mètode openStream () retorna un

objecte java.io.InputStream que facilita la

lectura del contingut de la URL.

Web Classe URL

• Mitjançant el mètode openStream () podem establir un fluxe

d’entrada amb una URL (per exemple, http://www.yahoo.com/) per,

a continuació, obrir-hi un BufferedReader i llegir el contingut de la

URL.

Web URLConnection

• La classe URLConection és la superclasse abstracta de totes les

classes que representen la comunicació entre l’aplicació i una

URL.

• Un objecte d’aquest tipus es pot utilitzar per llegir des de i per

escriure cap al recurs al que fa referència l’objecte URL.

• La creació d’una connexió comporta:

1) S’obté un objecte URLConnection utilitzant el mètode openConnection() d’un

objecte URL.

2) S’estableixen els paràmetres i les propietats de la petició.

3) S’estableix la connexió utilitzant el mètode connect().

4) Es pot obtenir informació sobre la capçalera i/o obtenir el recurs remot.

Web URLConnection

Web Capturar una pàgina web (1)

Web Capturar una pàgina web (2)