# HG changeset patch # User František Kučera # Date 1269336816 -3600 # Node ID b04d98cf60dda85cab4b5f5eab5f407245e6f24b # Parent 77d86ffbf55bd9569a1a96a9396077d02b884d86 E-mail: přidána EJB komponenta pro odesílání e-mailů. diff -r 77d86ffbf55b -r b04d98cf60dd java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Adresa.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Adresa.java Tue Mar 23 10:33:36 2010 +0100 @@ -0,0 +1,29 @@ +package cz.frantovo.nekurak.email; + +import cz.frantovo.nekurak.vyjimky.NekurakVyjimka; +import java.io.UnsupportedEncodingException; +import javax.mail.internet.InternetAddress; + +/** + * Obalová třída, abychom předešli prosakování abstrakce. + * Konstruktor InternetAddress totiž může vyhodit UnsupportedEncodingException výjimku, + * která nás na téhle úrovni ale nezajímá. + */ +public class Adresa { + + private String jmeno; + private String email; + + public Adresa(String email, String jmeno) { + this.email = email; + this.jmeno = jmeno; + } + + public InternetAddress getInternetAddress() throws NekurakVyjimka { + try { + return new InternetAddress(email, jmeno); + } catch (UnsupportedEncodingException e) { + throw new NekurakVyjimka("Chyba při převodu na InternetAddress", e); + } + } +} diff -r 77d86ffbf55b -r b04d98cf60dd java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java Tue Mar 23 10:33:36 2010 +0100 @@ -0,0 +1,55 @@ +package cz.frantovo.nekurak.email; + +import cz.frantovo.nekurak.vyjimky.NekurakVyjimka; +import java.util.logging.Logger; +import java.util.regex.Pattern; +import javax.annotation.Resource; +import javax.ejb.LocalBean; +import javax.ejb.Stateless; +import javax.mail.Message.RecipientType; +import javax.mail.Session; +import javax.mail.Transport; +import javax.mail.internet.MimeMessage; + +/** + * Nízkoúrovňová komponenta sloužící k odesílání e-mailů. + * @author fiki + */ +@Stateless +@LocalBean +public class Postak { + + @Resource(lookup = "mail/nekurak.net") + Session smtpRelace; + private static final Logger log = Logger.getLogger(Postak.class.getSimpleName()); + private static String REGULARNI_EMAIL = "^[_a-zA-Z0-9\\.\\-]+@[_a-zA-Z0-9\\.\\-]+\\.[a-zA-Z]{2,4}$"; + + public void odesliZpravu(Adresa komu, Adresa od, String predmet, String text) throws NekurakVyjimka { + + try { + MimeMessage mimeZprava = new MimeMessage(smtpRelace); + + mimeZprava.addRecipient(RecipientType.TO, komu.getInternetAddress()); + if (od != null) { + mimeZprava.setFrom(od.getInternetAddress()); + } + mimeZprava.setSubject(predmet); + mimeZprava.setText(text, "UTF-8"); + + Transport.send(mimeZprava); + log.info("Zpráva pro " + komu + " byla odeslána."); + } catch (Exception e) { + throw new NekurakVyjimka("Selhalo odesílání e-mailu pro: " + komu, e); + } + + } + + /** + * Zkontroluje e-mailovou adresu + * @param email adresa typu abcd@example.com + * @return true, pokud e-mail vyhovuje regulárnímu výrazu pro e-maily + */ + public boolean isAdresaOk(String email) { + return email != null && Pattern.matches(REGULARNI_EMAIL, email); + } +}