Interval.cz
JavaServer Pages - JavaMail API

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.



Marek Branick² (19.2. 2003)

Redakce Interval.cz |  Inzerce na Interval.cz |  Hledßme novΘ autory ISSN 1212-8651 
 ⌐ Zoner software, s.r.o., vÜechna prßva vyhrazena, tento server dodr₧uje prßvnφ p°edpisy o ochran∞ osobnφch ·daj∙.