39
SERVEIS 5 Correu electrònic i pàgines web

1213 serveis [5] Correu electronic i pagines web

Embed Size (px)

Citation preview

Page 1: 1213 serveis [5] Correu electronic i pagines web

SERVEIS

5 Correu electrònic i pàgines web

Page 2: 1213 serveis [5] Correu electronic i pagines 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).

Page 3: 1213 serveis [5] Correu electronic i pagines web

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.

Page 4: 1213 serveis [5] Correu electronic i pagines web

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.

Page 5: 1213 serveis [5] Correu electronic i pagines web

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.

Page 6: 1213 serveis [5] Correu electronic i pagines web

CORREU JavaMail: Classes principals

Page 7: 1213 serveis [5] Correu electronic i pagines web

CORREU Estructura del missatge

Page 8: 1213 serveis [5] Correu electronic i pagines web

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.

Page 9: 1213 serveis [5] Correu electronic i pagines web
Page 10: 1213 serveis [5] Correu electronic i pagines web

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 – [email protected] -.

Protocol smtp.

TLS, si es troba disponible.

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

SMTP.

Page 11: 1213 serveis [5] Correu electronic i pagines web

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.

Page 12: 1213 serveis [5] Correu electronic i pagines web

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().

Page 13: 1213 serveis [5] Correu electronic i pagines web

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.

Page 14: 1213 serveis [5] Correu electronic i pagines web

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”, [email protected]); // Si requereix o no usuari i contrasenya per connectar-se Props.setProperty(“mail.smtp.auth”, “true”);

Page 15: 1213 serveis [5] Correu electronic i pagines web

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.

Page 16: 1213 serveis [5] Correu electronic i pagines web

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 ([email protected])); // A qui va adreçat Message.addRecipient(Message.RecipientType.TO, new InternetAddress([email protected]));

Page 17: 1213 serveis [5] Correu electronic i pagines web

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”);

Page 18: 1213 serveis [5] Correu electronic i pagines web

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 ([email protected], “la contrasenya”);

Page 19: 1213 serveis [5] Correu electronic i pagines web

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ó.

Page 20: 1213 serveis [5] Correu electronic i pagines web

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.

Page 21: 1213 serveis [5] Correu electronic i pagines web

CORREU javax.mail & Gmail (1)

Page 22: 1213 serveis [5] Correu electronic i pagines web

CORREU javax.mail & Gmail (2)

Page 23: 1213 serveis [5] Correu electronic i pagines web

CORREU javax.mail & Gmail (3)

Page 24: 1213 serveis [5] Correu electronic i pagines web

CORREU javax.mail & Gmail (4)

Page 25: 1213 serveis [5] Correu electronic i pagines web

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”, [email protected]); // 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

Page 26: 1213 serveis [5] Correu electronic i pagines web

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.

Page 27: 1213 serveis [5] Correu electronic i pagines web

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.

Page 28: 1213 serveis [5] Correu electronic i pagines web

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.

Page 29: 1213 serveis [5] Correu electronic i pagines web

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);

Page 30: 1213 serveis [5] Correu electronic i pagines web

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.

Page 31: 1213 serveis [5] Correu electronic i pagines web

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ó.

Page 32: 1213 serveis [5] Correu electronic i pagines web

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.

Page 33: 1213 serveis [5] Correu electronic i pagines web
Page 34: 1213 serveis [5] Correu electronic i pagines web

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.

Page 35: 1213 serveis [5] Correu electronic i pagines web

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.

Page 36: 1213 serveis [5] Correu electronic i pagines web

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.

Page 37: 1213 serveis [5] Correu electronic i pagines web

Web URLConnection

Page 38: 1213 serveis [5] Correu electronic i pagines web

Web Capturar una pàgina web (1)

Page 39: 1213 serveis [5] Correu electronic i pagines web

Web Capturar una pàgina web (2)