Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

1213 serveis [5] Correu electronic i pagines web

216 views

Published on

  • Be the first to comment

  • Be the first to like this

1213 serveis [5] Correu electronic i pagines web

  1. 1. SERVEIS 5 Correu electrònic i pàgines web
  2. 2. 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).
  3. 3. 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.
  4. 4. 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.
  5. 5. 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.
  6. 6. CORREUJavaMail: Classes principals
  7. 7. CORREUEstructura del missatge
  8. 8. 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.
  9. 9. 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.
  10. 10. 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.
  11. 11. 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().
  12. 12. 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.
  13. 13. CORREU javax.mail: SessionQuines són les classes estrictament necessàries perconnectar-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”);
  14. 14. 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.
  15. 15. 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 correumessage setFrom(new InternetAddress (exemple@gmail.com));// A qui va adreçatMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(destinatari@domini.com));
  16. 16. 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”);
  17. 17. 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”);
  18. 18. CORREU javax.mail: Transport Ara enviarem el missatge: t.sendMessage(message, message.getAllRecipients());  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ó. t.close ();
  19. 19. 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.
  20. 20. CORREUjavax.mail & Gmail (1)
  21. 21. CORREUjavax.mail & Gmail (2)
  22. 22. CORREUjavax.mail & Gmail (3)
  23. 23. CORREUjavax.mail & Gmail (4)
  24. 24. SSL i TLS Seguretat de la capa de transportLa TLS (Transport Layer Security, Seguretat de la Capa deTransport) i la seva antecessora SSL (Secure Sockets Layer,Capa de Sòcol Segur) són protocols criptogràfics queproporcionen 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”, de correu sortint Servidor exemple@gmail.com); smtp.gmail.com (SMTP) – necessita TLS o SSL: Utilitza autenticació: Sí // Si requereix o no usuari i contrasenya per connectar-se Props.setProperty(“mail.smtp.auth”, “true”); Port per a TLS/STARTTLS: 587 Port per a SSL: 465
  25. 25. 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.
  26. 26. 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.
  27. 27. 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.
  28. 28. 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. SSLSocketFactory ssf = (SSLSocketFactory)SSLSocketFactory.getDefault(); SSLSocket s = ssf.createSocket(host, port);• Podrem crear una conneció SSL contra el host indicat mitjançant el port indicat. Fariem el mateix pels sòcols de servidor.
  29. 29. 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.
  30. 30. 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ó.
  31. 31. 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.
  32. 32. 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.
  33. 33. 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.
  34. 34. 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.•
  35. 35. WebURLConnection
  36. 36. WebCapturar una pàgina web (1)
  37. 37. WebCapturar una pàgina web (2)

×