E-mail: přidána EJB komponenta pro odesílání e-mailů.
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Adresa.java Tue Mar 23 10:33:36 2010 +0100
1.3 @@ -0,0 +1,29 @@
1.4 +package cz.frantovo.nekurak.email;
1.5 +
1.6 +import cz.frantovo.nekurak.vyjimky.NekurakVyjimka;
1.7 +import java.io.UnsupportedEncodingException;
1.8 +import javax.mail.internet.InternetAddress;
1.9 +
1.10 +/**
1.11 + * Obalová třída, abychom předešli prosakování abstrakce.
1.12 + * Konstruktor InternetAddress totiž může vyhodit UnsupportedEncodingException výjimku,
1.13 + * která nás na téhle úrovni ale nezajímá.
1.14 + */
1.15 +public class Adresa {
1.16 +
1.17 + private String jmeno;
1.18 + private String email;
1.19 +
1.20 + public Adresa(String email, String jmeno) {
1.21 + this.email = email;
1.22 + this.jmeno = jmeno;
1.23 + }
1.24 +
1.25 + public InternetAddress getInternetAddress() throws NekurakVyjimka {
1.26 + try {
1.27 + return new InternetAddress(email, jmeno);
1.28 + } catch (UnsupportedEncodingException e) {
1.29 + throw new NekurakVyjimka("Chyba při převodu na InternetAddress", e);
1.30 + }
1.31 + }
1.32 +}
2.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
2.2 +++ b/java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java Tue Mar 23 10:33:36 2010 +0100
2.3 @@ -0,0 +1,55 @@
2.4 +package cz.frantovo.nekurak.email;
2.5 +
2.6 +import cz.frantovo.nekurak.vyjimky.NekurakVyjimka;
2.7 +import java.util.logging.Logger;
2.8 +import java.util.regex.Pattern;
2.9 +import javax.annotation.Resource;
2.10 +import javax.ejb.LocalBean;
2.11 +import javax.ejb.Stateless;
2.12 +import javax.mail.Message.RecipientType;
2.13 +import javax.mail.Session;
2.14 +import javax.mail.Transport;
2.15 +import javax.mail.internet.MimeMessage;
2.16 +
2.17 +/**
2.18 + * Nízkoúrovňová komponenta sloužící k odesílání e-mailů.
2.19 + * @author fiki
2.20 + */
2.21 +@Stateless
2.22 +@LocalBean
2.23 +public class Postak {
2.24 +
2.25 + @Resource(lookup = "mail/nekurak.net")
2.26 + Session smtpRelace;
2.27 + private static final Logger log = Logger.getLogger(Postak.class.getSimpleName());
2.28 + private static String REGULARNI_EMAIL = "^[_a-zA-Z0-9\\.\\-]+@[_a-zA-Z0-9\\.\\-]+\\.[a-zA-Z]{2,4}$";
2.29 +
2.30 + public void odesliZpravu(Adresa komu, Adresa od, String predmet, String text) throws NekurakVyjimka {
2.31 +
2.32 + try {
2.33 + MimeMessage mimeZprava = new MimeMessage(smtpRelace);
2.34 +
2.35 + mimeZprava.addRecipient(RecipientType.TO, komu.getInternetAddress());
2.36 + if (od != null) {
2.37 + mimeZprava.setFrom(od.getInternetAddress());
2.38 + }
2.39 + mimeZprava.setSubject(predmet);
2.40 + mimeZprava.setText(text, "UTF-8");
2.41 +
2.42 + Transport.send(mimeZprava);
2.43 + log.info("Zpráva pro " + komu + " byla odeslána.");
2.44 + } catch (Exception e) {
2.45 + throw new NekurakVyjimka("Selhalo odesílání e-mailu pro: " + komu, e);
2.46 + }
2.47 +
2.48 + }
2.49 +
2.50 + /**
2.51 + * Zkontroluje e-mailovou adresu
2.52 + * @param email adresa typu abcd@example.com
2.53 + * @return true, pokud e-mail vyhovuje regulárnímu výrazu pro e-maily
2.54 + */
2.55 + public boolean isAdresaOk(String email) {
2.56 + return email != null && Pattern.matches(REGULARNI_EMAIL, email);
2.57 + }
2.58 +}