fr.gouv.culture.thesaurus.util.MailUtil.java Source code

Java tutorial

Introduction

Here is the source code for fr.gouv.culture.thesaurus.util.MailUtil.java

Source

/*
* This software is governed by the CeCILL-B license under French law and
* abiding by the rules of distribution of free software. You can use,
* modify and/or redistribute the software under the terms of the CeCILL-B
* license as circulated by CEA, CNRS and INRIA at the following URL
* "http://www.cecill.info".
*
* As a counterpart to the access to the source code and rights to copy,
* modify and redistribute granted by the license, users are provided only
* with a limited warranty and the software's author, the holder of the
* economic rights, and the successive licensors have only limited
* liability.
*
* In this respect, the user's attention is drawn to the risks associated
* with loading, using, modifying and/or developing or reproducing the
* software by the user in light of its specific status of free software,
* that may mean that it is complicated to manipulate, and that also
* therefore means that it is reserved for developers and experienced
* professionals having in-depth computer knowledge. Users are therefore
* encouraged to load and test the software's suitability as regards their
* requirements in conditions enabling the security of their systems and/or
* data to be ensured and, more generally, to use and operate it in the
* same conditions as regards security.
*
* The fact that you are presently reading this means that you have had
* knowledge of the CeCILL-B license and that you accept its terms.
*/

package fr.gouv.culture.thesaurus.util;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.activation.DataSource;
import javax.mail.Session;
import javax.mail.util.ByteArrayDataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.apache.commons.validator.routines.EmailValidator;
import org.apache.log4j.Logger;

/**
 * Classe fournissant des mthodes utilitaires pour la gestion des emails.
 * 
 * @author dhazard
 */
public class MailUtil {

    private static final Logger log = Logger.getLogger(MailUtil.class);

    private static final Pattern EMAIL_PATTERN = Pattern.compile("^[^\\<\\>]*\\<([^\\<\\>]*)\\>$",
            Pattern.CASE_INSENSITIVE);

    /**
     * ContentType par dfaut pour les pices jointes.
     */
    public static final String DEFAULT_ATTACHMENT_CONTENT_TYPE = "application/octet-stream";

    private static String hostProperty;

    private static String defaultFrom;

    private static String subjectPrefix;

    private String from;
    private List<String> to = new ArrayList<String>();
    private List<String> cc = new ArrayList<String>();
    private List<String> cci = new ArrayList<String>();

    private String subject;

    private String message;
    private String html;

    private String charset;

    private List<AttachmentBean> attachments = new ArrayList<AttachmentBean>();

    /**
     * Constructeur.
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param cci
     *            Liste des adresses des destinataires cachs.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @param charset
     *            message charset
     */
    private MailUtil(String from, List<String> to, List<String> cc, List<String> cci, String subject,
            String message, String html, String charset) {
        super();
        this.from = from;
        this.to = to;
        this.cc = cc;
        this.cci = cci;
        this.subject = subject;
        this.message = message;
        this.html = html;
        this.charset = charset;
    }

    // Email Simple

    /**
     * Cre et retorune un email "simple".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param cci
     *            Liste des adresses des destinataires cachs.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getSimpleMail(String from, List<String> to, List<String> cc, List<String> cci,
            String subject, String message) {
        return new MailUtil(from, to, cc, cci, subject, message, null, null);
    }

    /**
     * Cre et retorune un email "simple".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getSimpleMail(String from, List<String> to, List<String> cc, String subject,
            String message) {
        return getSimpleMail(from, to, cc, null, subject, message);
    }

    /**
     * Cre et retorune un email "simple".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getSimpleMail(String from, List<String> to, String subject, String message) {
        return getSimpleMail(from, to, null, null, subject, message);
    }

    /**
     * Cre et retorune un email "simple".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param cci
     *            Liste des adresses des destinataires cachs.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getSimpleMail(List<String> to, List<String> cc, List<String> cci, String subject,
            String message) {
        return getSimpleMail(null, to, cc, cci, subject, message);
    }

    /**
     * Cre et retorune un email "simple".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getSimpleMail(List<String> to, List<String> cc, String subject, String message) {
        return getSimpleMail(null, to, cc, null, subject, message);
    }

    /**
     * Cre et retorune un email "simple".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getSimpleMail(List<String> to, String subject, String message) {
        return getSimpleMail(null, to, null, null, subject, message);
    }

    /**
     * Cre et retorune un email "simple".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            adresse du destinataire principal.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param cci
     *            Liste des adresses des destinataires cachs.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getSimpleMail(String from, String to, List<String> cc, List<String> cci, String subject,
            String message) {
        List<String> toList = new ArrayList<String>(1);
        toList.add(to);
        return getSimpleMail(from, toList, cc, cci, subject, message);
    }

    /**
     * Cre et retorune un email "simple".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            adresse du destinataire principal.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getSimpleMail(String from, String to, String subject, String message) {
        return getSimpleMail(from, to, null, null, subject, message);
    }

    /**
     * Cre et retorune un email "simple".
     * 
     * @param to
     *            adresse du destinataire principal.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getSimpleMail(String to, String subject, String message) {
        return getSimpleMail(null, to, null, null, subject, message);
    }

    // Email HTML

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param cci
     *            Liste des adresses des destinataires cachs.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @param charset
     *            message charset
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, List<String> to, List<String> cc, List<String> cci,
            String subject, String message, String html, String charset) {
        return new MailUtil(from, to, cc, cci, subject, message, html, charset);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, List<String> to, List<String> cc, String subject,
            String message, String html) {
        return getHtmlMail(from, to, cc, null, subject, message, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param cci
     *            Liste des adresses des destinataires cachs.
     * @param subject
     *            Sujet du mail
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, List<String> to, List<String> cc, List<String> cci,
            String subject, String html) {
        return getHtmlMail(from, to, cc, cci, subject, null, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, List<String> to, String subject, String message, String html) {
        return getHtmlMail(from, to, null, null, subject, message, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @param charset
     *            message charset
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, List<String> to, String subject, String message, String html,
            String charset) {
        return getHtmlMail(from, to, null, null, subject, message, html, charset);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param subject
     *            Sujet du mail
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, List<String> to, List<String> cc, String subject, String html) {
        return getHtmlMail(from, to, cc, null, subject, null, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param subject
     *            Sujet du mail
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, List<String> to, String subject, String html) {
        return getHtmlMail(from, to, null, null, subject, null, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param cci
     *            Liste des adresses des destinataires cachs.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(List<String> to, List<String> cc, List<String> cci, String subject,
            String message, String html) {
        return getHtmlMail(null, to, cc, cci, subject, message, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(List<String> to, List<String> cc, String subject, String message,
            String html) {
        return getHtmlMail(null, to, cc, null, subject, message, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param cci
     *            Liste des adresses des destinataires cachs.
     * @param subject
     *            Sujet du mail
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(List<String> to, List<String> cc, List<String> cci, String subject,
            String html) {
        return getHtmlMail(null, to, cc, cci, subject, null, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(List<String> to, String subject, String message, String html) {
        return getHtmlMail(null, to, null, null, subject, message, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @param charset
     *            message charset
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(List<String> to, String subject, String message, String html,
            String charset) {
        return getHtmlMail(null, to, null, null, subject, message, html, charset);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param subject
     *            Sujet du mail
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(List<String> to, List<String> cc, String subject, String html) {
        return getHtmlMail(null, to, cc, null, subject, null, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param to
     *            Liste des adresses des destinataires principaux.
     * @param subject
     *            Sujet du mail
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(List<String> to, String subject, String html) {
        return getHtmlMail(null, to, null, null, subject, null, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            adresse du destinataire principal.
     * @param cc
     *            Liste des adresses des destinataires secondaires.
     * @param cci
     *            Liste des adresses des destinataires cachs.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @param charset
     *            message charset
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, String to, List<String> cc, List<String> cci, String subject,
            String message, String html, String charset) {
        List<String> toList = new ArrayList<String>(1);
        toList.add(to);
        return getHtmlMail(from, toList, cc, cci, subject, message, html, charset);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            adresse du destinataire principal.
     * @param subject
     *            Sujet du mail
     * @param message
     *            message en texte brut
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, String to, String subject, String message, String html) {
        return getHtmlMail(from, to, null, null, subject, message, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param from
     *            adresse email de l'expditeur.
     * @param to
     *            adresse du destinataire principal.
     * @param subject
     *            Sujet du mail
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String from, String to, String subject, String html) {
        return getHtmlMail(from, to, null, null, subject, null, html, null);
    }

    /**
     * Cre et retorune un email au format "HTML".
     * 
     * @param to
     *            adresse du destinataire principal.
     * @param subject
     *            Sujet du mail
     * @param html
     *            message HTML
     * @return un objet mail pret  l'envoi
     */
    public static MailUtil getHtmlMail(String to, String subject, String html) {
        return getHtmlMail(null, to, null, null, subject, null, html, null);
    }

    // Ajout de PJs

    /**
     * Ajoute une pice jointe  l'email courant.
     * 
     * @param data
     *            les donnes binaires de la pice jointe
     * @param contentType
     *            le type de contenu
     * @param fileName
     *            le nom du fichier
     * @param description
     *            la description
     * @throws IOException
     *             Erreur de lecture des donnes binaires.
     */
    public void addAttachment(byte[] data, String contentType, String fileName, String description)
            throws IOException {
        attachments.add(new AttachmentBean(new ByteArrayDataSource(data, contentType), fileName, description));
    }

    /**
     * Ajoute une pice jointe  l'email courant.
     * 
     * @param data
     *            le flux d'entre des donnes de la pice jointe
     * @param contentType
     *            le type de contenu
     * @param fileName
     *            le nom du fichier
     * @param description
     *            la description
     * @throws IOException
     *             Erreur de lecture des donnes binaires.
     */
    public void addAttachment(InputStream data, String contentType, String fileName, String description)
            throws IOException {
        attachments.add(new AttachmentBean(new ByteArrayDataSource(data, contentType), fileName, description));
    }

    /**
     * Ajoute une pice jointe  l'email courant en utilisant le
     * {@link MailUtil#DEFAULT_ATTACHMENT_CONTENT_TYPE content type par dfaut}.
     * 
     * @param data
     *            les donnes binaires de la pice jointe
     * @param fileName
     *            le nom du fichier
     * @param description
     *            la description
     * @throws IOException
     *             Erreur de lecture des donnes binaires.
     */
    public void addAttachment(byte[] data, String fileName, String description) throws IOException {
        addAttachment(data, DEFAULT_ATTACHMENT_CONTENT_TYPE, fileName, description);
    }

    /**
     * Ajoute une pice jointe  l'email courant en utilisant le
     * {@link MailUtil#DEFAULT_ATTACHMENT_CONTENT_TYPE content type par dfaut}.
     * 
     * @param data
     *            le flux d'entre des donnes de la pice jointe
     * @param fileName
     *            le nom du fichier
     * @param description
     *            la description
     * @throws IOException
     *             Erreur de lecture des donnes binaires.
     */
    public void addAttachment(InputStream data, String fileName, String description) throws IOException {
        addAttachment(data, DEFAULT_ATTACHMENT_CONTENT_TYPE, fileName, description);
    }

    // Envoi

    /**
     * 
     * Envoi l'email.
     * 
     * @throws EmailException
     *             Erreur lors de l'envoi de l'email.
     */
    public void send() throws EmailException {

        if (hostProperty == null) {
            log.error("Session email non initialise : envoi des emails impossible.");
            return;
        }

        HtmlEmail email = new HtmlEmail();
        email.setHostName(hostProperty);

        // To
        if (to != null) {
            for (String adresse : to) {
                email.addTo(adresse);
            }
        }

        // Cc
        if (cc != null) {
            for (String adresse : cc) {
                email.addCc(adresse);
            }
        }

        // Cci
        if (cci != null) {
            for (String adresse : cci) {
                email.addBcc(adresse);
            }
        }

        // Subject
        email.setSubject(subjectPrefix != null ? subjectPrefix + subject : subject);

        // From
        email.setFrom(StringUtils.isNotEmpty(from) ? from : defaultFrom);

        // Message & Html
        if (message != null) {
            email.setTextMsg(message);
        }
        if (html != null) {
            email.setHtmlMsg(html);
        }

        if (StringUtils.isNotEmpty(this.charset)) {
            email.setCharset(this.charset);
        }

        email.buildMimeMessage();

        // Attachments
        for (AttachmentBean attachement : attachments) {
            email.attach(attachement.getDataSource(), attachement.getName(), attachement.getDescription());
        }

        email.sendMimeMessage();

    }

    // Initialisation

    /**
     * Initialise les proprits statiques pour la gestion des emails.
     */
    public static void init(String mailSessionJndiName, String defaultFrom, String subjectPrefix) {

        if (hostProperty == null) {
            Session mailSession;
            try {
                Context ctx = new InitialContext();
                mailSession = (Session) ctx.lookup(mailSessionJndiName);
                hostProperty = mailSession.getProperty("mail.smtp.host");
            } catch (NamingException e) {
                log.warn("Initialisation de la session email impossible.", e);
            }

        }

        MailUtil.defaultFrom = defaultFrom;
        MailUtil.subjectPrefix = subjectPrefix;
    }

    /**
     * Retourne la valeur du champ <code>from</code>.
     * 
     * @return la valeur du champ <code>from</code>.
     */
    public String getFrom() {
        return from;
    }

    /**
     * Met  jour le champ <code>from</code> avec la valeur du paramtre
     * <code>from</code>.
     * 
     * @param from
     *            La nouvelle valeur pour le champ <code>from</code>.
     */
    public void setFrom(String from) {
        this.from = from;
    }

    /**
     * Retourne la valeur du champ <code>to</code>.
     * 
     * @return la valeur du champ <code>to</code>.
     */
    public List<String> getTo() {
        return to;
    }

    /**
     * Met  jour le champ <code>to</code> avec la valeur du paramtre
     * <code>to</code>.
     * 
     * @param to
     *            La nouvelle valeur pour le champ <code>to</code>.
     */
    public void setTo(List<String> to) {
        this.to = to;
    }

    /**
     * Retourne la valeur du champ <code>cc</code>.
     * 
     * @return la valeur du champ <code>cc</code>.
     */
    public List<String> getCc() {
        return cc;
    }

    /**
     * Met  jour le champ <code>cc</code> avec la valeur du paramtre
     * <code>cc</code>.
     * 
     * @param cc
     *            La nouvelle valeur pour le champ <code>cc</code>.
     */
    public void setCc(List<String> cc) {
        this.cc = cc;
    }

    /**
     * Retourne la valeur du champ <code>cci</code>.
     * 
     * @return la valeur du champ <code>cci</code>.
     */
    public List<String> getCci() {
        return cci;
    }

    /**
     * Met  jour le champ <code>cci</code> avec la valeur du paramtre
     * <code>cci</code>.
     * 
     * @param cci
     *            La nouvelle valeur pour le champ <code>cci</code>.
     */
    public void setCci(List<String> cci) {
        this.cci = cci;
    }

    /**
     * Retourne la valeur du champ <code>subject</code>.
     * 
     * @return la valeur du champ <code>subject</code>.
     */
    public String getSubject() {
        return subject;
    }

    /**
     * Met  jour le champ <code>subject</code> avec la valeur du paramtre
     * <code>subject</code>.
     * 
     * @param subject
     *            La nouvelle valeur pour le champ <code>subject</code>.
     */
    public void setSubject(String subject) {
        this.subject = subject;
    }

    /**
     * Retourne la valeur du champ <code>message</code>.
     * 
     * @return la valeur du champ <code>message</code>.
     */
    public String getMessage() {
        return message;
    }

    /**
     * Met  jour le champ <code>message</code> avec la valeur du paramtre
     * <code>message</code>.
     * 
     * @param message
     *            La nouvelle valeur pour le champ <code>message</code>.
     */
    public void setMessage(String message) {
        this.message = message;
    }

    /**
     * Retourne la valeur du champ <code>html</code>.
     * 
     * @return la valeur du champ <code>html</code>.
     */
    public String getHtml() {
        return html;
    }

    /**
     * Met  jour le champ <code>html</code> avec la valeur du paramtre
     * <code>html</code>.
     * 
     * @param html
     *            La nouvelle valeur pour le champ <code>html</code>.
     */
    public void setHtml(String html) {
        this.html = html;
    }

    /**
     * Retourne la valeur du champ <code>hostProperty</code>.
     * 
     * @return la valeur du champ <code>hostProperty</code>.
     */
    public static String getHostProperty() {
        return hostProperty;
    }

    /**
     * Retourne la valeur du champ <code>defaultFrom</code>.
     * 
     * @return la valeur du champ <code>defaultFrom</code>.
     */
    public static String getDefaultFrom() {
        return defaultFrom;
    }

    /**
     * Retourne la valeur du champ <code>subjectPrefix</code>.
     * 
     * @return la valeur du champ <code>subjectPrefix</code>.
     */
    public static String getSubjectPrefix() {
        return subjectPrefix;
    }

    /**
     * Classe interne de transport pour les pices jointes.
     * 
     * @author dhazard 20 janv. 2010
     */
    private static class AttachmentBean {

        private DataSource dataSource;
        private String name;
        private String description;

        /**
         * Constructeur.
         * 
         * @param dataSource
         *            la {@link DataSource} de la pice jointe
         * @param name
         *            le nom de la pice jointe
         * @param description
         *            la description ventuelle de la pice jointe
         */
        private AttachmentBean(DataSource dataSource, String name, String description) {
            super();
            this.dataSource = dataSource;
            this.name = name;
            this.description = description;
        }

        /**
         * Retourne la valeur du champ <code>dataSource</code>.
         * 
         * @return la valeur du champ <code>dataSource</code>.
         */
        public DataSource getDataSource() {
            return dataSource;
        }

        /**
         * Retourne la valeur du champ <code>name</code>.
         * 
         * @return la valeur du champ <code>name</code>.
         */
        public String getName() {
            return name;
        }

        /**
         * Retourne la valeur du champ <code>description</code>.
         * 
         * @return la valeur du champ <code>description</code>.
         */
        public String getDescription() {
            return description;
        }

    }

    /**
     * Valide un email qui peut tre au format tendu ("xxxxx <xx@xx.xx>".
     * 
     * @param email
     *            l'email  tester
     * @return {@code true} si l'email est valide, {@code false } sinon.
     */
    public static final boolean isValid(String email) {

        String tmp = email;
        Matcher matcher = EMAIL_PATTERN.matcher(email);
        if (matcher.matches()) {
            tmp = matcher.group(1);
        }

        return EmailValidator.getInstance().isValid(tmp);
    }
}