E-mail: přidána EJB komponenta pro odesílání e-mailů.
authorFrantišek Kučera <franta-hg@frantovo.cz>
Tue Mar 23 10:33:36 2010 +0100 (2010-03-23)
changeset 79b04d98cf60dd
parent 78 77d86ffbf55b
child 80 ade4631809b9
E-mail: přidána EJB komponenta pro odesílání e-mailů.
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Adresa.java
java/nekurak.net-ejb/src/java/cz/frantovo/nekurak/email/Postak.java
     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 +}