JavaServer Pages – JavaMail API

19. února 2003

Pýtate sa, čo je to JavaMail API? Je to API na tvorbu a modelovanie mailových systémov v jazyku Java. Pomocou tohto rozhrania (a v spolupráci s inými) je možné vytvoriť mailový server alebo mailového klienta. V tomto článku si ukážeme ako využiť Javu na posielanie mailov.

JavaMail API má implementované najbežnejšie protokoly, používané pri práci s elektronickou poštou a poskytuje jednoduché a efektívne nástroje na ich používanie. Pomocou tohto API je možné vytvoriť pomerne komplikované aplikácie na správu elektronickej pošty a prácu s ňou.

Čo potrebujeme?

V prvom rade stiahnuť alebo inak získať a nainštalovať samotné JavaMail API. Avšak ja odporúčam stiahnuť si a nainštalovať J2EE (Java 2 Enterprise Edition), ak ho ešte nemáte. V J2EE je JavaMail API už zabudované. Druhú možnosť odporúčam urobiť aj preto, pretože súčasťou J2EE je aj JAF (JavaBeans Activation Framework), čo sú triedy nevyhnutné na to, aby ste mohli používať JavaMail API. Preto ak ste zvolili prvú variantu (inštalácia JavaMail API), je nutné si nainštalovať aj JavaBeans Activation Framework. Ďalej potrebujeme servlet kontajner, ktorý bude obsluhovať naše požiadavky na stránky JSP. Ak ste ešte nečítali seriál o programovaní dynamických stránok JSP, v článku o konfigurácii JSP nájdete informácie ako si nainštalovať a spustiť referenčnú implementáciu servletov – Tomcat.

Začíname

Ak máme splnené dve hore uvedené podmienky, je čas otestovať či máme JavaMail API k dispozícii. Vytvorte si novú stránku JSP a umiestnite do nej tieto tri riadky. Podhoďte stránku Tomcatu a dajte si ju zobraziť. Ak je všetko v poriadku, uvidíte samozrejme len vetu JavaMail API je vám plne k dispozícii.

<%@ page import=“javax.mail.*“ %>
<%@ page import=“javax.activation.*“ %>
JavaMail API je vám plne k dispozícii.

JavaMail API nie je viazané na jeden komunikačný protokol. Je vecou programátora, ktorý si vyberie. Správy, posielanie správ, prijímanie správ a podobne je reprezentované pomocou abstraktných objektov. Teda ak porozumieme objektom používaným pri práci s poštou, môžeme s ňou pracovať pomocou rôznych protokolov. Pred tvorbou aplikácie je treba sa oboznámiť s niektorými typmi objektov, ktoré neskôr využijeme.

Session

Trieda javax.mail.Session reprezentuje emailovú session. Každá aplikácia používajúca JavaMail API musí vytvoriť minimálne jeden objekt tejto triedy. Samozrejme ak potrebuje, môže vytvoriť takýchto objektov viac. Objekt session súvisí s objektom triedy java.util.Properties. Pomocou tohto objektu nastavíme pre príslušnú session parametre. V našom príklade použijeme parameter „mail.smtp.host“, ktorý špecifikuje konkrétny SMTP email server. Je možné zadať ďalšie, napríklad mail.transport.protocol, mail.host, mail.user a mail.from.

Properties props = new Properties ();
props.put(„mail.smtp.host“, „váš.smtp.host“);

Teraz, keď máme objekt props vytvorený, môžeme vytvoriť session.

Session mySession;
mySession = Session.getInstance(props);

Message

Trieda javax.mail.Message reprezentuje všetko, čo súvisí so správou (emailom). Je to abstraktná trieda a musí byť implementovaná jednou z jej podtried. Konkrétne pre Message je to trieda javax.mail.internet.MimeMessage. Objekt triedy MimeMessage reprezentuje MIME (Multipurpose Internet Mail Extensions) email. Objekt message je previazaný s konkrétnou session.

Message message = new MimeMessage(mySession);

Ak máte vytvorený objekt message, môžete zavolať množstvo jeho set/get metód a tak vyskladať správu. Bežný email by mal obsahovať v hlavičke adresáta správy, predmet správy, prípadne adresy typu CC (carbon copy) a BCC (blind carbon copy). Správa by mala samozrejme obsahovať aj telo, teda nejaký textový obsah. Trieda MimeMessage úzko súvisí s triedou javax.mail.internet.InternetAddress. Pomocou tejto triedy musíme skonštruovať správnu emailovú adresu.

InternetAddress from = new InternetAddress(„niekto@niekde.com“);
InternetAddress to = new InternetAddress(„niekto@niekde.cz“);
message.setFrom(from);
message.addRecipient(Message.RecipientType.TO,to);
message.setSubject(„Predmet správy“);
message.setText(„Telo správy“);

Transport

Trieda javax.mail.Transport sa postará o poslanie emailovej správy. Aj objekt tejto triedy súvisí s objektom session.

Transport transport = mySession.getTransport(„smtp“);
transport.send(message); //pošle mail na SMTP server

Parameter „smtp“ typu String, ktorý predávame metóde getTransport(), deklaruje protokol vráteného objektu typu Transport. Java momentálne podporuje pri práci s poštou protokoly SMTP, POP3 a IMAP. V budúcnosti možno pribudnú ďalšie.

Príklad na záver

Ide o jednoduchý príklad stránky JSP, z ktorej sa pošle mail na konkrétnu adresu. Je to zároveň zosumarizovanie predošlých riadkov.

<!DOCTYPE HTML PUBLIC „-//W3C//DTD HTML 4.01 Transitional//EN“>
<html>
 <head>
 <%@ page import=“javax.mail.*“ %>
 <%@ page import=“javax.activation.*“ %>
 <%@ page import=“java.util.*“ %>
 <%@ page import=“javax.mail.internet.*“ %>
 </head>
<body>
<%
 Properties props = new Properties();
 props.put(„mail.smtp.host“, „smtp.host“);
 
 Session s = Session.getInstance(props);
 Message message = new MimeMessage(s);
 
 InternetAddress from = new InternetAddress(„niekto@niekde.sk“);
 InternetAddress to = new InternetAddress(„niekto@niekde.sk“);
 message.setFrom(from);
 message.addRecipient(Message.RecipientType.TO, to);
 
 message.setSubject(„JavaMail API.“);
 message.setText(„JavaMail work!“);
 
 Transport t = s.getTransport(„smtp“);
 t.send(message);
%>
<p align=“center“>Mail bol úspešne poslaný.</p>
<p align=“center“>
 <a href=“test_mail.jsp“>Kliknite sem ak chcete poslať ďalší!</a></p>
</body>
</html>

Skúste si stiahnuť príklad a obohatiť ho o formulár, v ktorom bude možné zadať odosielateľa, adresáta, subject a text správy. Po odoslaní formulára sa pošle mail na zadanú adresu. Aby ste si mohli príklad vyskúšať, musíte mať prístup na mailový server.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Další článek ewords.kvalitne.cz
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *