Classe helper pour l'envoi de mails

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 118 fois - Téléchargée 34 fois

Contenu du snippet

Classe Helper pour simplifier l'envoi de mail.

Possibilité d'ajouter des destinataires, copie et copie cachée, de vérifier si une adresse est valide.
On peut appeler les fonctions avec un tableau de String en paramètre, ou avec une String toute seule.
Une string peut contenir plusieurs adresses mails séparées par un espace, une virgule ou un point virgule.

Notes :
- une fonction spéciale à la fin permet de transformer un pseudo en mail.
- un tout petit peu de config au début, le serveur smtp et l'adresse no-reply

Exemple d'utilisation :
//Envoi un message provenant de no-reply@societe.fr au webmaster,
//à mail@exemple et no.spam
Mail m = new Mail();
m.setTo("webmaster, mail@exemple.com;no.spam@thank.you");
m.setSujet("test");
m.setMessage("Ceci est un test");
m.send();

Source / Exemple :


/*

  • Created on 10 nov. 2004
  • /
package xxxx.util; import java.util.Properties; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /**
  • Classe pour simplifier les envois de mails
  • @author SMAC
  • /
public class Mail { /** Type texte brut */ static public final int TEXT = 0; /** Type text/html */ static public final int HTML = 1; /** Adresse "no-reply" par défaut de l'entreprise */ private static final String NOREPLY = "noreply@societe.fr"; /** Adresse du serveur SMTP de l'entreprise */ private static final String SMTPHOST = "smtp.societe.fr"; private Properties props; private Session session; private MimeMessage mm; private int mimetype; /**
  • Si on n'appelle pas setFrom, met automatiquement noreply@societe.fr
  • /
private boolean noreply = true; /**
  • Créateur d'un mail.
  • /
public Mail() { //Par défaut en texte brut mimetype = TEXT; //Get system properties props = System.getProperties(); //Setup mail server props.put("mail.smtp.host", SMTPHOST); //Get session session = Session.getDefaultInstance(props, null); //Define message mm = new MimeMessage(session); } //############################################################ //Ajout d'expéditeur et destinataires //############################################################ /**
  • Ajoute un expéditeur
  • @param expediteur
  • @throws Exception
  • /
public void setFrom(String expediteur) throws Exception { if (expediteur.trim().length() > 0) { mm.setFrom(checkMail(expediteur)); noreply = false; } } /**
  • Ajoute un destinataire
  • @param destinataire
  • @throws Exception
  • /
public void setTo(String destinataire) throws Exception { if (destinataire.trim().length() > 0) { if (plusieursMails(destinataire)) setTo(decoupe(destinataire)); else { mm.addRecipient(Message.RecipientType.TO, checkMail(destinataire)); } } } /**
  • Ajoute plusieurs destinataires
  • @param dest
  • @throws Exception
  • /
public void setTo(String[] dest) throws Exception { for (int i=0; i<dest.length; i++) setTo(dest[i]); } /**
  • Ajoute un destinataire en copie
  • @param cc
  • @throws Exception
  • /
public void setCC(String cc) throws Exception { if (cc.trim().length() > 0) { if (plusieursMails(cc)) setCC(decoupe(cc)); else { mm.addRecipient(Message.RecipientType.CC, checkMail(cc)); } } } /**
  • Ajoute plusieurs destinataires en copie
  • @param cc
  • @throws Exception
  • /
public void setCC(String[] cc) throws Exception { for (int i=0; i < cc.length; i++) setCC(cc[i]); } /**
  • Ajoute un destinataire en copie cachée.
  • @param bcc
  • @throws Exception
  • /
public void setCopieCachee(String bcc) throws Exception { if (bcc.trim().length() > 0) { if (plusieursMails(bcc)) setCopieCachee(decoupe(bcc)); else { mm.addRecipient(Message.RecipientType.BCC, checkMail(bcc)); } } } /**
  • Ajoute plusieurs destinataires en copie cachée.
  • @param bcc
  • @throws Exception
  • /
public void setCopieCachee(String[] bcc) throws Exception { for (int i=0; i < bcc.length; i++) setCopieCachee(bcc[i]); } //############################################################ //Champs avec destinataires multiples //############################################################ /**
  • Teste si y'a plusieurs mails dans la chaîne, séparés par un espace, une virgule ou un point-virgule
  • @param mails
  • @return
  • /
static public boolean plusieursMails(String mails) { return ((mails.indexOf(' ') + mails.indexOf(',') + mails.indexOf(';')) > -1); } /**
  • Découpe la chaîne contenant plusieurs mails en String[]
  • @return
  • /
static public String[] decoupe(String mails) { return mails.split(" |,|;"); } //############################################################ //Sujet et message //############################################################ /**
  • Ajoute le sujet
  • @param sujet
  • @throws Exception
  • /
public void setSujet(String sujet) throws Exception { mm.setSubject(sujet); } /**
  • Choisir entre le type texte brut ({@link Mail#TEXT}) ou HTML ({@link Mail#HTML}).
  • @param mime
  • @throws Exception
  • /
public void setMimeType(int mime) throws Exception { mimetype = mime; } /**
  • Ajoute le message
  • @param message
  • @throws Exception
  • /
public void setMessage(String message) throws Exception { if (mimetype == HTML) mm.setContent(message, "text/html"); else mm.setText(message); } //############################################################ //Envoi //############################################################ /**
  • Envoie le mail
  • @throws Exception
  • /
public void send() throws Exception { if (noreply) setFrom(NOREPLY); Transport.send(mm); } //############################################################ //Vérifications de la validité d'adresse e-mails //(fonctions pour l'extérieur : jsp ou WebServices...) //############################################################ /**
  • Vérifie si l'adresse passée en paramètre est valide. Si elle ne contient pas
  • de @, vérifie si elle correspond bien à un pseudo (voir nameToMail).
  • @param mail
  • /
static public void isValide(String mail) throws Exception { if (plusieursMails(mail)) areValide(decoupe(mail)); else Mail.checkMail(mail); } /**
  • Vérifie si les adresses passées en paramètres sont valides. Si elles ne contient pas
  • de @, vérifie si elles correspondent à des pseudos (voir nameToMail).
  • <p>Vérifie chacune des adresse, et renvoie une exception global, contenant plusieurs
  • messages d'erreur si plusieurs adresses sont fausses, chaque message étant séparé
  • par un \n.
  • @param mails
  • @throws Exception
  • /
static public void areValide(String[] mails) throws Exception { String msg = ""; for (int i=0; i<mails.length; i++) { try { isValide(mails[i]); } catch (Exception e) { msg += ((msg.length()>0)?"\n":"") + e.getMessage(); } } if (msg.length() > 0) { throw new Exception(msg); } } //############################################################ //Fonctions private, //statiques pour être appelés par les public isValide et areValide //############################################################ /**
  • Vérifie la validité d'une adresse e-mail, et renvoie sous forme d'InternetAdress
  • ou une exception en cas d'erreur.
  • @param mail
  • @throws Exception
  • /
static private InternetAddress checkMail(String mail) throws Exception { //Pas de @, c'est peut-être un pseudonyme ?... if (mail.indexOf('@') == -1) { return new InternetAddress(nameToMail(mail)); } else { //le parse d'InternetAddress ne renvoie pas d'erreur sur adresse@mail //alors on fait un test simple pour savoir si y'a un point, après l'@ //adresse@mail.fr est OK, adresse@mail renvoie une exception. if (mail.lastIndexOf('.') < mail.indexOf('@')) { throw new Exception("Adresse email \""+mail+"\" invalide"); } else { return new InternetAddress(mail); } } } /**
  • Ici votre fonction perso, qui transforme des noms génériques en adresses e-mail.
  • <p>Par exemple : webmaster -> webmaster@societe.fr
  • @param name
  • @throws Exception si le pseudo est inconnu.
  • /
static private String nameToMail(String name) throws Exception { //L'exemple du mail au webmaster, si on met juste "webmaster" sans mettre //@societe.fr, cette fonction transforme. if (name.equalsIgnoreCase("webmaster")) return "webmaster@societe.fr"; //else if.... //else if.... //else c'est une erreur else throw new Exception("Nom \""+name+"\" inconnu"); } }

Conclusion :


ça ne gère pas les pièces jointes, c'est basique, mais tellement pratique à utiliser dans une appli :-)

A voir également

Ajouter un commentaire

Commentaires

cs_biboobib
Messages postés
95
Date d'inscription
dimanche 29 juillet 2007
Statut
Membre
Dernière intervention
27 août 2011

Salut,
je utilise un autre code et j avais un erreur l ors de l envoi de l email qui dis:
Not Trusted TSL Certificate.
quelq'un peut me dire comment je pe corriger ca.

Merci
INI2000
Messages postés
1
Date d'inscription
mercredi 18 juin 2003
Statut
Membre
Dernière intervention
18 février 2007

Bonjour,

Je n'ai aucune erreur de compilation (C'est une très bonne nouvelle non?!!!)
Mais je n'arrive pas à recevoir le fameux email test.

Je suis qu'un simple programmeur en Java. Est-ce que mon ordi doit être un serveur pour se envoyer ce message. y a t il des configurations? Des installations? Merci de me pour votre reponse d'avance. Voici monprog principal.

public static void Main(String[] args) {
try{
Mail m = new Mail();
m.setTo("gasmi, h.gasmi@gmail.com");
m.setSujet("test");
m.setMessage("Ceci est un test");
m.send();
}
catch (Exception e) {
e.printStackTrace();
}
}
neolin85
Messages postés
8
Date d'inscription
mercredi 24 mai 2006
Statut
Membre
Dernière intervention
30 mars 2007

J'ai un probleme.
J'arrive pas a inclure le package javamail dans Eclipse
quelqu'un pourra m'aider.
cs_iubito
Messages postés
629
Date d'inscription
mercredi 3 juillet 2002
Statut
Membre
Dernière intervention
9 octobre 2006

www.google.fr
abdelkaoui
Messages postés
11
Date d'inscription
samedi 8 mars 2003
Statut
Membre
Dernière intervention
20 septembre 2007

non je n'ai pas cette package, pouvez vous SVP me donner le lien pour la telecharger ?
Merci tres bien

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.